ntddstor.h 35 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138
  1. /*
  2. * ntddstor.h
  3. *
  4. * Storage class IOCTL interface.
  5. *
  6. * This file is part of the w32api package.
  7. *
  8. * Contributors:
  9. * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
  10. *
  11. * THIS SOFTWARE IS NOT COPYRIGHTED
  12. *
  13. * This source code is offered for use in the public domain. You may
  14. * use, modify or distribute it freely.
  15. *
  16. * This code is distributed in the hope that it will be useful but
  17. * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
  18. * DISCLAIMED. This includes but is not limited to warranties of
  19. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  20. *
  21. */
  22. #ifndef _NTDDSTOR_H_
  23. #define _NTDDSTOR_H_
  24. #ifdef __cplusplus
  25. extern "C" {
  26. #endif
  27. #if defined(DEFINE_GUID)
  28. DEFINE_GUID(GUID_DEVINTERFACE_DISK,
  29. 0x53f56307, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
  30. DEFINE_GUID(GUID_DEVINTERFACE_CDROM,
  31. 0x53f56308, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
  32. DEFINE_GUID(GUID_DEVINTERFACE_PARTITION,
  33. 0x53f5630a, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
  34. DEFINE_GUID(GUID_DEVINTERFACE_TAPE,
  35. 0x53f5630b, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
  36. DEFINE_GUID(GUID_DEVINTERFACE_WRITEONCEDISK,
  37. 0x53f5630c, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
  38. DEFINE_GUID(GUID_DEVINTERFACE_VOLUME,
  39. 0x53f5630d, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
  40. DEFINE_GUID(GUID_DEVINTERFACE_MEDIUMCHANGER,
  41. 0x53f56310, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
  42. DEFINE_GUID(GUID_DEVINTERFACE_FLOPPY,
  43. 0x53f56311, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
  44. DEFINE_GUID(GUID_DEVINTERFACE_CDCHANGER,
  45. 0x53f56312, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
  46. DEFINE_GUID(GUID_DEVINTERFACE_STORAGEPORT,
  47. 0x2accfe60, 0xc130, 0x11d2, 0xb0, 0x82, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
  48. DEFINE_GUID(GUID_DEVINTERFACE_VMLUN,
  49. 0x6f416619, 0x9f29, 0x42a5, 0xb2, 0x0b, 0x37, 0xe2, 0x19, 0xca, 0x02, 0xb0);
  50. DEFINE_GUID(GUID_DEVINTERFACE_SES,
  51. 0x1790c9ec, 0x47d5, 0x4df3, 0xb5, 0xaf, 0x9a, 0xdf, 0x3c, 0xf2, 0x3e, 0x48);
  52. DEFINE_GUID(GUID_DEVINTERFACE_HIDDEN_VOLUME,
  53. 0x7f108a28, 0x9833, 0x4b3b, 0xb7, 0x80, 0x2c, 0x6b, 0x5f, 0xa5, 0xc0, 0x62);
  54. DEFINE_GUID(GUID_DEVICEDUMP_STORAGE_DEVICE,
  55. 0xd8e2592f, 0x1aab, 0x4d56, 0xa7, 0x46, 0x1f, 0x75, 0x85, 0xdf, 0x40, 0xf4);
  56. DEFINE_GUID(GUID_DEVICEDUMP_DRIVER_STORAGE_PORT,
  57. 0xda82441d, 0x7142, 0x4bc1, 0xb8, 0x44, 0x08, 0x07, 0xc5, 0xa4, 0xb6, 0x7f);
  58. #define WDI_STORAGE_PREDICT_FAILURE_DPS_GUID \
  59. {0xe9f2d03a, 0x747c, 0x41c2, {0xbb, 0x9a, 0x02, 0xc6, 0x2b, 0x6d, 0x5f, 0xcb}};
  60. /* Aliases for storage guids */
  61. #define DiskClassGuid GUID_DEVINTERFACE_DISK
  62. #define CdRomClassGuid GUID_DEVINTERFACE_CDROM
  63. #define PartitionClassGuid GUID_DEVINTERFACE_PARTITION
  64. #define TapeClassGuid GUID_DEVINTERFACE_TAPE
  65. #define WriteOnceDiskClassGuid GUID_DEVINTERFACE_WRITEONCEDISK
  66. #define VolumeClassGuid GUID_DEVINTERFACE_VOLUME
  67. #define MediumChangerClassGuid GUID_DEVINTERFACE_MEDIUMCHANGER
  68. #define FloppyClassGuid GUID_DEVINTERFACE_FLOPPY
  69. #define CdChangerClassGuid GUID_DEVINTERFACE_CDCHANGER
  70. #define StoragePortClassGuid GUID_DEVINTERFACE_STORAGEPORT
  71. #define HiddenVolumeClassGuid GUID_DEVINTERFACE_HIDDEN_VOLUME
  72. #endif /* defined(DEFINE_GUID) */
  73. #ifdef DEFINE_DEVPROPKEY
  74. DEFINE_DEVPROPKEY(DEVPKEY_Storage_Portable,
  75. 0x4d1ebee8, 0x803, 0x4774, 0x98, 0x42, 0xb7, 0x7d, 0xb5, 0x2, 0x65, 0xe9, 2);
  76. DEFINE_DEVPROPKEY(DEVPKEY_Storage_Removable_Media,
  77. 0x4d1ebee8, 0x803, 0x4774, 0x98, 0x42, 0xb7, 0x7d, 0xb5, 0x2, 0x65, 0xe9, 3);
  78. DEFINE_DEVPROPKEY(DEVPKEY_Storage_System_Critical,
  79. 0x4d1ebee8, 0x803, 0x4774, 0x98, 0x42, 0xb7, 0x7d, 0xb5, 0x2, 0x65, 0xe9, 4);
  80. #endif /* #ifdef DEFINE_DEVPROPKEY */
  81. #ifndef _WINIOCTL_
  82. #define IOCTL_STORAGE_BASE FILE_DEVICE_MASS_STORAGE
  83. #define IOCTL_STORAGE_CHECK_VERIFY \
  84. CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
  85. #define IOCTL_STORAGE_CHECK_VERIFY2 \
  86. CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_ANY_ACCESS)
  87. #define IOCTL_STORAGE_MEDIA_REMOVAL \
  88. CTL_CODE(IOCTL_STORAGE_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)
  89. #define IOCTL_STORAGE_EJECT_MEDIA \
  90. CTL_CODE(IOCTL_STORAGE_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
  91. #define IOCTL_STORAGE_LOAD_MEDIA \
  92. CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)
  93. #define IOCTL_STORAGE_LOAD_MEDIA2 \
  94. CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_ANY_ACCESS)
  95. #define IOCTL_STORAGE_RESERVE \
  96. CTL_CODE(IOCTL_STORAGE_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)
  97. #define IOCTL_STORAGE_RELEASE \
  98. CTL_CODE(IOCTL_STORAGE_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)
  99. #define IOCTL_STORAGE_FIND_NEW_DEVICES \
  100. CTL_CODE(IOCTL_STORAGE_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
  101. #define IOCTL_STORAGE_EJECTION_CONTROL \
  102. CTL_CODE(IOCTL_STORAGE_BASE, 0x0250, METHOD_BUFFERED, FILE_ANY_ACCESS)
  103. #define IOCTL_STORAGE_MCN_CONTROL \
  104. CTL_CODE(IOCTL_STORAGE_BASE, 0x0251, METHOD_BUFFERED, FILE_ANY_ACCESS)
  105. #define IOCTL_STORAGE_GET_MEDIA_TYPES \
  106. CTL_CODE(IOCTL_STORAGE_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS)
  107. #define IOCTL_STORAGE_GET_MEDIA_TYPES_EX \
  108. CTL_CODE(IOCTL_STORAGE_BASE, 0x0301, METHOD_BUFFERED, FILE_ANY_ACCESS)
  109. #define IOCTL_STORAGE_RESET_BUS \
  110. CTL_CODE(IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS)
  111. #define IOCTL_STORAGE_RESET_DEVICE \
  112. CTL_CODE(IOCTL_STORAGE_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS)
  113. #define IOCTL_STORAGE_GET_DEVICE_NUMBER \
  114. CTL_CODE(IOCTL_STORAGE_BASE, 0x0420, METHOD_BUFFERED, FILE_ANY_ACCESS)
  115. #define IOCTL_STORAGE_PREDICT_FAILURE \
  116. CTL_CODE(IOCTL_STORAGE_BASE, 0x0440, METHOD_BUFFERED, FILE_ANY_ACCESS)
  117. #endif /* _WINIOCTL_ */
  118. #define IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER \
  119. CTL_CODE(IOCTL_STORAGE_BASE, 0x0304, METHOD_BUFFERED, FILE_ANY_ACCESS)
  120. #define IOCTL_STORAGE_GET_HOTPLUG_INFO \
  121. CTL_CODE(IOCTL_STORAGE_BASE, 0x0305, METHOD_BUFFERED, FILE_ANY_ACCESS)
  122. #define IOCTL_STORAGE_SET_HOTPLUG_INFO \
  123. CTL_CODE(IOCTL_STORAGE_BASE, 0x0306, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  124. #define OBSOLETE_IOCTL_STORAGE_RESET_BUS \
  125. CTL_CODE(IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  126. #define OBSOLETE_IOCTL_STORAGE_RESET_DEVICE \
  127. CTL_CODE(IOCTL_STORAGE_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  128. #define IOCTL_STORAGE_BREAK_RESERVATION \
  129. CTL_CODE(IOCTL_STORAGE_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS)
  130. #define IOCTL_STORAGE_PERSISTENT_RESERVE_IN \
  131. CTL_CODE(IOCTL_STORAGE_BASE, 0x0406, METHOD_BUFFERED, FILE_READ_ACCESS)
  132. #define IOCTL_STORAGE_PERSISTENT_RESERVE_OUT \
  133. CTL_CODE(IOCTL_STORAGE_BASE, 0x0407, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  134. #define IOCTL_STORAGE_READ_CAPACITY \
  135. CTL_CODE(IOCTL_STORAGE_BASE, 0x0450, METHOD_BUFFERED, FILE_READ_ACCESS)
  136. #define IOCTL_STORAGE_GET_DEVICE_TELEMETRY \
  137. CTL_CODE(IOCTL_STORAGE_BASE, 0x0470, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  138. #define IOCTL_STORAGE_DEVICE_TELEMETRY_NOTIFY \
  139. CTL_CODE(IOCTL_STORAGE_BASE, 0x0471, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  140. #define IOCTL_STORAGE_DEVICE_TELEMETRY_QUERY_CAPS \
  141. CTL_CODE(IOCTL_STORAGE_BASE, 0x0472, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  142. #define IOCTL_STORAGE_GET_DEVICE_TELEMETRY_RAW \
  143. CTL_CODE(IOCTL_STORAGE_BASE, 0x0473, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  144. #define IOCTL_STORAGE_QUERY_PROPERTY \
  145. CTL_CODE(IOCTL_STORAGE_BASE, 0x0500, METHOD_BUFFERED, FILE_ANY_ACCESS)
  146. #define IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES \
  147. CTL_CODE(IOCTL_STORAGE_BASE, 0x0501, METHOD_BUFFERED, FILE_WRITE_ACCESS)
  148. #define IOCTL_STORAGE_GET_LB_PROVISIONING_MAP_RESOURCES \
  149. CTL_CODE(IOCTL_STORAGE_BASE, 0x0502, METHOD_BUFFERED, FILE_READ_ACCESS)
  150. #define IOCTL_STORAGE_GET_BC_PROPERTIES \
  151. CTL_CODE(IOCTL_STORAGE_BASE, 0x0600, METHOD_BUFFERED, FILE_READ_ACCESS)
  152. #define IOCTL_STORAGE_ALLOCATE_BC_STREAM \
  153. CTL_CODE(IOCTL_STORAGE_BASE, 0x0601, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  154. #define IOCTL_STORAGE_FREE_BC_STREAM \
  155. CTL_CODE(IOCTL_STORAGE_BASE, 0x0602, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  156. #define IOCTL_STORAGE_CHECK_PRIORITY_HINT_SUPPORT \
  157. CTL_CODE(IOCTL_STORAGE_BASE, 0x0620, METHOD_BUFFERED, FILE_ANY_ACCESS)
  158. #define IOCTL_STORAGE_START_DATA_INTEGRITY_CHECK \
  159. CTL_CODE(IOCTL_STORAGE_BASE, 0x0621, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  160. #define IOCTL_STORAGE_STOP_DATA_INTEGRITY_CHECK \
  161. CTL_CODE(IOCTL_STORAGE_BASE, 0x0622, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  162. #define IOCTL_STORAGE_ENABLE_IDLE_POWER \
  163. CTL_CODE(IOCTL_STORAGE_BASE, 0x0720, METHOD_BUFFERED, FILE_ANY_ACCESS)
  164. #define IOCTL_STORAGE_GET_IDLE_POWERUP_REASON \
  165. CTL_CODE(IOCTL_STORAGE_BASE, 0x0721, METHOD_BUFFERED, FILE_ANY_ACCESS)
  166. #define IOCTL_STORAGE_POWER_ACTIVE \
  167. CTL_CODE(IOCTL_STORAGE_BASE, 0x0722, METHOD_BUFFERED, FILE_ANY_ACCESS)
  168. #define IOCTL_STORAGE_POWER_IDLE \
  169. CTL_CODE(IOCTL_STORAGE_BASE, 0x0723, METHOD_BUFFERED, FILE_ANY_ACCESS)
  170. #define IOCTL_STORAGE_EVENT_NOTIFICATION \
  171. CTL_CODE(IOCTL_STORAGE_BASE, 0x0724, METHOD_BUFFERED, FILE_ANY_ACCESS)
  172. #define RECOVERED_WRITES_VALID 0x00000001
  173. #define UNRECOVERED_WRITES_VALID 0x00000002
  174. #define RECOVERED_READS_VALID 0x00000004
  175. #define UNRECOVERED_READS_VALID 0x00000008
  176. #define WRITE_COMPRESSION_INFO_VALID 0x00000010
  177. #define READ_COMPRESSION_INFO_VALID 0x00000020
  178. #define TAPE_RETURN_STATISTICS __MSABI_LONG(0)
  179. #define TAPE_RETURN_ENV_INFO __MSABI_LONG(1)
  180. #define TAPE_RESET_STATISTICS __MSABI_LONG(2)
  181. /* DEVICE_MEDIA_INFO.DeviceSpecific.DiskInfo.MediaCharacteristics constants */
  182. #define MEDIA_ERASEABLE 0x00000001
  183. #define MEDIA_WRITE_ONCE 0x00000002
  184. #define MEDIA_READ_ONLY 0x00000004
  185. #define MEDIA_READ_WRITE 0x00000008
  186. #define MEDIA_WRITE_PROTECTED 0x00000100
  187. #define MEDIA_CURRENTLY_MOUNTED 0x80000000
  188. #define StorageIdTypeNAA StorageIdTypeFCPHName
  189. #define DeviceDsmActionFlag_NonDestructive 0x80000000
  190. #define IsDsmActionNonDestructive(_Action) ((BOOLEAN)((_Action & DeviceDsmActionFlag_NonDestructive) != 0))
  191. #define DeviceDsmAction_None 0
  192. #define DeviceDsmAction_Trim 1
  193. #define DeviceDsmAction_Notification (2 | DeviceDsmActionFlag_NonDestructive)
  194. #define DeviceDsmAction_OffloadRead (3 | DeviceDsmActionFlag_NonDestructive)
  195. #define DeviceDsmAction_OffloadWrite 4
  196. #define DeviceDsmAction_Allocation (5 | DeviceDsmActionFlag_NonDestructive)
  197. #define DeviceDsmAction_Repair (6 | DeviceDsmActionFlag_NonDestructive)
  198. #define DeviceDsmAction_Scrub (7 | DeviceDsmActionFlag_NonDestructive)
  199. #define DeviceDsmAction_DrtQuery (8 | DeviceDsmActionFlag_NonDestructive)
  200. #define DeviceDsmAction_DrtClear (9 | DeviceDsmActionFlag_NonDestructive)
  201. #define DeviceDsmAction_DrtDisable (10 | DeviceDsmActionFlag_NonDestructive)
  202. #define DEVICE_DSM_FLAG_ENTIRE_DATA_SET_RANGE 0x00000001
  203. #define DEVICE_DSM_FLAG_SCRUB_SKIP_IN_SYNC 0x10000000
  204. #define DEVICE_DSM_FLAG_ALLOCATION_CONSOLIDATEABLE_ONLY 0x40000000
  205. #define DEVICE_DSM_FLAG_TRIM_NOT_FS_ALLOCATED 0x80000000
  206. #define DEVICE_DSM_NOTIFY_FLAG_BEGIN 0x00000001
  207. #define DEVICE_DSM_NOTIFY_FLAG_END 0x00000002
  208. #define IOCTL_STORAGE_BC_VERSION 1
  209. #define STORAGE_PRIORITY_HINT_SUPPORTED 0x0001
  210. typedef struct _STORAGE_HOTPLUG_INFO {
  211. ULONG Size;
  212. BOOLEAN MediaRemovable;
  213. BOOLEAN MediaHotplug;
  214. BOOLEAN DeviceHotplug;
  215. BOOLEAN WriteCacheEnableOverride;
  216. } STORAGE_HOTPLUG_INFO, *PSTORAGE_HOTPLUG_INFO;
  217. typedef struct _STORAGE_DEVICE_NUMBER {
  218. DEVICE_TYPE DeviceType;
  219. ULONG DeviceNumber;
  220. ULONG PartitionNumber;
  221. } STORAGE_DEVICE_NUMBER, *PSTORAGE_DEVICE_NUMBER;
  222. typedef struct _STORAGE_BUS_RESET_REQUEST {
  223. UCHAR PathId;
  224. } STORAGE_BUS_RESET_REQUEST, *PSTORAGE_BUS_RESET_REQUEST;
  225. typedef struct _STORAGE_BREAK_RESERVATION_REQUEST {
  226. ULONG Length;
  227. UCHAR _unused;
  228. UCHAR PathId;
  229. UCHAR TargetId;
  230. UCHAR Lun;
  231. } STORAGE_BREAK_RESERVATION_REQUEST, *PSTORAGE_BREAK_RESERVATION_REQUEST;
  232. #ifndef _WINIOCTL_
  233. typedef struct _PREVENT_MEDIA_REMOVAL {
  234. BOOLEAN PreventMediaRemoval;
  235. } PREVENT_MEDIA_REMOVAL, *PPREVENT_MEDIA_REMOVAL;
  236. #endif
  237. typedef struct _CLASS_MEDIA_CHANGE_CONTEXT {
  238. ULONG MediaChangeCount;
  239. ULONG NewState;
  240. } CLASS_MEDIA_CHANGE_CONTEXT, *PCLASS_MEDIA_CHANGE_CONTEXT;
  241. typedef struct _TAPE_STATISTICS {
  242. ULONG Version;
  243. ULONG Flags;
  244. LARGE_INTEGER RecoveredWrites;
  245. LARGE_INTEGER UnrecoveredWrites;
  246. LARGE_INTEGER RecoveredReads;
  247. LARGE_INTEGER UnrecoveredReads;
  248. UCHAR CompressionRatioReads;
  249. UCHAR CompressionRatioWrites;
  250. } TAPE_STATISTICS, *PTAPE_STATISTICS;
  251. typedef struct _TAPE_GET_STATISTICS {
  252. ULONG Operation;
  253. } TAPE_GET_STATISTICS, *PTAPE_GET_STATISTICS;
  254. typedef enum _STORAGE_MEDIA_TYPE {
  255. DDS_4mm = 0x20,
  256. MiniQic,
  257. Travan,
  258. QIC,
  259. MP_8mm,
  260. AME_8mm,
  261. AIT1_8mm,
  262. DLT,
  263. NCTP,
  264. IBM_3480,
  265. IBM_3490E,
  266. IBM_Magstar_3590,
  267. IBM_Magstar_MP,
  268. STK_DATA_D3,
  269. SONY_DTF,
  270. DV_6mm,
  271. DMI,
  272. SONY_D2,
  273. CLEANER_CARTRIDGE,
  274. CD_ROM,
  275. CD_R,
  276. CD_RW,
  277. DVD_ROM,
  278. DVD_R,
  279. DVD_RW,
  280. MO_3_RW,
  281. MO_5_WO,
  282. MO_5_RW,
  283. MO_5_LIMDOW,
  284. PC_5_WO,
  285. PC_5_RW,
  286. PD_5_RW,
  287. ABL_5_WO,
  288. PINNACLE_APEX_5_RW,
  289. SONY_12_WO,
  290. PHILIPS_12_WO,
  291. HITACHI_12_WO,
  292. CYGNET_12_WO,
  293. KODAK_14_WO,
  294. MO_NFR_525,
  295. NIKON_12_RW,
  296. IOMEGA_ZIP,
  297. IOMEGA_JAZ,
  298. SYQUEST_EZ135,
  299. SYQUEST_EZFLYER,
  300. SYQUEST_SYJET,
  301. AVATAR_F2,
  302. MP2_8mm,
  303. DST_S,
  304. DST_M,
  305. DST_L,
  306. VXATape_1,
  307. VXATape_2,
  308. #if (NTDDI_VERSION < NTDDI_WINXP)
  309. STK_EAGLE,
  310. #else
  311. STK_9840,
  312. #endif
  313. LTO_Ultrium,
  314. LTO_Accelis,
  315. DVD_RAM,
  316. AIT_8mm,
  317. ADR_1,
  318. ADR_2,
  319. STK_9940,
  320. SAIT,
  321. VXATape
  322. } STORAGE_MEDIA_TYPE, *PSTORAGE_MEDIA_TYPE;
  323. typedef enum _STORAGE_BUS_TYPE {
  324. BusTypeUnknown = 0x00,
  325. BusTypeScsi,
  326. BusTypeAtapi,
  327. BusTypeAta,
  328. BusType1394,
  329. BusTypeSsa,
  330. BusTypeFibre,
  331. BusTypeUsb,
  332. BusTypeRAID,
  333. BusTypeiScsi,
  334. BusTypeSas,
  335. BusTypeSata,
  336. BusTypeSd,
  337. BusTypeMmc,
  338. BusTypeVirtual,
  339. BusTypeFileBackedVirtual,
  340. BusTypeSpaces,
  341. BusTypeMax,
  342. BusTypeMaxReserved = 0x7F
  343. } STORAGE_BUS_TYPE, *PSTORAGE_BUS_TYPE;
  344. #define SupportsDeviceSharing(type) (type == BusTypeScsi || type == BusTypeFibre ||type == BusTypeiScsi || \
  345. type == BusTypeSas || type == BusTypeSpaces)
  346. typedef struct _DEVICE_MEDIA_INFO {
  347. union {
  348. struct {
  349. LARGE_INTEGER Cylinders;
  350. STORAGE_MEDIA_TYPE MediaType;
  351. ULONG TracksPerCylinder;
  352. ULONG SectorsPerTrack;
  353. ULONG BytesPerSector;
  354. ULONG NumberMediaSides;
  355. ULONG MediaCharacteristics;
  356. } DiskInfo;
  357. struct {
  358. LARGE_INTEGER Cylinders;
  359. STORAGE_MEDIA_TYPE MediaType;
  360. ULONG TracksPerCylinder;
  361. ULONG SectorsPerTrack;
  362. ULONG BytesPerSector;
  363. ULONG NumberMediaSides;
  364. ULONG MediaCharacteristics;
  365. } RemovableDiskInfo;
  366. struct {
  367. STORAGE_MEDIA_TYPE MediaType;
  368. ULONG MediaCharacteristics;
  369. ULONG CurrentBlockSize;
  370. STORAGE_BUS_TYPE BusType;
  371. union {
  372. struct {
  373. UCHAR MediumType;
  374. UCHAR DensityCode;
  375. } ScsiInformation;
  376. } BusSpecificData;
  377. } TapeInfo;
  378. } DeviceSpecific;
  379. } DEVICE_MEDIA_INFO, *PDEVICE_MEDIA_INFO;
  380. typedef struct _GET_MEDIA_TYPES {
  381. ULONG DeviceType;
  382. ULONG MediaInfoCount;
  383. DEVICE_MEDIA_INFO MediaInfo[1];
  384. } GET_MEDIA_TYPES, *PGET_MEDIA_TYPES;
  385. typedef struct _STORAGE_PREDICT_FAILURE {
  386. ULONG PredictFailure;
  387. UCHAR VendorSpecific[512];
  388. } STORAGE_PREDICT_FAILURE, *PSTORAGE_PREDICT_FAILURE;
  389. typedef enum _STORAGE_QUERY_TYPE {
  390. PropertyStandardQuery = 0,
  391. PropertyExistsQuery,
  392. PropertyMaskQuery,
  393. PropertyQueryMaxDefined
  394. } STORAGE_QUERY_TYPE, *PSTORAGE_QUERY_TYPE;
  395. typedef enum _STORAGE_PROPERTY_ID {
  396. StorageDeviceProperty = 0,
  397. StorageAdapterProperty,
  398. StorageDeviceIdProperty,
  399. StorageDeviceUniqueIdProperty,
  400. StorageDeviceWriteCacheProperty,
  401. StorageMiniportProperty,
  402. StorageAccessAlignmentProperty,
  403. StorageDeviceSeekPenaltyProperty,
  404. StorageDeviceTrimProperty,
  405. StorageDeviceWriteAggregationProperty,
  406. StorageDeviceDeviceTelemetryProperty,
  407. StorageDeviceLBProvisioningProperty,
  408. StorageDevicePowerProperty,
  409. StorageDeviceCopyOffloadProperty,
  410. StorageDeviceResiliencyProperty
  411. } STORAGE_PROPERTY_ID, *PSTORAGE_PROPERTY_ID;
  412. typedef struct _STORAGE_PROPERTY_QUERY {
  413. STORAGE_PROPERTY_ID PropertyId;
  414. STORAGE_QUERY_TYPE QueryType;
  415. UCHAR AdditionalParameters[1];
  416. } STORAGE_PROPERTY_QUERY, *PSTORAGE_PROPERTY_QUERY;
  417. typedef struct _STORAGE_DESCRIPTOR_HEADER {
  418. ULONG Version;
  419. ULONG Size;
  420. } STORAGE_DESCRIPTOR_HEADER, *PSTORAGE_DESCRIPTOR_HEADER;
  421. typedef struct _STORAGE_DEVICE_DESCRIPTOR {
  422. ULONG Version;
  423. ULONG Size;
  424. UCHAR DeviceType;
  425. UCHAR DeviceTypeModifier;
  426. BOOLEAN RemovableMedia;
  427. BOOLEAN CommandQueueing;
  428. ULONG VendorIdOffset;
  429. ULONG ProductIdOffset;
  430. ULONG ProductRevisionOffset;
  431. ULONG SerialNumberOffset;
  432. STORAGE_BUS_TYPE BusType;
  433. ULONG RawPropertiesLength;
  434. UCHAR RawDeviceProperties[1];
  435. } STORAGE_DEVICE_DESCRIPTOR, *PSTORAGE_DEVICE_DESCRIPTOR;
  436. typedef struct _STORAGE_ADAPTER_DESCRIPTOR {
  437. ULONG Version;
  438. ULONG Size;
  439. ULONG MaximumTransferLength;
  440. ULONG MaximumPhysicalPages;
  441. ULONG AlignmentMask;
  442. BOOLEAN AdapterUsesPio;
  443. BOOLEAN AdapterScansDown;
  444. BOOLEAN CommandQueueing;
  445. BOOLEAN AcceleratedTransfer;
  446. #if (NTDDI_VERSION < NTDDI_WINXP)
  447. BOOLEAN BusType;
  448. #else
  449. UCHAR BusType;
  450. #endif
  451. USHORT BusMajorVersion;
  452. USHORT BusMinorVersion;
  453. #if (NTDDI_VERSION >= NTDDI_WIN8)
  454. UCHAR SrbType;
  455. UCHAR AddressType;
  456. #endif
  457. } STORAGE_ADAPTER_DESCRIPTOR, *PSTORAGE_ADAPTER_DESCRIPTOR;
  458. typedef struct _STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR {
  459. ULONG Version;
  460. ULONG Size;
  461. ULONG BytesPerCacheLine;
  462. ULONG BytesOffsetForCacheAlignment;
  463. ULONG BytesPerLogicalSector;
  464. ULONG BytesPerPhysicalSector;
  465. ULONG BytesOffsetForSectorAlignment;
  466. } STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR, *PSTORAGE_ACCESS_ALIGNMENT_DESCRIPTOR;
  467. typedef enum _STORAGE_PORT_CODE_SET {
  468. StoragePortCodeSetReserved = 0,
  469. StoragePortCodeSetStorport = 1,
  470. StoragePortCodeSetSCSIport = 2,
  471. StoragePortCodeSetSpaceport = 3,
  472. StoragePortCodeSetATAport = 4,
  473. StoragePortCodeSetUSBport = 5,
  474. StoragePortCodeSetSBP2port = 6,
  475. StoragePortCodeSetSDport = 7
  476. } STORAGE_PORT_CODE_SET, *PSTORAGE_PORT_CODE_SET;
  477. typedef struct _STORAGE_MINIPORT_DESCRIPTOR {
  478. ULONG Version;
  479. ULONG Size;
  480. STORAGE_PORT_CODE_SET Portdriver;
  481. BOOLEAN LUNResetSupported;
  482. BOOLEAN TargetResetSupported;
  483. #if (NTDDI_VERSION >= NTDDI_WIN8)
  484. USHORT IoTimeoutValue;
  485. #endif
  486. } STORAGE_MINIPORT_DESCRIPTOR, *PSTORAGE_MINIPORT_DESCRIPTOR;
  487. typedef enum _STORAGE_IDENTIFIER_CODE_SET {
  488. StorageIdCodeSetReserved = 0,
  489. StorageIdCodeSetBinary = 1,
  490. StorageIdCodeSetAscii = 2,
  491. StorageIdCodeSetUtf8 = 3
  492. } STORAGE_IDENTIFIER_CODE_SET, *PSTORAGE_IDENTIFIER_CODE_SET;
  493. typedef enum _STORAGE_IDENTIFIER_TYPE {
  494. StorageIdTypeVendorSpecific = 0,
  495. StorageIdTypeVendorId = 1,
  496. StorageIdTypeEUI64 = 2,
  497. StorageIdTypeFCPHName = 3,
  498. StorageIdTypePortRelative = 4,
  499. StorageIdTypeTargetPortGroup = 5,
  500. StorageIdTypeLogicalUnitGroup = 6,
  501. StorageIdTypeMD5LogicalUnitIdentifier = 7,
  502. StorageIdTypeScsiNameString = 8
  503. } STORAGE_IDENTIFIER_TYPE, *PSTORAGE_IDENTIFIER_TYPE;
  504. typedef enum _STORAGE_ID_NAA_FORMAT {
  505. StorageIdNAAFormatIEEEExtended = 2,
  506. StorageIdNAAFormatIEEERegistered = 3,
  507. StorageIdNAAFormatIEEEERegisteredExtended = 5
  508. } STORAGE_ID_NAA_FORMAT, *PSTORAGE_ID_NAA_FORMAT;
  509. typedef enum _STORAGE_ASSOCIATION_TYPE {
  510. StorageIdAssocDevice = 0,
  511. StorageIdAssocPort = 1,
  512. StorageIdAssocTarget = 2
  513. } STORAGE_ASSOCIATION_TYPE, *PSTORAGE_ASSOCIATION_TYPE;
  514. typedef struct _STORAGE_IDENTIFIER {
  515. STORAGE_IDENTIFIER_CODE_SET CodeSet;
  516. STORAGE_IDENTIFIER_TYPE Type;
  517. USHORT IdentifierSize;
  518. USHORT NextOffset;
  519. STORAGE_ASSOCIATION_TYPE Association;
  520. UCHAR Identifier[1];
  521. } STORAGE_IDENTIFIER, *PSTORAGE_IDENTIFIER;
  522. typedef struct _STORAGE_DEVICE_ID_DESCRIPTOR {
  523. ULONG Version;
  524. ULONG Size;
  525. ULONG NumberOfIdentifiers;
  526. UCHAR Identifiers[1];
  527. } STORAGE_DEVICE_ID_DESCRIPTOR, *PSTORAGE_DEVICE_ID_DESCRIPTOR;
  528. typedef struct _DEVICE_SEEK_PENALTY_DESCRIPTOR {
  529. ULONG Version;
  530. ULONG Size;
  531. BOOLEAN IncursSeekPenalty;
  532. } DEVICE_SEEK_PENALTY_DESCRIPTOR, *PDEVICE_SEEK_PENALTY_DESCRIPTOR;
  533. typedef struct _DEVICE_WRITE_AGGREGATION_DESCRIPTOR {
  534. ULONG Version;
  535. ULONG Size;
  536. BOOLEAN BenefitsFromWriteAggregation;
  537. } DEVICE_WRITE_AGGREGATION_DESCRIPTOR, *PDEVICE_WRITE_AGGREGATION_DESCRIPTOR;
  538. typedef struct _DEVICE_TRIM_DESCRIPTOR {
  539. ULONG Version;
  540. ULONG Size;
  541. BOOLEAN TrimEnabled;
  542. } DEVICE_TRIM_DESCRIPTOR, *PDEVICE_TRIM_DESCRIPTOR;
  543. typedef ULONG DEVICE_DATA_MANAGEMENT_SET_ACTION;
  544. typedef struct _DEVICE_DATA_SET_RANGE {
  545. LONGLONG StartingOffset;
  546. ULONGLONG LengthInBytes;
  547. } DEVICE_DATA_SET_RANGE, *PDEVICE_DATA_SET_RANGE;
  548. typedef struct _DEVICE_MANAGE_DATA_SET_ATTRIBUTES {
  549. ULONG Size;
  550. DEVICE_DATA_MANAGEMENT_SET_ACTION Action;
  551. ULONG Flags;
  552. ULONG ParameterBlockOffset;
  553. ULONG ParameterBlockLength;
  554. ULONG DataSetRangesOffset;
  555. ULONG DataSetRangesLength;
  556. } DEVICE_MANAGE_DATA_SET_ATTRIBUTES, *PDEVICE_MANAGE_DATA_SET_ATTRIBUTES;
  557. typedef struct _DEVICE_DSM_NOTIFICATION_PARAMETERS {
  558. ULONG Size;
  559. ULONG Flags;
  560. ULONG NumFileTypeIDs;
  561. GUID FileTypeID[1];
  562. } DEVICE_DSM_NOTIFICATION_PARAMETERS, *PDEVICE_DSM_NOTIFICATION_PARAMETERS;
  563. typedef struct _STORAGE_GET_BC_PROPERTIES_OUTPUT {
  564. ULONG MaximumRequestsPerPeriod;
  565. ULONG MinimumPeriod;
  566. ULONGLONG MaximumRequestSize;
  567. ULONG EstimatedTimePerRequest;
  568. ULONG NumOutStandingRequests;
  569. ULONGLONG RequestSize;
  570. } STORAGE_GET_BC_PROPERTIES_OUTPUT, *PSTORAGE_GET_BC_PROPERTIES_OUTPUT;
  571. typedef struct _STORAGE_ALLOCATE_BC_STREAM_INPUT {
  572. ULONG Version;
  573. ULONG RequestsPerPeriod;
  574. ULONG Period;
  575. BOOLEAN RetryFailures;
  576. BOOLEAN Discardable;
  577. BOOLEAN Reserved1[2];
  578. ULONG AccessType;
  579. ULONG AccessMode;
  580. } STORAGE_ALLOCATE_BC_STREAM_INPUT, *PSTORAGE_ALLOCATE_BC_STREAM_INPUT;
  581. typedef struct _STORAGE_ALLOCATE_BC_STREAM_OUTPUT {
  582. ULONGLONG RequestSize;
  583. ULONG NumOutStandingRequests;
  584. } STORAGE_ALLOCATE_BC_STREAM_OUTPUT, *PSTORAGE_ALLOCATE_BC_STREAM_OUTPUT;
  585. typedef struct _STORAGE_PRIORITY_HINT_SUPPORT {
  586. ULONG SupportFlags;
  587. } STORAGE_PRIORITY_HINT_SUPPORT, *PSTORAGE_PRIORITY_HINT_SUPPORT;
  588. #if defined(_MSC_EXTENSIONS) || defined(__GNUC__)
  589. typedef struct _STORAGE_MEDIA_SERIAL_NUMBER_DATA {
  590. USHORT Reserved;
  591. USHORT SerialNumberLength;
  592. UCHAR SerialNumber[0];
  593. } STORAGE_MEDIA_SERIAL_NUMBER_DATA, *PSTORAGE_MEDIA_SERIAL_NUMBER_DATA;
  594. typedef struct _PERSISTENT_RESERVE_COMMAND {
  595. ULONG Version;
  596. ULONG Size;
  597. __C89_NAMELESS union {
  598. struct {
  599. UCHAR ServiceAction:5;
  600. UCHAR Reserved1:3;
  601. USHORT AllocationLength;
  602. } PR_IN;
  603. struct {
  604. UCHAR ServiceAction:5;
  605. UCHAR Reserved1:3;
  606. UCHAR Type:4;
  607. UCHAR Scope:4;
  608. UCHAR ParameterList[0];
  609. } PR_OUT;
  610. } DUMMYUNIONNAME;
  611. } PERSISTENT_RESERVE_COMMAND, *PPERSISTENT_RESERVE_COMMAND;
  612. #endif /* defined(_MSC_EXTENSIONS) */
  613. typedef struct _STORAGE_READ_CAPACITY {
  614. ULONG Version;
  615. ULONG Size;
  616. ULONG BlockLength;
  617. LARGE_INTEGER NumberOfBlocks;
  618. LARGE_INTEGER DiskLength;
  619. } STORAGE_READ_CAPACITY, *PSTORAGE_READ_CAPACITY;
  620. typedef enum _WRITE_CACHE_TYPE {
  621. WriteCacheTypeUnknown,
  622. WriteCacheTypeNone,
  623. WriteCacheTypeWriteBack,
  624. WriteCacheTypeWriteThrough
  625. } WRITE_CACHE_TYPE;
  626. typedef enum _WRITE_CACHE_ENABLE {
  627. WriteCacheEnableUnknown,
  628. WriteCacheDisabled,
  629. WriteCacheEnabled
  630. } WRITE_CACHE_ENABLE;
  631. typedef enum _WRITE_CACHE_CHANGE {
  632. WriteCacheChangeUnknown,
  633. WriteCacheNotChangeable,
  634. WriteCacheChangeable
  635. } WRITE_CACHE_CHANGE;
  636. typedef enum _WRITE_THROUGH {
  637. WriteThroughUnknown,
  638. WriteThroughNotSupported,
  639. WriteThroughSupported
  640. } WRITE_THROUGH;
  641. typedef struct _STORAGE_WRITE_CACHE_PROPERTY {
  642. ULONG Version;
  643. ULONG Size;
  644. WRITE_CACHE_TYPE WriteCacheType;
  645. WRITE_CACHE_ENABLE WriteCacheEnabled;
  646. WRITE_CACHE_CHANGE WriteCacheChangeable;
  647. WRITE_THROUGH WriteThroughSupported;
  648. BOOLEAN FlushCacheSupported;
  649. BOOLEAN UserDefinedPowerProtection;
  650. BOOLEAN NVCacheEnabled;
  651. } STORAGE_WRITE_CACHE_PROPERTY, *PSTORAGE_WRITE_CACHE_PROPERTY;
  652. #define STORAGE_OFFLOAD_MAX_TOKEN_LENGTH 0x200
  653. #define STORAGE_OFFLOAD_TOKEN_ID_LENGTH 0x1f8
  654. #define STORAGE_OFFLOAD_TOKEN_TYPE_ZERO_DATA 0xffff0001
  655. #if defined(_MSC_EXTENSIONS) || defined(__GNUC__)
  656. typedef struct _STORAGE_OFFLOAD_TOKEN {
  657. UCHAR TokenType[4];
  658. UCHAR Reserved[2];
  659. UCHAR TokenIdLength[2];
  660. __C89_NAMELESS union {
  661. struct {
  662. UCHAR Reserved2[STORAGE_OFFLOAD_TOKEN_ID_LENGTH];
  663. } StorageOffloadZeroDataToken;
  664. UCHAR Token[STORAGE_OFFLOAD_TOKEN_ID_LENGTH];
  665. };
  666. } STORAGE_OFFLOAD_TOKEN, *PSTORAGE_OFFLOAD_TOKEN;
  667. #endif /* defined(_MSC_EXTENSIONS) */
  668. #define MAKE_ZERO_TOKEN(T) (((PSTORAGE_OFFLOAD_TOKEN)T)->TokenType[0] = 0xff, \
  669. ((PSTORAGE_OFFLOAD_TOKEN)T)->TokenType[1] = 0xff, \
  670. ((PSTORAGE_OFFLOAD_TOKEN)T)->TokenType[2] = 0x00, \
  671. ((PSTORAGE_OFFLOAD_TOKEN)T)->TokenType[3] = 0x01, \
  672. ((PSTORAGE_OFFLOAD_TOKEN)T)->TokenIdLength[0] = 0x01, \
  673. ((PSTORAGE_OFFLOAD_TOKEN)T)->TokenIdLength[1] = 0xf8)
  674. #define IS_ZERO_TOKEN(T) (((PSTORAGE_OFFLOAD_TOKEN)T)->TokenType[0] == 0xff && \
  675. ((PSTORAGE_OFFLOAD_TOKEN)T)->TokenType[1] == 0xff && \
  676. ((PSTORAGE_OFFLOAD_TOKEN)T)->TokenType[2] == 0x00 && \
  677. ((PSTORAGE_OFFLOAD_TOKEN)T)->TokenType[3] == 0x01 && \
  678. ((PSTORAGE_OFFLOAD_TOKEN)T)->TokenIdLength[0] == 0x01 && \
  679. ((PSTORAGE_OFFLOAD_TOKEN)T)->TokenIdLength[1] == 0xf8)
  680. typedef struct _STORAGE_OFFLOAD_READ_OUTPUT {
  681. ULONG OffloadReadFlags;
  682. ULONG Reserved;
  683. ULONGLONG LengthProtected;
  684. ULONG TokenLength;
  685. STORAGE_OFFLOAD_TOKEN Token;
  686. } STORAGE_OFFLOAD_READ_OUTPUT, *PSTORAGE_OFFLOAD_READ_OUTPUT;
  687. #define STORAGE_OFFLOAD_READ_RANGE_TRUNCATED 0x0001
  688. typedef struct _STORAGE_OFFLOAD_WRITE_OUTPUT {
  689. ULONG OffloadWriteFlags;
  690. ULONG Reserved;
  691. ULONGLONG LengthCopied;
  692. } STORAGE_OFFLOAD_WRITE_OUTPUT, *PSTORAGE_OFFLOAD_WRITE_OUTPUT;
  693. #define STORAGE_OFFLOAD_WRITE_RANGE_TRUNCATED 0x0001
  694. #define STORAGE_OFFLOAD_TOKEN_INVALID 0x0002
  695. #define STORAGE_CRASH_TELEMETRY_REGKEY L"\\Registry\\Machine\\System\\CurrentControlSet\\Control\\CrashControl\\StorageTelemetry"
  696. #define STORAGE_DEVICE_TELEMETRY_REGKEY L"\\Registry\\Machine\\System\\CurrentControlSet\\Control\\Storage\\StorageTelemetry"
  697. #define DDUMP_FLAG_DATA_READ_FROM_DEVICE 0x0001
  698. #define FW_ISSUEID_NO_ISSUE 0x00000000
  699. #define FW_ISSUEID_UNKNOWN 0xffffffff
  700. #define TC_PUBLIC_DEVICEDUMP_CONTENT_SMART 1
  701. #define TC_PUBLIC_DEVICEDUMP_CONTENT_GPLOG 2
  702. #define TC_PUBLIC_DATA_TYPE_ATAGP "ATAGPLogPages"
  703. #define TC_PUBLIC_DATA_TYPE_ATASMART "ATASMARTPages"
  704. #define DEVICEDUMP_CAP_PRIVATE_SECTION 0x00000001
  705. #define DEVICEDUMP_CAP_RESTRICTED_SECTION 0x00000002
  706. #define TCRecordStorportSrbFunction Command[0]
  707. typedef enum _DEVICEDUMP_COLLECTION_TYPE {
  708. TCCollectionBugCheck = 1,
  709. TCCollectionApplicationRequested,
  710. TCCollectionDeviceRequested
  711. } DEVICEDUMP_COLLECTION_TYPEIDE_NOTIFICATION_TYPE, *PDEVICEDUMP_COLLECTION_TYPE;
  712. typedef struct _DEVICEDUMP_SUBSECTION_POINTER {
  713. ULONG dwSize;
  714. ULONG dwFlags;
  715. ULONG dwOffset;
  716. } DEVICEDUMP_SUBSECTION_POINTER, *PDEVICEDUMP_SUBSECTION_POINTER;
  717. #define DEVICEDUMP_STRUCTURE_VERSION_V1 1
  718. typedef struct _DEVICEDUMP_STRUCTURE_VERSION {
  719. ULONG dwSignature;
  720. ULONG dwVersion;
  721. ULONG dwSize;
  722. } DEVICEDUMP_STRUCTURE_VERSION, *PDEVICEDUMP_STRUCTURE_VERSION;
  723. #define DEVICEDUMP_MAX_IDSTRING 32
  724. #define MAX_FW_BUCKET_ID_LENGTH 132
  725. typedef struct _DEVICEDUMP_SECTION_HEADER {
  726. GUID guidDeviceDataId;
  727. UCHAR sOrganizationID[16];
  728. ULONG dwFirmwareRevision;
  729. UCHAR sModelNumber[DEVICEDUMP_MAX_IDSTRING];
  730. UCHAR szDeviceManufacturingID[DEVICEDUMP_MAX_IDSTRING];
  731. ULONG dwFlags;
  732. ULONG bRestrictedPrivateDataVersion;
  733. ULONG dwFirmwareIssueId;
  734. UCHAR szIssueDescriptionString[MAX_FW_BUCKET_ID_LENGTH];
  735. } DEVICEDUMP_SECTION_HEADER, *PDEVICEDUMP_SECTION_HEADER;
  736. #define TC_PUBLIC_DEVICEDUMP_CONTENT_GPLOG_MAX 16
  737. #define TC_DEVICEDUMP_SUBSECTION_DESC_LENGTH 16
  738. typedef struct _GP_LOG_PAGE_DESCRIPTOR {
  739. USHORT LogAddress;
  740. USHORT LogSectors;
  741. } GP_LOG_PAGE_DESCRIPTOR, *PGP_LOG_PAGE_DESCRIPTOR;
  742. typedef struct _DEVICEDUMP_PUBLIC_SUBSECTION {
  743. ULONG dwFlags;
  744. GP_LOG_PAGE_DESCRIPTOR GPLogTable[TC_PUBLIC_DEVICEDUMP_CONTENT_GPLOG_MAX];
  745. CHAR szDescription[TC_DEVICEDUMP_SUBSECTION_DESC_LENGTH];
  746. UCHAR bData[1];
  747. } DEVICEDUMP_PUBLIC_SUBSECTION, *PDEVICEDUMP_PUBLIC_SUBSECTION;
  748. typedef struct _DEVICEDUMP_PRIVATE_SUBSECTION {
  749. ULONG dwFlags;
  750. GP_LOG_PAGE_DESCRIPTOR GPLogId;
  751. UCHAR bData[1];
  752. } DEVICEDUMP_PRIVATE_SUBSECTION, *PDEVICEDUMP_PRIVATE_SUBSECTION;
  753. #define CDB_SIZE 16
  754. #define TELEMETRY_COMMAND_SIZE 16
  755. typedef struct _DEVICEDUMP_STORAGESTACK_PUBLIC_STATE_RECORD {
  756. UCHAR Cdb[CDB_SIZE];
  757. UCHAR Command[TELEMETRY_COMMAND_SIZE];
  758. ULONGLONG StartTime;
  759. ULONGLONG EndTime;
  760. ULONG OperationStatus;
  761. ULONG OperationError;
  762. union {
  763. struct {
  764. ULONG dwReserved;
  765. } ExternalStack;
  766. struct {
  767. ULONG dwAtaPortSpecific;
  768. } AtaPort;
  769. struct {
  770. ULONG SrbTag;
  771. } StorPort;
  772. } StackSpecific;
  773. } DEVICEDUMP_STORAGESTACK_PUBLIC_STATE_RECORD, *PDEVICEDUMP_STORAGESTACK_PUBLIC_STATE_RECORD;
  774. typedef struct _DEVICEDUMP_RESTRICTED_SUBSECTION {
  775. UCHAR bData[1];
  776. } DEVICEDUMP_RESTRICTED_SUBSECTION, *PDEVICEDUMP_RESTRICTED_SUBSECTION;
  777. typedef struct _DEVICEDUMP_STORAGEDEVICE_DATA {
  778. DEVICEDUMP_STRUCTURE_VERSION Descriptor;
  779. DEVICEDUMP_SECTION_HEADER SectionHeader;
  780. ULONG dwBufferSize;
  781. ULONG dwReasonForCollection;
  782. DEVICEDUMP_SUBSECTION_POINTER PublicData;
  783. DEVICEDUMP_SUBSECTION_POINTER RestrictedData;
  784. DEVICEDUMP_SUBSECTION_POINTER PrivateData;
  785. } DEVICEDUMP_STORAGEDEVICE_DATA, *PDEVICEDUMP_STORAGEDEVICE_DATA;
  786. typedef struct _DEVICEDUMP_STORAGESTACK_PUBLIC_DUMP {
  787. DEVICEDUMP_STRUCTURE_VERSION Descriptor;
  788. ULONG dwReasonForCollection;
  789. UCHAR cDriverName[16];
  790. ULONG uiNumRecords;
  791. DEVICEDUMP_STORAGESTACK_PUBLIC_STATE_RECORD RecordArray[1];
  792. } DEVICEDUMP_STORAGESTACK_PUBLIC_DUMP, *PDEVICEDUMP_STORAGESTACK_PUBLIC_DUMP;
  793. typedef struct _DEVICE_LB_PROVISIONING_DESCRIPTOR {
  794. ULONG Version;
  795. ULONG Size;
  796. UCHAR ThinProvisioningEnabled : 1;
  797. UCHAR ThinProvisioningReadZeros : 1;
  798. UCHAR AnchorSupported : 3;
  799. UCHAR UnmapGranularityAlignmentValid : 1;
  800. UCHAR Reserved0 : 2;
  801. UCHAR Reserved1[7];
  802. ULONGLONG OptimalUnmapGranularity;
  803. ULONGLONG UnmapGranularityAlignment;
  804. } DEVICE_LB_PROVISIONING_DESCRIPTOR, *PDEVICE_LB_PROVISIONING_DESCRIPTOR;
  805. typedef struct _STORAGE_LB_PROVISIONING_MAP_RESOURCES {
  806. ULONG Size;
  807. ULONG Version;
  808. UCHAR AvailableMappingResourcesValid : 1;
  809. UCHAR UsedMappingResourcesValid : 1;
  810. UCHAR Reserved0 : 6;
  811. UCHAR Reserved1[3];
  812. UCHAR MappingResourcesScope : 2;
  813. UCHAR UsedMappingResourcesScope : 2;
  814. UCHAR Reserved2 : 4;
  815. UCHAR Reserved3[3];
  816. ULONGLONG AvailableMappingResources;
  817. ULONGLONG UsedMappingResources;
  818. } STORAGE_LB_PROVISIONING_MAP_RESOURCES, *PSTORAGE_LB_PROVISIONING_MAP_RESOURCES;
  819. typedef struct _DEVICE_POWER_DESCRIPTOR {
  820. ULONG Version;
  821. ULONG Size;
  822. BOOLEAN DeviceAttentionSupported;
  823. BOOLEAN AsynchronousNotificationSupported;
  824. BOOLEAN IdlePowerManagementEnabled;
  825. BOOLEAN D3ColdEnabled;
  826. BOOLEAN D3ColdSupported;
  827. BOOLEAN NoVerifyDuringIdlePower;
  828. UCHAR Reserved[2];
  829. ULONG IdleTimeoutInMS;
  830. } DEVICE_POWER_DESCRIPTOR, *PDEVICE_POWER_DESCRIPTOR;
  831. typedef struct _DEVICE_COPY_OFFLOAD_DESCRIPTOR {
  832. ULONG Version;
  833. ULONG Size;
  834. ULONG MaximumTokenLifetime;
  835. ULONG DefaultTokenLifetime;
  836. ULONGLONG MaximumTransferSize;
  837. ULONGLONG OptimalTransferCount;
  838. ULONG MaximumDataDescriptors;
  839. ULONG MaximumTransferLengthPerDescriptor;
  840. ULONG OptimalTransferLengthPerDescriptor;
  841. USHORT OptimalTransferLengthGranularity;
  842. UCHAR Reserved[2];
  843. } DEVICE_COPY_OFFLOAD_DESCRIPTOR, *PDEVICE_COPY_OFFLOAD_DESCRIPTOR;
  844. typedef struct _STORAGE_DEVICE_RESILIENCY_DESCRIPTOR {
  845. ULONG Version;
  846. ULONG Size;
  847. ULONG NameOffset;
  848. ULONG NumberOfLogicalCopies;
  849. ULONG NumberOfPhysicalCopies;
  850. ULONG PhysicalDiskRedundancy;
  851. ULONG NumberOfColumns;
  852. ULONG Interleave;
  853. } STORAGE_DEVICE_RESILIENCY_DESCRIPTOR, *PSTORAGE_DEVICE_RESILIENCY_DESCRIPTOR;
  854. typedef struct _STORAGE_IDLE_POWER {
  855. ULONG Version;
  856. ULONG Size;
  857. ULONG WakeCapableHint : 1;
  858. ULONG D3ColdSupported : 1;
  859. ULONG Reserved : 30;
  860. ULONG D3IdleTimeout;
  861. } STORAGE_IDLE_POWER, *PSTORAGE_IDLE_POWER;
  862. typedef enum _STORAGE_POWERUP_REASON_TYPE {
  863. StoragePowerupUnknown,
  864. StoragePowerupIO,
  865. StoragePowerupDeviceAttention
  866. } STORAGE_POWERUP_REASON_TYPE, *PSTORAGE_POWERUP_REASON_TYPE;
  867. typedef struct _STORAGE_IDLE_POWERUP_REASON {
  868. ULONG Version;
  869. ULONG Size;
  870. STORAGE_POWERUP_REASON_TYPE PowerupReason;
  871. } STORAGE_IDLE_POWERUP_REASON, *PSTORAGE_IDLE_POWERUP_REASON;
  872. #define STORAGE_IDLE_POWERUP_REASON_VERSION_V1 1
  873. typedef struct _STORAGE_EVENT_NOTIFICATION {
  874. ULONG Version;
  875. ULONG Size;
  876. ULONGLONG Events;
  877. } STORAGE_EVENT_NOTIFICATION, *PSTORAGE_EVENT_NOTIFICATION;
  878. #define STORAGE_EVENT_NOTIFICATION_VERSION_V1 1
  879. #define STORAGE_EVENT_MEDIA_STATUS 1
  880. #define STORAGE_EVENT_DEVICE_STATUS 2
  881. #define STORAGE_EVENT_DEVICE_OPERATION 4
  882. #define STORAGE_EVENT_ALL \
  883. (STORAGE_EVENT_MEDIA_STATUS | STORAGE_EVENT_DEVICE_STATUS | STORAGE_EVENT_DEVICE_OPERATION)
  884. #define READ_COPY_NUMBER_KEY 0x52434e00
  885. #define IsKeyReadCopyNumber(k) (((k) & 0xffffff00) == READ_COPY_NUMBER_KEY)
  886. #define ReadCopyNumberToKey(c) (READ_COPY_NUMBER_KEY | (UCHAR)(c))
  887. #define ReadCopyNumberFromKey(k) (UCHAR)((k) & 0x000000ff)
  888. typedef struct _DEVICE_DSM_OFFLOAD_READ_PARAMETERS {
  889. ULONG Flags;
  890. ULONG TimeToLive;
  891. ULONG Reserved[2];
  892. } DEVICE_DSM_OFFLOAD_READ_PARAMETERS, *PDEVICE_DSM_OFFLOAD_READ_PARAMETERS;
  893. typedef struct _DEVICE_DSM_OFFLOAD_WRITE_PARAMETERS {
  894. ULONG Flags;
  895. ULONG Reserved;
  896. ULONGLONG TokenOffset;
  897. STORAGE_OFFLOAD_TOKEN Token;
  898. } DEVICE_DSM_OFFLOAD_WRITE_PARAMETERS, *PDEVICE_DSM_OFFLOAD_WRITE_PARAMETERS;
  899. typedef struct _DEVICE_DATA_SET_REPAIR_PARAMETERS {
  900. ULONG NumberOfRepairCopies;
  901. ULONG SourceCopy;
  902. ULONG RepairCopies[1];
  903. } DEVICE_DATA_SET_REPAIR_PARAMETERS, *PDEVICE_DATA_SET_REPAIR_PARAMETERS;
  904. typedef struct _DEVICE_MANAGE_DATA_SET_ATTRIBUTES_OUTPUT {
  905. ULONG Size;
  906. DEVICE_DATA_MANAGEMENT_SET_ACTION Action;
  907. ULONG Flags;
  908. ULONG OperationStatus;
  909. ULONG ExtendedError;
  910. ULONG TargetDetailedError;
  911. ULONG ReservedStatus;
  912. ULONG OutputBlockOffset;
  913. ULONG OutputBlockLength;
  914. } DEVICE_MANAGE_DATA_SET_ATTRIBUTES_OUTPUT, *PDEVICE_MANAGE_DATA_SET_ATTRIBUTES_OUTPUT;
  915. typedef struct _DEVICE_DATA_SET_LB_PROVISIONING_STATE {
  916. ULONG Size;
  917. ULONG Version;
  918. ULONGLONG SlabSizeInBytes;
  919. ULONG SlabOffsetDeltaInBytes;
  920. ULONG SlabAllocationBitMapBitCount;
  921. ULONG SlabAllocationBitMapLength;
  922. ULONG SlabAllocationBitMap[1];
  923. } DEVICE_DATA_SET_LB_PROVISIONING_STATE, *PDEVICE_DATA_SET_LB_PROVISIONING_STATE;
  924. typedef struct _DEVICE_DATA_SET_SCRUB_OUTPUT {
  925. ULONGLONG BytesProcessed;
  926. ULONGLONG BytesRepaired;
  927. ULONGLONG BytesFailed;
  928. } DEVICE_DATA_SET_SCRUB_OUTPUT, *PDEVICE_DATA_SET_SCRUB_OUTPUT;
  929. #if NTDDI_VERSION >= NTDDI_WIN8
  930. #define NO_SRBTYPE_ADAPTER_DESCRIPTOR_SIZE FIELD_OFFSET(STORAGE_ADAPTER_DESCRIPTOR, SrbType)
  931. #ifndef SRB_TYPE_SCSI_REQUEST_BLOCK
  932. #define SRB_TYPE_SCSI_REQUEST_BLOCK 0
  933. #endif
  934. #ifndef SRB_TYPE_STORAGE_REQUEST_BLOCK
  935. #define SRB_TYPE_STORAGE_REQUEST_BLOCK 1
  936. #endif
  937. #ifndef STORAGE_ADDRESS_TYPE_BTL8
  938. #define STORAGE_ADDRESS_TYPE_BTL8 0
  939. #endif
  940. #endif
  941. #ifdef __cplusplus
  942. }
  943. #endif
  944. #endif /* _NTDDSTOR_H_ */