1 /** 2 * This file has no copyright assigned and is placed in the Public Domain. 3 * This file is part of the mingw-w64 runtime package. 4 * No warranty is given; refer to the file DISCLAIMER.PD within this package. 5 */ 6 #ifdef DEFINE_GUID 7 8 #ifndef FAR 9 #define FAR 10 #endif 11 12 DEFINE_GUID(ScsiRawInterfaceGuid,0x53f56309,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b); 13 DEFINE_GUID(WmiScsiAddressGuid,0x53f5630f,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b); 14 #endif /* DEFINE_GUID */ 15 16 #ifndef _NTDDSCSIH_ 17 #define _NTDDSCSIH_ 18 19 #ifdef __cplusplus 20 extern "C" { 21 #endif 22 23 #define IOCTL_SCSI_BASE FILE_DEVICE_CONTROLLER 24 25 #define DD_SCSI_DEVICE_NAME "\\Device\\ScsiPort" 26 #define DD_SCSI_DEVICE_NAME_U L"\\Device\\ScsiPort" 27 28 #define IOCTL_SCSI_PASS_THROUGH CTL_CODE(IOCTL_SCSI_BASE,0x0401,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 29 #define IOCTL_SCSI_MINIPORT CTL_CODE(IOCTL_SCSI_BASE,0x0402,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 30 #define IOCTL_SCSI_GET_INQUIRY_DATA CTL_CODE(IOCTL_SCSI_BASE,0x0403,METHOD_BUFFERED,FILE_ANY_ACCESS) 31 #define IOCTL_SCSI_GET_CAPABILITIES CTL_CODE(IOCTL_SCSI_BASE,0x0404,METHOD_BUFFERED,FILE_ANY_ACCESS) 32 #define IOCTL_SCSI_PASS_THROUGH_DIRECT CTL_CODE(IOCTL_SCSI_BASE,0x0405,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 33 #define IOCTL_SCSI_GET_ADDRESS CTL_CODE(IOCTL_SCSI_BASE,0x0406,METHOD_BUFFERED,FILE_ANY_ACCESS) 34 #define IOCTL_SCSI_RESCAN_BUS CTL_CODE(IOCTL_SCSI_BASE,0x0407,METHOD_BUFFERED,FILE_ANY_ACCESS) 35 #define IOCTL_SCSI_GET_DUMP_POINTERS CTL_CODE(IOCTL_SCSI_BASE,0x0408,METHOD_BUFFERED,FILE_ANY_ACCESS) 36 #define IOCTL_SCSI_FREE_DUMP_POINTERS CTL_CODE(IOCTL_SCSI_BASE,0x0409,METHOD_BUFFERED,FILE_ANY_ACCESS) 37 #define IOCTL_IDE_PASS_THROUGH CTL_CODE(IOCTL_SCSI_BASE,0x040a,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 38 #define IOCTL_ATA_PASS_THROUGH CTL_CODE(IOCTL_SCSI_BASE,0x040b,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 39 #define IOCTL_ATA_PASS_THROUGH_DIRECT CTL_CODE(IOCTL_SCSI_BASE,0x040c,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 40 41 typedef struct _SCSI_PASS_THROUGH { 42 USHORT Length; 43 UCHAR ScsiStatus; 44 UCHAR PathId; 45 UCHAR TargetId; 46 UCHAR Lun; 47 UCHAR CdbLength; 48 UCHAR SenseInfoLength; 49 UCHAR DataIn; 50 ULONG DataTransferLength; 51 ULONG TimeOutValue; 52 ULONG_PTR DataBufferOffset; 53 ULONG SenseInfoOffset; 54 UCHAR Cdb[16]; 55 }SCSI_PASS_THROUGH,*PSCSI_PASS_THROUGH; 56 57 typedef struct _SCSI_PASS_THROUGH_DIRECT { 58 USHORT Length; 59 UCHAR ScsiStatus; 60 UCHAR PathId; 61 UCHAR TargetId; 62 UCHAR Lun; 63 UCHAR CdbLength; 64 UCHAR SenseInfoLength; 65 UCHAR DataIn; 66 ULONG DataTransferLength; 67 ULONG TimeOutValue; 68 PVOID DataBuffer; 69 ULONG SenseInfoOffset; 70 UCHAR Cdb[16]; 71 }SCSI_PASS_THROUGH_DIRECT,*PSCSI_PASS_THROUGH_DIRECT; 72 73 #if defined(_WIN64) 74 typedef struct _SCSI_PASS_THROUGH32 { 75 USHORT Length; 76 UCHAR ScsiStatus; 77 UCHAR PathId; 78 UCHAR TargetId; 79 UCHAR Lun; 80 UCHAR CdbLength; 81 UCHAR SenseInfoLength; 82 UCHAR DataIn; 83 ULONG DataTransferLength; 84 ULONG TimeOutValue; 85 ULONG32 DataBufferOffset; 86 ULONG SenseInfoOffset; 87 UCHAR Cdb[16]; 88 } SCSI_PASS_THROUGH32,*PSCSI_PASS_THROUGH32; 89 90 typedef struct _SCSI_PASS_THROUGH_DIRECT32 { 91 USHORT Length; 92 UCHAR ScsiStatus; 93 UCHAR PathId; 94 UCHAR TargetId; 95 UCHAR Lun; 96 UCHAR CdbLength; 97 UCHAR SenseInfoLength; 98 UCHAR DataIn; 99 ULONG DataTransferLength; 100 ULONG TimeOutValue; 101 VOID *DataBuffer; 102 ULONG SenseInfoOffset; 103 UCHAR Cdb[16]; 104 } SCSI_PASS_THROUGH_DIRECT32,*PSCSI_PASS_THROUGH_DIRECT32; 105 #endif /* _WIN64 */ 106 107 typedef struct _ATA_PASS_THROUGH_EX { 108 USHORT Length; 109 USHORT AtaFlags; 110 UCHAR PathId; 111 UCHAR TargetId; 112 UCHAR Lun; 113 UCHAR ReservedAsUchar; 114 ULONG DataTransferLength; 115 ULONG TimeOutValue; 116 ULONG ReservedAsUlong; 117 ULONG_PTR DataBufferOffset; 118 UCHAR PreviousTaskFile[8]; 119 UCHAR CurrentTaskFile[8]; 120 } ATA_PASS_THROUGH_EX,*PATA_PASS_THROUGH_EX; 121 122 typedef struct _ATA_PASS_THROUGH_DIRECT { 123 USHORT Length; 124 USHORT AtaFlags; 125 UCHAR PathId; 126 UCHAR TargetId; 127 UCHAR Lun; 128 UCHAR ReservedAsUchar; 129 ULONG DataTransferLength; 130 ULONG TimeOutValue; 131 ULONG ReservedAsUlong; 132 PVOID DataBuffer; 133 UCHAR PreviousTaskFile[8]; 134 UCHAR CurrentTaskFile[8]; 135 } ATA_PASS_THROUGH_DIRECT,*PATA_PASS_THROUGH_DIRECT; 136 137 #if defined(_WIN64) 138 139 typedef struct _ATA_PASS_THROUGH_EX32 { 140 USHORT Length; 141 USHORT AtaFlags; 142 UCHAR PathId; 143 UCHAR TargetId; 144 UCHAR Lun; 145 UCHAR ReservedAsUchar; 146 ULONG DataTransferLength; 147 ULONG TimeOutValue; 148 ULONG ReservedAsUlong; 149 ULONG32 DataBufferOffset; 150 UCHAR PreviousTaskFile[8]; 151 UCHAR CurrentTaskFile[8]; 152 } ATA_PASS_THROUGH_EX32,*PATA_PASS_THROUGH_EX32; 153 154 typedef struct _ATA_PASS_THROUGH_DIRECT32 { 155 USHORT Length; 156 USHORT AtaFlags; 157 UCHAR PathId; 158 UCHAR TargetId; 159 UCHAR Lun; 160 UCHAR ReservedAsUchar; 161 ULONG DataTransferLength; 162 ULONG TimeOutValue; 163 ULONG ReservedAsUlong; 164 VOID *DataBuffer; 165 UCHAR PreviousTaskFile[8]; 166 UCHAR CurrentTaskFile[8]; 167 } ATA_PASS_THROUGH_DIRECT32,*PATA_PASS_THROUGH_DIRECT32; 168 #endif /* _WIN64 */ 169 170 #define ATA_FLAGS_DRDY_REQUIRED (1 << 0) 171 #define ATA_FLAGS_DATA_IN (1 << 1) 172 #define ATA_FLAGS_DATA_OUT (1 << 2) 173 #define ATA_FLAGS_48BIT_COMMAND (1 << 3) 174 #define ATA_FLAGS_USE_DMA (1 << 4) 175 176 typedef struct _SCSI_BUS_DATA { 177 UCHAR NumberOfLogicalUnits; 178 UCHAR InitiatorBusId; 179 ULONG InquiryDataOffset; 180 }SCSI_BUS_DATA,*PSCSI_BUS_DATA; 181 182 typedef struct _SCSI_ADAPTER_BUS_INFO { 183 UCHAR NumberOfBuses; 184 SCSI_BUS_DATA BusData[1]; 185 } SCSI_ADAPTER_BUS_INFO,*PSCSI_ADAPTER_BUS_INFO; 186 187 typedef struct _SCSI_INQUIRY_DATA { 188 UCHAR PathId; 189 UCHAR TargetId; 190 UCHAR Lun; 191 BOOLEAN DeviceClaimed; 192 ULONG InquiryDataLength; 193 ULONG NextInquiryDataOffset; 194 UCHAR InquiryData[1]; 195 }SCSI_INQUIRY_DATA,*PSCSI_INQUIRY_DATA; 196 197 typedef struct _SRB_IO_CONTROL { 198 ULONG HeaderLength; 199 UCHAR Signature[8]; 200 ULONG Timeout; 201 ULONG ControlCode; 202 ULONG ReturnCode; 203 ULONG Length; 204 } SRB_IO_CONTROL,*PSRB_IO_CONTROL; 205 206 typedef struct _IO_SCSI_CAPABILITIES { 207 ULONG Length; 208 ULONG MaximumTransferLength; 209 ULONG MaximumPhysicalPages; 210 ULONG SupportedAsynchronousEvents; 211 ULONG AlignmentMask; 212 BOOLEAN TaggedQueuing; 213 BOOLEAN AdapterScansDown; 214 BOOLEAN AdapterUsesPio; 215 } IO_SCSI_CAPABILITIES,*PIO_SCSI_CAPABILITIES; 216 217 typedef struct _SCSI_ADDRESS { 218 ULONG Length; 219 UCHAR PortNumber; 220 UCHAR PathId; 221 UCHAR TargetId; 222 UCHAR Lun; 223 } SCSI_ADDRESS,*PSCSI_ADDRESS; 224 225 struct _ADAPTER_OBJECT; 226 227 typedef struct _DUMP_POINTERS { 228 struct _ADAPTER_OBJECT *AdapterObject; 229 PVOID MappedRegisterBase; 230 PVOID DumpData; 231 PVOID CommonBufferVa; 232 LARGE_INTEGER CommonBufferPa; 233 ULONG CommonBufferSize; 234 BOOLEAN AllocateCommonBuffers; 235 BOOLEAN UseDiskDump; 236 UCHAR Spare1[2]; 237 PVOID DeviceObject; 238 } DUMP_POINTERS,*PDUMP_POINTERS; 239 240 #define SCSI_IOCTL_DATA_OUT 0 241 #define SCSI_IOCTL_DATA_IN 1 242 #define SCSI_IOCTL_DATA_UNSPECIFIED 2 243 244 #ifdef __cplusplus 245 } 246 #endif 247 248 #endif /* _NTDDSCSIH_ */ 249 250