1 /** 2 * This file has no copyright assigned and is placed in the Public Domain. 3 * This file is part of the w64 mingw-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,0x53f56309L,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b); 13 DEFINE_GUID(WmiScsiAddressGuid,0x53f5630fL,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_SCSI_PASS_THROUGH_EX CTL_CODE(IOCTL_SCSI_BASE, 0x0411, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 38 #define IOCTL_SCSI_PASS_THROUGH_DIRECT_EX CTL_CODE(IOCTL_SCSI_BASE, 0x0412, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 39 #define IOCTL_IDE_PASS_THROUGH CTL_CODE(IOCTL_SCSI_BASE,0x040a,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 40 #define IOCTL_ATA_PASS_THROUGH CTL_CODE(IOCTL_SCSI_BASE,0x040b,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 41 #define IOCTL_ATA_PASS_THROUGH_DIRECT CTL_CODE(IOCTL_SCSI_BASE,0x040c,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 42 43 typedef struct _SCSI_PASS_THROUGH { 44 USHORT Length; 45 UCHAR ScsiStatus; 46 UCHAR PathId; 47 UCHAR TargetId; 48 UCHAR Lun; 49 UCHAR CdbLength; 50 UCHAR SenseInfoLength; 51 UCHAR DataIn; 52 ULONG DataTransferLength; 53 ULONG TimeOutValue; 54 ULONG_PTR DataBufferOffset; 55 ULONG SenseInfoOffset; 56 UCHAR Cdb[16]; 57 }SCSI_PASS_THROUGH,*PSCSI_PASS_THROUGH; 58 59 typedef struct _SCSI_PASS_THROUGH_DIRECT { 60 USHORT Length; 61 UCHAR ScsiStatus; 62 UCHAR PathId; 63 UCHAR TargetId; 64 UCHAR Lun; 65 UCHAR CdbLength; 66 UCHAR SenseInfoLength; 67 UCHAR DataIn; 68 ULONG DataTransferLength; 69 ULONG TimeOutValue; 70 PVOID DataBuffer; 71 ULONG SenseInfoOffset; 72 UCHAR Cdb[16]; 73 }SCSI_PASS_THROUGH_DIRECT,*PSCSI_PASS_THROUGH_DIRECT; 74 75 #if defined(_WIN64) 76 typedef struct _SCSI_PASS_THROUGH32 { 77 USHORT Length; 78 UCHAR ScsiStatus; 79 UCHAR PathId; 80 UCHAR TargetId; 81 UCHAR Lun; 82 UCHAR CdbLength; 83 UCHAR SenseInfoLength; 84 UCHAR DataIn; 85 ULONG DataTransferLength; 86 ULONG TimeOutValue; 87 ULONG32 DataBufferOffset; 88 ULONG SenseInfoOffset; 89 UCHAR Cdb[16]; 90 } SCSI_PASS_THROUGH32,*PSCSI_PASS_THROUGH32; 91 92 typedef struct _SCSI_PASS_THROUGH_DIRECT32 { 93 USHORT Length; 94 UCHAR ScsiStatus; 95 UCHAR PathId; 96 UCHAR TargetId; 97 UCHAR Lun; 98 UCHAR CdbLength; 99 UCHAR SenseInfoLength; 100 UCHAR DataIn; 101 ULONG DataTransferLength; 102 ULONG TimeOutValue; 103 VOID * POINTER_32 DataBuffer; 104 ULONG SenseInfoOffset; 105 UCHAR Cdb[16]; 106 } SCSI_PASS_THROUGH_DIRECT32,*PSCSI_PASS_THROUGH_DIRECT32; 107 #endif /* _WIN64 */ 108 109 110 typedef struct _SCSI_PASS_THROUGH_EX { 111 ULONG Version; 112 ULONG Length; 113 ULONG CdbLength; 114 ULONG StorAddressLength; 115 UCHAR ScsiStatus; 116 UCHAR SenseInfoLength; 117 UCHAR DataDirection; 118 UCHAR Reserved; 119 ULONG TimeOutValue; 120 ULONG StorAddressOffset; 121 ULONG SenseInfoOffset; 122 ULONG DataOutTransferLength; 123 ULONG DataInTransferLength; 124 ULONG_PTR DataOutBufferOffset; 125 ULONG_PTR DataInBufferOffset; 126 UCHAR Cdb[ANYSIZE_ARRAY]; 127 } SCSI_PASS_THROUGH_EX, *PSCSI_PASS_THROUGH_EX; 128 129 typedef struct _ATA_PASS_THROUGH_EX { 130 USHORT Length; 131 USHORT AtaFlags; 132 UCHAR PathId; 133 UCHAR TargetId; 134 UCHAR Lun; 135 UCHAR ReservedAsUchar; 136 ULONG DataTransferLength; 137 ULONG TimeOutValue; 138 ULONG ReservedAsUlong; 139 ULONG_PTR DataBufferOffset; 140 UCHAR PreviousTaskFile[8]; 141 UCHAR CurrentTaskFile[8]; 142 } ATA_PASS_THROUGH_EX,*PATA_PASS_THROUGH_EX; 143 144 typedef struct _ATA_PASS_THROUGH_DIRECT { 145 USHORT Length; 146 USHORT AtaFlags; 147 UCHAR PathId; 148 UCHAR TargetId; 149 UCHAR Lun; 150 UCHAR ReservedAsUchar; 151 ULONG DataTransferLength; 152 ULONG TimeOutValue; 153 ULONG ReservedAsUlong; 154 PVOID DataBuffer; 155 UCHAR PreviousTaskFile[8]; 156 UCHAR CurrentTaskFile[8]; 157 } ATA_PASS_THROUGH_DIRECT,*PATA_PASS_THROUGH_DIRECT; 158 159 #if defined(_WIN64) 160 161 typedef struct _ATA_PASS_THROUGH_EX32 { 162 USHORT Length; 163 USHORT AtaFlags; 164 UCHAR PathId; 165 UCHAR TargetId; 166 UCHAR Lun; 167 UCHAR ReservedAsUchar; 168 ULONG DataTransferLength; 169 ULONG TimeOutValue; 170 ULONG ReservedAsUlong; 171 ULONG32 DataBufferOffset; 172 UCHAR PreviousTaskFile[8]; 173 UCHAR CurrentTaskFile[8]; 174 } ATA_PASS_THROUGH_EX32,*PATA_PASS_THROUGH_EX32; 175 176 typedef struct _ATA_PASS_THROUGH_DIRECT32 { 177 USHORT Length; 178 USHORT AtaFlags; 179 UCHAR PathId; 180 UCHAR TargetId; 181 UCHAR Lun; 182 UCHAR ReservedAsUchar; 183 ULONG DataTransferLength; 184 ULONG TimeOutValue; 185 ULONG ReservedAsUlong; 186 VOID * POINTER_32 DataBuffer; 187 UCHAR PreviousTaskFile[8]; 188 UCHAR CurrentTaskFile[8]; 189 } ATA_PASS_THROUGH_DIRECT32,*PATA_PASS_THROUGH_DIRECT32; 190 #endif /* _WIN64 */ 191 192 #define ATA_FLAGS_DRDY_REQUIRED (1 << 0) 193 #define ATA_FLAGS_DATA_IN (1 << 1) 194 #define ATA_FLAGS_DATA_OUT (1 << 2) 195 #define ATA_FLAGS_48BIT_COMMAND (1 << 3) 196 #define ATA_FLAGS_USE_DMA (1 << 4) 197 198 typedef struct _SCSI_BUS_DATA { 199 UCHAR NumberOfLogicalUnits; 200 UCHAR InitiatorBusId; 201 ULONG InquiryDataOffset; 202 }SCSI_BUS_DATA,*PSCSI_BUS_DATA; 203 204 typedef struct _SCSI_ADAPTER_BUS_INFO { 205 UCHAR NumberOfBuses; 206 SCSI_BUS_DATA BusData[1]; 207 } SCSI_ADAPTER_BUS_INFO,*PSCSI_ADAPTER_BUS_INFO; 208 209 typedef struct _SCSI_INQUIRY_DATA { 210 UCHAR PathId; 211 UCHAR TargetId; 212 UCHAR Lun; 213 BOOLEAN DeviceClaimed; 214 ULONG InquiryDataLength; 215 ULONG NextInquiryDataOffset; 216 UCHAR InquiryData[1]; 217 }SCSI_INQUIRY_DATA,*PSCSI_INQUIRY_DATA; 218 219 typedef struct _SRB_IO_CONTROL { 220 ULONG HeaderLength; 221 UCHAR Signature[8]; 222 ULONG Timeout; 223 ULONG ControlCode; 224 ULONG ReturnCode; 225 ULONG Length; 226 } SRB_IO_CONTROL,*PSRB_IO_CONTROL; 227 228 typedef struct _IO_SCSI_CAPABILITIES { 229 ULONG Length; 230 ULONG MaximumTransferLength; 231 ULONG MaximumPhysicalPages; 232 ULONG SupportedAsynchronousEvents; 233 ULONG AlignmentMask; 234 BOOLEAN TaggedQueuing; 235 BOOLEAN AdapterScansDown; 236 BOOLEAN AdapterUsesPio; 237 } IO_SCSI_CAPABILITIES,*PIO_SCSI_CAPABILITIES; 238 239 typedef struct _SCSI_ADDRESS { 240 ULONG Length; 241 UCHAR PortNumber; 242 UCHAR PathId; 243 UCHAR TargetId; 244 UCHAR Lun; 245 } SCSI_ADDRESS,*PSCSI_ADDRESS; 246 247 struct _ADAPTER_OBJECT; 248 249 typedef struct _DUMP_POINTERS { 250 struct _ADAPTER_OBJECT *AdapterObject; 251 PVOID MappedRegisterBase; 252 PVOID DumpData; 253 PVOID CommonBufferVa; 254 LARGE_INTEGER CommonBufferPa; 255 ULONG CommonBufferSize; 256 BOOLEAN AllocateCommonBuffers; 257 BOOLEAN UseDiskDump; 258 UCHAR Spare1[2]; 259 PVOID DeviceObject; 260 } DUMP_POINTERS,*PDUMP_POINTERS; 261 262 #define SCSI_IOCTL_DATA_OUT 0 263 #define SCSI_IOCTL_DATA_IN 1 264 #define SCSI_IOCTL_DATA_UNSPECIFIED 2 265 266 #ifdef __cplusplus 267 } 268 #endif 269 270 #endif /* _NTDDSCSIH_ */ 271 272