ntddscsi.h 7.0 KB

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