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.
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 */
23 #define IOCTL_SCSI_BASE FILE_DEVICE_CONTROLLER
25 #define DD_SCSI_DEVICE_NAME "\\Device\\ScsiPort"
26 #define DD_SCSI_DEVICE_NAME_U L"\\Device\\ScsiPort"
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)
43 typedef struct _SCSI_PASS_THROUGH
{
50 UCHAR SenseInfoLength
;
52 ULONG DataTransferLength
;
54 ULONG_PTR DataBufferOffset
;
55 ULONG SenseInfoOffset
;
57 }SCSI_PASS_THROUGH
,*PSCSI_PASS_THROUGH
;
59 typedef struct _SCSI_PASS_THROUGH_DIRECT
{
66 UCHAR SenseInfoLength
;
68 ULONG DataTransferLength
;
71 ULONG SenseInfoOffset
;
73 }SCSI_PASS_THROUGH_DIRECT
,*PSCSI_PASS_THROUGH_DIRECT
;
76 typedef struct _SCSI_PASS_THROUGH32
{
83 UCHAR SenseInfoLength
;
85 ULONG DataTransferLength
;
87 ULONG32 DataBufferOffset
;
88 ULONG SenseInfoOffset
;
90 } SCSI_PASS_THROUGH32
,*PSCSI_PASS_THROUGH32
;
92 typedef struct _SCSI_PASS_THROUGH_DIRECT32
{
99 UCHAR SenseInfoLength
;
101 ULONG DataTransferLength
;
103 VOID
* POINTER_32 DataBuffer
;
104 ULONG SenseInfoOffset
;
106 } SCSI_PASS_THROUGH_DIRECT32
,*PSCSI_PASS_THROUGH_DIRECT32
;
110 typedef struct _SCSI_PASS_THROUGH_EX
{
114 ULONG StorAddressLength
;
116 UCHAR SenseInfoLength
;
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
;
129 typedef struct _ATA_PASS_THROUGH_EX
{
135 UCHAR ReservedAsUchar
;
136 ULONG DataTransferLength
;
138 ULONG ReservedAsUlong
;
139 ULONG_PTR DataBufferOffset
;
140 UCHAR PreviousTaskFile
[8];
141 UCHAR CurrentTaskFile
[8];
142 } ATA_PASS_THROUGH_EX
,*PATA_PASS_THROUGH_EX
;
144 typedef struct _ATA_PASS_THROUGH_DIRECT
{
150 UCHAR ReservedAsUchar
;
151 ULONG DataTransferLength
;
153 ULONG ReservedAsUlong
;
155 UCHAR PreviousTaskFile
[8];
156 UCHAR CurrentTaskFile
[8];
157 } ATA_PASS_THROUGH_DIRECT
,*PATA_PASS_THROUGH_DIRECT
;
161 typedef struct _ATA_PASS_THROUGH_EX32
{
167 UCHAR ReservedAsUchar
;
168 ULONG DataTransferLength
;
170 ULONG ReservedAsUlong
;
171 ULONG32 DataBufferOffset
;
172 UCHAR PreviousTaskFile
[8];
173 UCHAR CurrentTaskFile
[8];
174 } ATA_PASS_THROUGH_EX32
,*PATA_PASS_THROUGH_EX32
;
176 typedef struct _ATA_PASS_THROUGH_DIRECT32
{
182 UCHAR ReservedAsUchar
;
183 ULONG DataTransferLength
;
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
;
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)
198 typedef struct _SCSI_BUS_DATA
{
199 UCHAR NumberOfLogicalUnits
;
200 UCHAR InitiatorBusId
;
201 ULONG InquiryDataOffset
;
202 }SCSI_BUS_DATA
,*PSCSI_BUS_DATA
;
204 typedef struct _SCSI_ADAPTER_BUS_INFO
{
206 SCSI_BUS_DATA BusData
[1];
207 } SCSI_ADAPTER_BUS_INFO
,*PSCSI_ADAPTER_BUS_INFO
;
209 typedef struct _SCSI_INQUIRY_DATA
{
213 BOOLEAN DeviceClaimed
;
214 ULONG InquiryDataLength
;
215 ULONG NextInquiryDataOffset
;
216 UCHAR InquiryData
[1];
217 }SCSI_INQUIRY_DATA
,*PSCSI_INQUIRY_DATA
;
219 typedef struct _SRB_IO_CONTROL
{
226 } SRB_IO_CONTROL
,*PSRB_IO_CONTROL
;
228 typedef struct _IO_SCSI_CAPABILITIES
{
230 ULONG MaximumTransferLength
;
231 ULONG MaximumPhysicalPages
;
232 ULONG SupportedAsynchronousEvents
;
234 BOOLEAN TaggedQueuing
;
235 BOOLEAN AdapterScansDown
;
236 BOOLEAN AdapterUsesPio
;
237 } IO_SCSI_CAPABILITIES
,*PIO_SCSI_CAPABILITIES
;
239 typedef struct _SCSI_ADDRESS
{
245 } SCSI_ADDRESS
,*PSCSI_ADDRESS
;
247 struct _ADAPTER_OBJECT
;
249 typedef struct _DUMP_POINTERS
{
250 struct _ADAPTER_OBJECT
*AdapterObject
;
251 PVOID MappedRegisterBase
;
253 PVOID CommonBufferVa
;
254 LARGE_INTEGER CommonBufferPa
;
255 ULONG CommonBufferSize
;
256 BOOLEAN AllocateCommonBuffers
;
260 } DUMP_POINTERS
,*PDUMP_POINTERS
;
262 #define SCSI_IOCTL_DATA_OUT 0
263 #define SCSI_IOCTL_DATA_IN 1
264 #define SCSI_IOCTL_DATA_UNSPECIFIED 2
270 #endif /* _NTDDSCSIH_ */