ntddstor.h 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. /*
  2. * DDK definitions for storage media access
  3. *
  4. * Copyright (C) 2002 Eric Pouech
  5. *
  6. * This library is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 2.1 of the License, or (at your option) any later version.
  10. *
  11. * This library is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public
  17. * License along with this library; if not, write to the Free Software
  18. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  19. */
  20. #ifndef _NTDDSTOR_H_
  21. #define _NTDDSTOR_H_
  22. #ifdef __cplusplus
  23. extern "C" {
  24. #endif
  25. #define IOCTL_STORAGE_BASE FILE_DEVICE_MASS_STORAGE
  26. #define IOCTL_STORAGE_CHECK_VERIFY CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
  27. #define IOCTL_STORAGE_MEDIA_REMOVAL CTL_CODE(IOCTL_STORAGE_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)
  28. #define IOCTL_STORAGE_EJECT_MEDIA CTL_CODE(IOCTL_STORAGE_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
  29. #define IOCTL_STORAGE_LOAD_MEDIA CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)
  30. #define IOCTL_STORAGE_RESERVE CTL_CODE(IOCTL_STORAGE_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)
  31. #define IOCTL_STORAGE_RELEASE CTL_CODE(IOCTL_STORAGE_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)
  32. #define IOCTL_STORAGE_FIND_NEW_DEVICES CTL_CODE(IOCTL_STORAGE_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
  33. #define IOCTL_STORAGE_GET_MEDIA_TYPES CTL_CODE(IOCTL_STORAGE_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS)
  34. #define IOCTL_STORAGE_GET_MEDIA_TYPES_EX CTL_CODE(IOCTL_STORAGE_BASE, 0x0301, METHOD_BUFFERED, FILE_ANY_ACCESS)
  35. #define IOCTL_STORAGE_RESET_BUS CTL_CODE(IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS)
  36. #define IOCTL_STORAGE_RESET_DEVICE CTL_CODE(IOCTL_STORAGE_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS)
  37. #define IOCTL_STORAGE_GET_DEVICE_NUMBER CTL_CODE(IOCTL_STORAGE_BASE, 0x0420, METHOD_BUFFERED, FILE_ANY_ACCESS)
  38. #define IOCTL_STORAGE_QUERY_PROPERTY CTL_CODE(IOCTL_STORAGE_BASE, 0x0500, METHOD_BUFFERED, FILE_ANY_ACCESS)
  39. DEFINE_GUID(DiskClassGuid,
  40. 0x53f56307, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
  41. DEFINE_GUID(CdRomClassGuid,
  42. 0x53f56308, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
  43. DEFINE_GUID(PartitionClassGuid,
  44. 0x53f5630a, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
  45. DEFINE_GUID(TapeClassGuid,
  46. 0x53f5630b, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
  47. DEFINE_GUID(WriteOnceDiskClassGuid,
  48. 0x53f5630c, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
  49. DEFINE_GUID(VolumeClassGuid,
  50. 0x53f5630d, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
  51. DEFINE_GUID(MediumChangerClassGuid,
  52. 0x53f56310, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
  53. DEFINE_GUID(FloppyClassGuid,
  54. 0x53f56311, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
  55. DEFINE_GUID(CdChangerClassGuid,
  56. 0x53f56312, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
  57. DEFINE_GUID(StroagePortClassGuid,
  58. 0x2accfe60, 0xc130, 0x11d2, 0xb0, 0x82, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
  59. typedef struct _STORAGE_DEVICE_NUMBER {
  60. DEVICE_TYPE DeviceType;
  61. ULONG DeviceNumber;
  62. ULONG PartitionNumber;
  63. } STORAGE_DEVICE_NUMBER, *PSTORAGE_DEVICE_NUMBER;
  64. typedef struct _STORAGE_BUS_RESET_REQUEST {
  65. UCHAR PathId;
  66. } STORAGE_BUS_RESET_REQUEST, *PSTORAGE_BUS_RESET_REQUEST;
  67. typedef struct _PREVENT_MEDIA_REMOVAL {
  68. BOOLEAN PreventMediaRemoval;
  69. } PREVENT_MEDIA_REMOVAL, *PPREVENT_MEDIA_REMOVAL;
  70. typedef struct _TAPE_STATISTICS {
  71. ULONG Version;
  72. ULONG Flags;
  73. LARGE_INTEGER RecoveredWrites;
  74. LARGE_INTEGER UnrecoveredWrites;
  75. LARGE_INTEGER RecoveredReads;
  76. LARGE_INTEGER UnrecoveredReads;
  77. UCHAR CompressionRatioReads;
  78. UCHAR CompressionRatioWrites;
  79. } TAPE_STATISTICS, *PTAPE_STATISTICS;
  80. #define RECOVERED_WRITES_VALID 0x00000001
  81. #define UNRECOVERED_WRITES_VALID 0x00000002
  82. #define RECOVERED_READS_VALID 0x00000004
  83. #define UNRECOVERED_READS_VALID 0x00000008
  84. #define WRITE_COMPRESSION_INFO_VALID 0x00000010
  85. #define READ_COMPRESSION_INFO_VALID 0x00000020
  86. typedef struct _TAPE_GET_STATISTICS {
  87. ULONG Operation;
  88. } TAPE_GET_STATISTICS, *PTAPE_GET_STATISTICS;
  89. #define TAPE_RETURN_STATISTICS 0L
  90. #define TAPE_RETURN_ENV_INFO 1L
  91. #define TAPE_RESET_STATISTICS 2L
  92. typedef enum _STORAGE_MEDIA_TYPE {
  93. /* see also defines in ntdddisk.h */
  94. DDS_4mm = 0x20,
  95. MiniQic,
  96. Travan,
  97. QIC,
  98. MP_8mm,
  99. AME_8mm,
  100. AIT1_8mm,
  101. DLT,
  102. NCTP,
  103. IBM_3480,
  104. IBM_3490E,
  105. IBM_Magstar_3590,
  106. IBM_Magstar_MP,
  107. STK_DATA_D3,
  108. SONY_DTF,
  109. DV_6mm,
  110. DMI,
  111. SONY_D2,
  112. CLEANER_CARTRIDGE,
  113. CD_ROM,
  114. CD_R,
  115. CD_RW,
  116. DVD_ROM,
  117. DVD_R,
  118. DVD_RW,
  119. MO_3_RW,
  120. MO_5_WO,
  121. MO_5_RW,
  122. MO_5_LIMDOW,
  123. PC_5_WO,
  124. PC_5_RW,
  125. PD_5_RW,
  126. ABL_5_WO,
  127. PINNACLE_APEX_5_RW,
  128. SONY_12_WO,
  129. PHILIPS_12_WO,
  130. HITACHI_12_WO,
  131. CYGNET_12_WO,
  132. KODAK_14_WO,
  133. MO_NFR_525,
  134. NIKON_12_RW,
  135. IOMEGA_ZIP,
  136. IOMEGA_JAZ,
  137. SYQUEST_EZ135,
  138. SYQUEST_EZFLYER,
  139. SYQUEST_SYJET,
  140. AVATAR_F2,
  141. MP2_8mm
  142. } STORAGE_MEDIA_TYPE, *PSTORAGE_MEDIA_TYPE;
  143. #define MEDIA_ERASEABLE 0x00000001
  144. #define MEDIA_WRITE_ONCE 0x00000002
  145. #define MEDIA_READ_ONLY 0x00000004
  146. #define MEDIA_READ_WRITE 0x00000008
  147. #define MEDIA_WRITE_PROTECTED 0x00000100
  148. #define MEDIA_CURRENTLY_MOUNTED 0x80000000
  149. typedef struct _DEVICE_MEDIA_INFO {
  150. union {
  151. struct {
  152. LARGE_INTEGER Cylinders;
  153. STORAGE_MEDIA_TYPE MediaType;
  154. ULONG TracksPerCylinder;
  155. ULONG SectorsPerTrack;
  156. ULONG BytesPerSector;
  157. ULONG NumberMediaSides;
  158. ULONG MediaCharacteristics;
  159. } DiskInfo;
  160. struct {
  161. LARGE_INTEGER Cylinders;
  162. STORAGE_MEDIA_TYPE MediaType;
  163. ULONG TracksPerCylinder;
  164. ULONG SectorsPerTrack;
  165. ULONG BytesPerSector;
  166. ULONG NumberMediaSides;
  167. ULONG MediaCharacteristics;
  168. } RemovableDiskInfo;
  169. struct {
  170. STORAGE_MEDIA_TYPE MediaType;
  171. ULONG MediaCharacteristics;
  172. ULONG CurrentBlockSize;
  173. } TapeInfo;
  174. } DeviceSpecific;
  175. } DEVICE_MEDIA_INFO, *PDEVICE_MEDIA_INFO;
  176. typedef struct _GET_MEDIA_TYPES {
  177. ULONG DeviceType;
  178. ULONG MediaInfoCount;
  179. DEVICE_MEDIA_INFO MediaInfo[1];
  180. } GET_MEDIA_TYPES, *PGET_MEDIA_TYPES;
  181. typedef enum _STORAGE_QUERY_TYPE {
  182. PropertyStandardQuery = 0,
  183. PropertyExistsQuery,
  184. PropertyMaskQuery,
  185. PropertyQueryMaxDefined
  186. } STORAGE_QUERY_TYPE, *PSTORAGE_QUERY_TYPE;
  187. typedef enum _STORAGE_PROPERTY_ID {
  188. StorageDeviceProperty = 0,
  189. StorageAdapterProperty
  190. } STORAGE_PROPERTY_ID, *PSTORAGE_PROPERTY_ID;
  191. typedef struct _STORAGE_PROPERTY_QUERY {
  192. STORAGE_PROPERTY_ID PropertyId;
  193. STORAGE_QUERY_TYPE QueryType;
  194. UCHAR AdditionalParameters[1];
  195. } STORAGE_PROPERTY_QUERY, *PSTORAGE_PROPERTY_QUERY;
  196. typedef struct _STORAGE_DESCRIPTOR_HEADER {
  197. ULONG Version;
  198. ULONG Size;
  199. } STORAGE_DESCRIPTOR_HEADER, *PSTORAGE_DESCRIPTOR_HEADER;
  200. typedef enum _STORAGE_BUS_TYPE {
  201. BusTypeUnknown = 0x00,
  202. BusTypeScsi,
  203. BusTypeAtapi,
  204. BusTypeAta,
  205. BusType1394,
  206. BusTypeSsa,
  207. BusTypeFibre,
  208. BusTypeUsb,
  209. BusTypeRAID,
  210. BusTypeMaxReserved = 0x7F
  211. } STORAGE_BUS_TYPE, *PSTORAGE_BUS_TYPE;
  212. typedef struct _STORAGE_DEVICE_DESCRIPTOR {
  213. ULONG Version;
  214. ULONG Size;
  215. UCHAR DeviceType;
  216. UCHAR DeviceTypeModifier;
  217. BOOLEAN RemovableMedia;
  218. BOOLEAN CommandQueueing;
  219. ULONG VendorIdOffset;
  220. ULONG ProductIdOffset;
  221. ULONG ProductRevisionOffset;
  222. ULONG SerialNumberOffset;
  223. STORAGE_BUS_TYPE BusType;
  224. ULONG RawPropertiesLength;
  225. UCHAR RawDeviceProperties[1];
  226. } STORAGE_DEVICE_DESCRIPTOR, *PSTORAGE_DEVICE_DESCRIPTOR;
  227. typedef struct _STORAGE_ADAPTER_DESCRIPTOR {
  228. ULONG Version;
  229. ULONG Size;
  230. ULONG MaximumTransferLength;
  231. ULONG MaximumPhysicalPages;
  232. ULONG AlignmentMask;
  233. BOOLEAN AdapterUsesPio;
  234. BOOLEAN AdapterScansDown;
  235. BOOLEAN CommandQueueing;
  236. BOOLEAN AcceleratedTransfer;
  237. BOOLEAN BusType;
  238. USHORT BusMajorVersion;
  239. USHORT BusMinorVersion;
  240. } STORAGE_ADAPTER_DESCRIPTOR, *PSTORAGE_ADAPTER_DESCRIPTOR;
  241. #ifdef __cplusplus
  242. }
  243. #endif
  244. #endif /* _NTDDSTOR_H_ */