| /** | |
| * This file has no copyright assigned and is placed in the Public Domain. | |
| * This file is part of the w64 mingw-runtime package. | |
| * No warranty is given; refer to the file DISCLAIMER.PD within this package. | |
| */ | |
| #ifdef DEFINE_GUID | |
| #ifndef FAR | |
| #define FAR | |
| #endif | |
| DEFINE_GUID(ScsiRawInterfaceGuid,0x53f56309L,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b); | |
| DEFINE_GUID(WmiScsiAddressGuid,0x53f5630fL,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b); | |
| #endif /* DEFINE_GUID */ | |
| #ifndef _NTDDSCSIH_ | |
| #define _NTDDSCSIH_ | |
| #ifdef __cplusplus | |
| extern "C" { | |
| #endif | |
| #define IOCTL_SCSI_BASE FILE_DEVICE_CONTROLLER | |
| #define DD_SCSI_DEVICE_NAME "\\Device\\ScsiPort" | |
| #define DD_SCSI_DEVICE_NAME_U L"\\Device\\ScsiPort" | |
| #define IOCTL_SCSI_PASS_THROUGH CTL_CODE(IOCTL_SCSI_BASE,0x0401,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) | |
| #define IOCTL_SCSI_MINIPORT CTL_CODE(IOCTL_SCSI_BASE,0x0402,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) | |
| #define IOCTL_SCSI_GET_INQUIRY_DATA CTL_CODE(IOCTL_SCSI_BASE,0x0403,METHOD_BUFFERED,FILE_ANY_ACCESS) | |
| #define IOCTL_SCSI_GET_CAPABILITIES CTL_CODE(IOCTL_SCSI_BASE,0x0404,METHOD_BUFFERED,FILE_ANY_ACCESS) | |
| #define IOCTL_SCSI_PASS_THROUGH_DIRECT CTL_CODE(IOCTL_SCSI_BASE,0x0405,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) | |
| #define IOCTL_SCSI_GET_ADDRESS CTL_CODE(IOCTL_SCSI_BASE,0x0406,METHOD_BUFFERED,FILE_ANY_ACCESS) | |
| #define IOCTL_SCSI_RESCAN_BUS CTL_CODE(IOCTL_SCSI_BASE,0x0407,METHOD_BUFFERED,FILE_ANY_ACCESS) | |
| #define IOCTL_SCSI_GET_DUMP_POINTERS CTL_CODE(IOCTL_SCSI_BASE,0x0408,METHOD_BUFFERED,FILE_ANY_ACCESS) | |
| #define IOCTL_SCSI_FREE_DUMP_POINTERS CTL_CODE(IOCTL_SCSI_BASE,0x0409,METHOD_BUFFERED,FILE_ANY_ACCESS) | |
| #define IOCTL_IDE_PASS_THROUGH CTL_CODE(IOCTL_SCSI_BASE,0x040a,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) | |
| #define IOCTL_ATA_PASS_THROUGH CTL_CODE(IOCTL_SCSI_BASE,0x040b,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) | |
| #define IOCTL_ATA_PASS_THROUGH_DIRECT CTL_CODE(IOCTL_SCSI_BASE,0x040c,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) | |
| typedef struct _SCSI_PASS_THROUGH { | |
| USHORT Length; | |
| UCHAR ScsiStatus; | |
| UCHAR PathId; | |
| UCHAR TargetId; | |
| UCHAR Lun; | |
| UCHAR CdbLength; | |
| UCHAR SenseInfoLength; | |
| UCHAR DataIn; | |
| ULONG DataTransferLength; | |
| ULONG TimeOutValue; | |
| ULONG_PTR DataBufferOffset; | |
| ULONG SenseInfoOffset; | |
| UCHAR Cdb[16]; | |
| }SCSI_PASS_THROUGH,*PSCSI_PASS_THROUGH; | |
| typedef struct _SCSI_PASS_THROUGH_DIRECT { | |
| USHORT Length; | |
| UCHAR ScsiStatus; | |
| UCHAR PathId; | |
| UCHAR TargetId; | |
| UCHAR Lun; | |
| UCHAR CdbLength; | |
| UCHAR SenseInfoLength; | |
| UCHAR DataIn; | |
| ULONG DataTransferLength; | |
| ULONG TimeOutValue; | |
| PVOID DataBuffer; | |
| ULONG SenseInfoOffset; | |
| UCHAR Cdb[16]; | |
| }SCSI_PASS_THROUGH_DIRECT,*PSCSI_PASS_THROUGH_DIRECT; | |
| #if defined(_WIN64) | |
| typedef struct _SCSI_PASS_THROUGH32 { | |
| USHORT Length; | |
| UCHAR ScsiStatus; | |
| UCHAR PathId; | |
| UCHAR TargetId; | |
| UCHAR Lun; | |
| UCHAR CdbLength; | |
| UCHAR SenseInfoLength; | |
| UCHAR DataIn; | |
| ULONG DataTransferLength; | |
| ULONG TimeOutValue; | |
| ULONG32 DataBufferOffset; | |
| ULONG SenseInfoOffset; | |
| UCHAR Cdb[16]; | |
| } SCSI_PASS_THROUGH32,*PSCSI_PASS_THROUGH32; | |
| typedef struct _SCSI_PASS_THROUGH_DIRECT32 { | |
| USHORT Length; | |
| UCHAR ScsiStatus; | |
| UCHAR PathId; | |
| UCHAR TargetId; | |
| UCHAR Lun; | |
| UCHAR CdbLength; | |
| UCHAR SenseInfoLength; | |
| UCHAR DataIn; | |
| ULONG DataTransferLength; | |
| ULONG TimeOutValue; | |
| VOID *DataBuffer; | |
| ULONG SenseInfoOffset; | |
| UCHAR Cdb[16]; | |
| } SCSI_PASS_THROUGH_DIRECT32,*PSCSI_PASS_THROUGH_DIRECT32; | |
| #endif /* _WIN64 */ | |
| typedef struct _ATA_PASS_THROUGH_EX { | |
| USHORT Length; | |
| USHORT AtaFlags; | |
| UCHAR PathId; | |
| UCHAR TargetId; | |
| UCHAR Lun; | |
| UCHAR ReservedAsUchar; | |
| ULONG DataTransferLength; | |
| ULONG TimeOutValue; | |
| ULONG ReservedAsUlong; | |
| ULONG_PTR DataBufferOffset; | |
| UCHAR PreviousTaskFile[8]; | |
| UCHAR CurrentTaskFile[8]; | |
| } ATA_PASS_THROUGH_EX,*PATA_PASS_THROUGH_EX; | |
| typedef struct _ATA_PASS_THROUGH_DIRECT { | |
| USHORT Length; | |
| USHORT AtaFlags; | |
| UCHAR PathId; | |
| UCHAR TargetId; | |
| UCHAR Lun; | |
| UCHAR ReservedAsUchar; | |
| ULONG DataTransferLength; | |
| ULONG TimeOutValue; | |
| ULONG ReservedAsUlong; | |
| PVOID DataBuffer; | |
| UCHAR PreviousTaskFile[8]; | |
| UCHAR CurrentTaskFile[8]; | |
| } ATA_PASS_THROUGH_DIRECT,*PATA_PASS_THROUGH_DIRECT; | |
| #if defined(_WIN64) | |
| typedef struct _ATA_PASS_THROUGH_EX32 { | |
| USHORT Length; | |
| USHORT AtaFlags; | |
| UCHAR PathId; | |
| UCHAR TargetId; | |
| UCHAR Lun; | |
| UCHAR ReservedAsUchar; | |
| ULONG DataTransferLength; | |
| ULONG TimeOutValue; | |
| ULONG ReservedAsUlong; | |
| ULONG32 DataBufferOffset; | |
| UCHAR PreviousTaskFile[8]; | |
| UCHAR CurrentTaskFile[8]; | |
| } ATA_PASS_THROUGH_EX32,*PATA_PASS_THROUGH_EX32; | |
| typedef struct _ATA_PASS_THROUGH_DIRECT32 { | |
| USHORT Length; | |
| USHORT AtaFlags; | |
| UCHAR PathId; | |
| UCHAR TargetId; | |
| UCHAR Lun; | |
| UCHAR ReservedAsUchar; | |
| ULONG DataTransferLength; | |
| ULONG TimeOutValue; | |
| ULONG ReservedAsUlong; | |
| VOID *DataBuffer; | |
| UCHAR PreviousTaskFile[8]; | |
| UCHAR CurrentTaskFile[8]; | |
| } ATA_PASS_THROUGH_DIRECT32,*PATA_PASS_THROUGH_DIRECT32; | |
| #endif /* _WIN64 */ | |
| #define ATA_FLAGS_DRDY_REQUIRED (1 << 0) | |
| #define ATA_FLAGS_DATA_IN (1 << 1) | |
| #define ATA_FLAGS_DATA_OUT (1 << 2) | |
| #define ATA_FLAGS_48BIT_COMMAND (1 << 3) | |
| #define ATA_FLAGS_USE_DMA (1 << 4) | |
| typedef struct _SCSI_BUS_DATA { | |
| UCHAR NumberOfLogicalUnits; | |
| UCHAR InitiatorBusId; | |
| ULONG InquiryDataOffset; | |
| }SCSI_BUS_DATA,*PSCSI_BUS_DATA; | |
| typedef struct _SCSI_ADAPTER_BUS_INFO { | |
| UCHAR NumberOfBuses; | |
| SCSI_BUS_DATA BusData[1]; | |
| } SCSI_ADAPTER_BUS_INFO,*PSCSI_ADAPTER_BUS_INFO; | |
| typedef struct _SCSI_INQUIRY_DATA { | |
| UCHAR PathId; | |
| UCHAR TargetId; | |
| UCHAR Lun; | |
| BOOLEAN DeviceClaimed; | |
| ULONG InquiryDataLength; | |
| ULONG NextInquiryDataOffset; | |
| UCHAR InquiryData[1]; | |
| }SCSI_INQUIRY_DATA,*PSCSI_INQUIRY_DATA; | |
| typedef struct _SRB_IO_CONTROL { | |
| ULONG HeaderLength; | |
| UCHAR Signature[8]; | |
| ULONG Timeout; | |
| ULONG ControlCode; | |
| ULONG ReturnCode; | |
| ULONG Length; | |
| } SRB_IO_CONTROL,*PSRB_IO_CONTROL; | |
| typedef struct _IO_SCSI_CAPABILITIES { | |
| ULONG Length; | |
| ULONG MaximumTransferLength; | |
| ULONG MaximumPhysicalPages; | |
| ULONG SupportedAsynchronousEvents; | |
| ULONG AlignmentMask; | |
| BOOLEAN TaggedQueuing; | |
| BOOLEAN AdapterScansDown; | |
| BOOLEAN AdapterUsesPio; | |
| } IO_SCSI_CAPABILITIES,*PIO_SCSI_CAPABILITIES; | |
| typedef struct _SCSI_ADDRESS { | |
| ULONG Length; | |
| UCHAR PortNumber; | |
| UCHAR PathId; | |
| UCHAR TargetId; | |
| UCHAR Lun; | |
| } SCSI_ADDRESS,*PSCSI_ADDRESS; | |
| struct _ADAPTER_OBJECT; | |
| typedef struct _DUMP_POINTERS { | |
| struct _ADAPTER_OBJECT *AdapterObject; | |
| PVOID MappedRegisterBase; | |
| PVOID DumpData; | |
| PVOID CommonBufferVa; | |
| LARGE_INTEGER CommonBufferPa; | |
| ULONG CommonBufferSize; | |
| BOOLEAN AllocateCommonBuffers; | |
| BOOLEAN UseDiskDump; | |
| UCHAR Spare1[2]; | |
| PVOID DeviceObject; | |
| } DUMP_POINTERS,*PDUMP_POINTERS; | |
| #define SCSI_IOCTL_DATA_OUT 0 | |
| #define SCSI_IOCTL_DATA_IN 1 | |
| #define SCSI_IOCTL_DATA_UNSPECIFIED 2 | |
| #ifdef __cplusplus | |
| } | |
| #endif | |
| #endif /* _NTDDSCSIH_ */ | |