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 23 #ifndef _NTDDSTOR_H_ 24 #define _NTDDSTOR_H_ 25 26 #ifdef __cplusplus 27 extern "C" { 28 #endif 29 30 #if defined(DEFINE_GUID) 31 32 DEFINE_GUID(GUID_DEVINTERFACE_DISK, 33 0x53f56307L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); 34 35 DEFINE_GUID(GUID_DEVINTERFACE_CDROM, 36 0x53f56308L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); 37 38 DEFINE_GUID(GUID_DEVINTERFACE_PARTITION, 39 0x53f5630aL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); 40 41 DEFINE_GUID(GUID_DEVINTERFACE_TAPE, 42 0x53f5630bL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); 43 44 DEFINE_GUID(GUID_DEVINTERFACE_WRITEONCEDISK, 45 0x53f5630cL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); 46 47 DEFINE_GUID(GUID_DEVINTERFACE_VOLUME, 48 0x53f5630dL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); 49 50 DEFINE_GUID(GUID_DEVINTERFACE_MEDIUMCHANGER, 51 0x53f56310L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); 52 53 DEFINE_GUID(GUID_DEVINTERFACE_FLOPPY, 54 0x53f56311L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); 55 56 DEFINE_GUID(GUID_DEVINTERFACE_CDCHANGER, 57 0x53f56312L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); 58 59 DEFINE_GUID(GUID_DEVINTERFACE_STORAGEPORT, 60 0x2accfe60L, 0xc130, 0x11d2, 0xb0, 0x82, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); 61 62 DEFINE_GUID(GUID_DEVINTERFACE_HIDDEN_VOLUME, 63 0x7f108a28L, 0x9833, 0x4b3b, 0xb7, 0x80, 0x2c, 0x6b, 0x5f, 0xa5, 0xc0, 0x62); 64 65 #define WDI_STORAGE_PREDICT_FAILURE_DPS_GUID \ 66 {0xe9f2d03aL, 0x747c, 0x41c2, {0xbb, 0x9a, 0x02, 0xc6, 0x2b, 0x6d, 0x5f, 0xcb}}; 67 68 /* Aliases for storage guids */ 69 #define DiskClassGuid GUID_DEVINTERFACE_DISK 70 #define CdRomClassGuid GUID_DEVINTERFACE_CDROM 71 #define PartitionClassGuid GUID_DEVINTERFACE_PARTITION 72 #define TapeClassGuid GUID_DEVINTERFACE_TAPE 73 #define WriteOnceDiskClassGuid GUID_DEVINTERFACE_WRITEONCEDISK 74 #define VolumeClassGuid GUID_DEVINTERFACE_VOLUME 75 #define MediumChangerClassGuid GUID_DEVINTERFACE_MEDIUMCHANGER 76 #define FloppyClassGuid GUID_DEVINTERFACE_FLOPPY 77 #define CdChangerClassGuid GUID_DEVINTERFACE_CDCHANGER 78 #define StoragePortClassGuid GUID_DEVINTERFACE_STORAGEPORT 79 #define HiddenVolumeClassGuid GUID_DEVINTERFACE_HIDDEN_VOLUME 80 81 #endif /* defined(DEFINE_GUID) */ 82 83 #ifndef _WINIOCTL_ 84 85 #define IOCTL_STORAGE_BASE FILE_DEVICE_MASS_STORAGE 86 87 #define IOCTL_STORAGE_CHECK_VERIFY \ 88 CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS) 89 90 #define IOCTL_STORAGE_CHECK_VERIFY2 \ 91 CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_ANY_ACCESS) 92 93 #define IOCTL_STORAGE_MEDIA_REMOVAL \ 94 CTL_CODE(IOCTL_STORAGE_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS) 95 96 #define IOCTL_STORAGE_EJECT_MEDIA \ 97 CTL_CODE(IOCTL_STORAGE_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS) 98 99 #define IOCTL_STORAGE_LOAD_MEDIA \ 100 CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS) 101 102 #define IOCTL_STORAGE_LOAD_MEDIA2 \ 103 CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_ANY_ACCESS) 104 105 #define IOCTL_STORAGE_RESERVE \ 106 CTL_CODE(IOCTL_STORAGE_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS) 107 108 #define IOCTL_STORAGE_RELEASE \ 109 CTL_CODE(IOCTL_STORAGE_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS) 110 111 #define IOCTL_STORAGE_FIND_NEW_DEVICES \ 112 CTL_CODE(IOCTL_STORAGE_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS) 113 114 #define IOCTL_STORAGE_EJECTION_CONTROL \ 115 CTL_CODE(IOCTL_STORAGE_BASE, 0x0250, METHOD_BUFFERED, FILE_ANY_ACCESS) 116 117 #define IOCTL_STORAGE_MCN_CONTROL \ 118 CTL_CODE(IOCTL_STORAGE_BASE, 0x0251, METHOD_BUFFERED, FILE_ANY_ACCESS) 119 120 #define IOCTL_STORAGE_GET_MEDIA_TYPES \ 121 CTL_CODE(IOCTL_STORAGE_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS) 122 123 #define IOCTL_STORAGE_GET_MEDIA_TYPES_EX \ 124 CTL_CODE(IOCTL_STORAGE_BASE, 0x0301, METHOD_BUFFERED, FILE_ANY_ACCESS) 125 126 #define IOCTL_STORAGE_RESET_BUS \ 127 CTL_CODE(IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS) 128 129 #define IOCTL_STORAGE_RESET_DEVICE \ 130 CTL_CODE(IOCTL_STORAGE_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS) 131 132 #define IOCTL_STORAGE_GET_DEVICE_NUMBER \ 133 CTL_CODE(IOCTL_STORAGE_BASE, 0x0420, METHOD_BUFFERED, FILE_ANY_ACCESS) 134 135 #define IOCTL_STORAGE_PREDICT_FAILURE \ 136 CTL_CODE(IOCTL_STORAGE_BASE, 0x0440, METHOD_BUFFERED, FILE_ANY_ACCESS) 137 138 #endif /* _WINIOCTL_ */ 139 140 #define IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER \ 141 CTL_CODE(IOCTL_STORAGE_BASE, 0x0304, METHOD_BUFFERED, FILE_ANY_ACCESS) 142 143 #define IOCTL_STORAGE_GET_HOTPLUG_INFO \ 144 CTL_CODE(IOCTL_STORAGE_BASE, 0x0305, METHOD_BUFFERED, FILE_ANY_ACCESS) 145 146 #define IOCTL_STORAGE_SET_HOTPLUG_INFO \ 147 CTL_CODE(IOCTL_STORAGE_BASE, 0x0306, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 148 149 #define OBSOLETE_IOCTL_STORAGE_RESET_BUS \ 150 CTL_CODE(IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 151 152 #define OBSOLETE_IOCTL_STORAGE_RESET_DEVICE \ 153 CTL_CODE(IOCTL_STORAGE_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 154 155 #define IOCTL_STORAGE_BREAK_RESERVATION \ 156 CTL_CODE(IOCTL_STORAGE_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS) 157 158 #define IOCTL_STORAGE_PERSISTENT_RESERVE_IN \ 159 CTL_CODE(IOCTL_STORAGE_BASE, 0x0406, METHOD_BUFFERED, FILE_READ_ACCESS) 160 161 #define IOCTL_STORAGE_PERSISTENT_RESERVE_OUT \ 162 CTL_CODE(IOCTL_STORAGE_BASE, 0x0407, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 163 164 #define IOCTL_STORAGE_READ_CAPACITY \ 165 CTL_CODE(IOCTL_STORAGE_BASE, 0x0450, METHOD_BUFFERED, FILE_READ_ACCESS) 166 167 #define IOCTL_STORAGE_QUERY_PROPERTY \ 168 CTL_CODE(IOCTL_STORAGE_BASE, 0x0500, METHOD_BUFFERED, FILE_ANY_ACCESS) 169 170 #define IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES \ 171 CTL_CODE(IOCTL_STORAGE_BASE, 0x0501, METHOD_BUFFERED, FILE_WRITE_ACCESS) 172 173 #define IOCTL_STORAGE_GET_LB_PROVISIONING_MAP_RESOURCES \ 174 CTL_CODE(IOCTL_STORAGE_BASE, 0x0502, METHOD_BUFFERED, FILE_READ_ACCESS) 175 176 #define IOCTL_STORAGE_GET_BC_PROPERTIES \ 177 CTL_CODE(IOCTL_STORAGE_BASE, 0x0600, METHOD_BUFFERED, FILE_READ_ACCESS) 178 179 #define IOCTL_STORAGE_ALLOCATE_BC_STREAM \ 180 CTL_CODE(IOCTL_STORAGE_BASE, 0x0601, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 181 182 #define IOCTL_STORAGE_FREE_BC_STREAM \ 183 CTL_CODE(IOCTL_STORAGE_BASE, 0x0602, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 184 185 #define IOCTL_STORAGE_CHECK_PRIORITY_HINT_SUPPORT \ 186 CTL_CODE(IOCTL_STORAGE_BASE, 0x0620, METHOD_BUFFERED, FILE_ANY_ACCESS) 187 188 #define IOCTL_STORAGE_START_DATA_INTEGRITY_CHECK \ 189 CTL_CODE(IOCTL_STORAGE_BASE, 0x0621, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 190 191 #define IOCTL_STORAGE_STOP_DATA_INTEGRITY_CHECK \ 192 CTL_CODE(IOCTL_STORAGE_BASE, 0x0622, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 193 194 #define IOCTL_STORAGE_FIRMWARE_GET_INFO \ 195 CTL_CODE(IOCTL_STORAGE_BASE, 0x0700, METHOD_BUFFERED, FILE_ANY_ACCESS) 196 197 #define IOCTL_STORAGE_FIRMWARE_DOWNLOAD \ 198 CTL_CODE(IOCTL_STORAGE_BASE, 0x0701, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 199 200 #define IOCTL_STORAGE_FIRMWARE_ACTIVATE \ 201 CTL_CODE(IOCTL_STORAGE_BASE, 0x0702, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 202 203 #define IOCTL_STORAGE_ENABLE_IDLE_POWER \ 204 CTL_CODE(IOCTL_STORAGE_BASE, 0x0720, METHOD_BUFFERED, FILE_ANY_ACCESS) 205 206 #define IOCTL_STORAGE_GET_IDLE_POWERUP_REASON \ 207 CTL_CODE(IOCTL_STORAGE_BASE, 0x0721, METHOD_BUFFERED, FILE_ANY_ACCESS) 208 209 #define IOCTL_STORAGE_POWER_ACTIVE \ 210 CTL_CODE(IOCTL_STORAGE_BASE, 0x0722, METHOD_BUFFERED, FILE_ANY_ACCESS) 211 212 #define IOCTL_STORAGE_POWER_IDLE \ 213 CTL_CODE(IOCTL_STORAGE_BASE, 0x0723, METHOD_BUFFERED, FILE_ANY_ACCESS) 214 215 #define IOCTL_STORAGE_EVENT_NOTIFICATION \ 216 CTL_CODE(IOCTL_STORAGE_BASE, 0x0724, METHOD_BUFFERED, FILE_ANY_ACCESS) 217 218 #define IOCTL_STORAGE_DEVICE_POWER_CAP \ 219 CTL_CODE(IOCTL_STORAGE_BASE, 0x0725, METHOD_BUFFERED, FILE_ANY_ACCESS) 220 221 #define IOCTL_STORAGE_RPMB_COMMAND \ 222 CTL_CODE(IOCTL_STORAGE_BASE, 0x0726, METHOD_BUFFERED, FILE_ANY_ACCESS) 223 224 #define IOCTL_STORAGE_ATTRIBUTE_MANAGEMENT \ 225 CTL_CODE(IOCTL_STORAGE_BASE, 0x0727, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 226 227 #define IOCTL_STORAGE_DIAGNOSTIC \ 228 CTL_CODE(IOCTL_STORAGE_BASE, 0x0728, METHOD_BUFFERED, FILE_ANY_ACCESS) 229 230 #define IOCTL_STORAGE_GET_PHYSICAL_ELEMENT_STATUS \ 231 CTL_CODE(IOCTL_STORAGE_BASE, 0x0729, METHOD_BUFFERED, FILE_ANY_ACCESS) 232 233 #define IOCTL_STORAGE_REMOVE_ELEMENT_AND_TRUNCATE \ 234 CTL_CODE(IOCTL_STORAGE_BASE, 0x0730, METHOD_BUFFERED, FILE_ANY_ACCESS) 235 236 #define IOCTL_STORAGE_GET_DEVICE_INTERNAL_LOG \ 237 CTL_CODE(IOCTL_STORAGE_BASE, 0x0731, METHOD_BUFFERED, FILE_ANY_ACCESS) 238 239 #define RECOVERED_WRITES_VALID 0x00000001 240 #define UNRECOVERED_WRITES_VALID 0x00000002 241 #define RECOVERED_READS_VALID 0x00000004 242 #define UNRECOVERED_READS_VALID 0x00000008 243 #define WRITE_COMPRESSION_INFO_VALID 0x00000010 244 #define READ_COMPRESSION_INFO_VALID 0x00000020 245 246 #define TAPE_RETURN_STATISTICS 0L 247 #define TAPE_RETURN_ENV_INFO 1L 248 #define TAPE_RESET_STATISTICS 2L 249 250 /* DEVICE_MEDIA_INFO.DeviceSpecific.DiskInfo.MediaCharacteristics constants */ 251 #define MEDIA_ERASEABLE 0x00000001 252 #define MEDIA_WRITE_ONCE 0x00000002 253 #define MEDIA_READ_ONLY 0x00000004 254 #define MEDIA_READ_WRITE 0x00000008 255 #define MEDIA_WRITE_PROTECTED 0x00000100 256 #define MEDIA_CURRENTLY_MOUNTED 0x80000000 257 258 #define StorageIdTypeNAA StorageIdTypeFCPHName 259 260 #define DeviceDsmActionFlag_NonDestructive 0x80000000 261 262 #define IsDsmActionNonDestructive(_Action) ((BOOLEAN)((_Action & DeviceDsmActionFlag_NonDestructive) != 0)) 263 264 #define DeviceDsmAction_None 0x0u 265 #define DeviceDsmAction_Trim 0x1u 266 #define DeviceDsmAction_Notification (0x00000002u | DeviceDsmActionFlag_NonDestructive) 267 #define DeviceDsmAction_OffloadRead (0x00000003u | DeviceDsmActionFlag_NonDestructive) 268 #define DeviceDsmAction_OffloadWrite (0x00000004u) 269 #define DeviceDsmAction_Allocation (0x00000005u | DeviceDsmActionFlag_NonDestructive) 270 #define DeviceDsmAction_Repair (0x00000006u | DeviceDsmActionFlag_NonDestructive) 271 #define DeviceDsmAction_Scrub (0x00000007u | DeviceDsmActionFlag_NonDestructive) 272 #define DeviceDsmAction_DrtQuery (0x00000008u | DeviceDsmActionFlag_NonDestructive) 273 #define DeviceDsmAction_DrtClear (0x00000009u | DeviceDsmActionFlag_NonDestructive) 274 #define DeviceDsmAction_DrtDisable (0x0000000Au | DeviceDsmActionFlag_NonDestructive) 275 #define DeviceDsmAction_TieringQuery (0x0000000Bu | DeviceDsmActionFlag_NonDestructive) 276 #define DeviceDsmAction_Map (0x0000000Cu | DeviceDsmActionFlag_NonDestructive) 277 #define DeviceDsmAction_RegenerateParity (0x0000000Du | DeviceDsmActionFlag_NonDestructive) 278 #define DeviceDsmAction_NvCache_Change_Priority (0x0000000Eu | DeviceDsmActionFlag_NonDestructive) 279 #define DeviceDsmAction_NvCache_Evict (0x0000000Fu | DeviceDsmActionFlag_NonDestructive) 280 #define DeviceDsmAction_TopologyIdQuery (0x00000010u | DeviceDsmActionFlag_NonDestructive) 281 #define DeviceDsmAction_GetPhysicalAddresses (0x00000011u | DeviceDsmActionFlag_NonDestructive) 282 #define DeviceDsmAction_ScopeRegen (0x00000012u | DeviceDsmActionFlag_NonDestructive) 283 #define DeviceDsmAction_ReportZones (0x00000013u | DeviceDsmActionFlag_NonDestructive) 284 #define DeviceDsmAction_OpenZone (0x00000014u | DeviceDsmActionFlag_NonDestructive) 285 #define DeviceDsmAction_FinishZone (0x00000015u | DeviceDsmActionFlag_NonDestructive) 286 #define DeviceDsmAction_CloseZone (0x00000016u | DeviceDsmActionFlag_NonDestructive) 287 #define DeviceDsmAction_ResetWritePointer (0x00000017u) 288 #define DeviceDsmAction_GetRangeErrorInfo (0x00000018u | DeviceDsmActionFlag_NonDestructive) 289 #define DeviceDsmAction_WriteZeroes (0x00000019u) 290 #define DeviceDsmAction_LostQuery (0x0000001Au | DeviceDsmActionFlag_NonDestructive) 291 #define DeviceDsmAction_GetFreeSpace (0x0000001Bu | DeviceDsmActionFlag_NonDestructive) 292 #define DeviceDsmAction_ConversionQuery (0x0000001Cu | DeviceDsmActionFlag_NonDestructive) 293 #define DeviceDsmAction_VdtSet (0x0000001Du) 294 295 #define DEVICE_DSM_FLAG_ENTIRE_DATA_SET_RANGE 0x00000001 296 297 #define DEVICE_DSM_NOTIFY_FLAG_BEGIN 0x00000001 298 #define DEVICE_DSM_NOTIFY_FLAG_END 0x00000002 299 300 #define IOCTL_STORAGE_BC_VERSION 1 301 302 #define STORAGE_PRIORITY_HINT_SUPPORTED 0x0001 303 304 typedef struct _STORAGE_HOTPLUG_INFO { 305 ULONG Size; 306 BOOLEAN MediaRemovable; 307 BOOLEAN MediaHotplug; 308 BOOLEAN DeviceHotplug; 309 BOOLEAN WriteCacheEnableOverride; 310 } STORAGE_HOTPLUG_INFO, *PSTORAGE_HOTPLUG_INFO; 311 312 typedef struct _STORAGE_DEVICE_NUMBER { 313 DEVICE_TYPE DeviceType; 314 ULONG DeviceNumber; 315 ULONG PartitionNumber; 316 } STORAGE_DEVICE_NUMBER, *PSTORAGE_DEVICE_NUMBER; 317 318 typedef struct _STORAGE_BUS_RESET_REQUEST { 319 UCHAR PathId; 320 } STORAGE_BUS_RESET_REQUEST, *PSTORAGE_BUS_RESET_REQUEST; 321 322 typedef struct _STORAGE_BREAK_RESERVATION_REQUEST { 323 ULONG Length; 324 UCHAR _unused; 325 UCHAR PathId; 326 UCHAR TargetId; 327 UCHAR Lun; 328 } STORAGE_BREAK_RESERVATION_REQUEST, *PSTORAGE_BREAK_RESERVATION_REQUEST; 329 330 #ifndef _WINIOCTL_ 331 typedef struct _PREVENT_MEDIA_REMOVAL { 332 BOOLEAN PreventMediaRemoval; 333 } PREVENT_MEDIA_REMOVAL, *PPREVENT_MEDIA_REMOVAL; 334 #endif 335 336 typedef struct _CLASS_MEDIA_CHANGE_CONTEXT { 337 ULONG MediaChangeCount; 338 ULONG NewState; 339 } CLASS_MEDIA_CHANGE_CONTEXT, *PCLASS_MEDIA_CHANGE_CONTEXT; 340 341 typedef struct _TAPE_STATISTICS { 342 ULONG Version; 343 ULONG Flags; 344 LARGE_INTEGER RecoveredWrites; 345 LARGE_INTEGER UnrecoveredWrites; 346 LARGE_INTEGER RecoveredReads; 347 LARGE_INTEGER UnrecoveredReads; 348 UCHAR CompressionRatioReads; 349 UCHAR CompressionRatioWrites; 350 } TAPE_STATISTICS, *PTAPE_STATISTICS; 351 352 typedef struct _TAPE_GET_STATISTICS { 353 ULONG Operation; 354 } TAPE_GET_STATISTICS, *PTAPE_GET_STATISTICS; 355 356 typedef enum _STORAGE_MEDIA_TYPE { 357 DDS_4mm = 0x20, 358 MiniQic, 359 Travan, 360 QIC, 361 MP_8mm, 362 AME_8mm, 363 AIT1_8mm, 364 DLT, 365 NCTP, 366 IBM_3480, 367 IBM_3490E, 368 IBM_Magstar_3590, 369 IBM_Magstar_MP, 370 STK_DATA_D3, 371 SONY_DTF, 372 DV_6mm, 373 DMI, 374 SONY_D2, 375 CLEANER_CARTRIDGE, 376 CD_ROM, 377 CD_R, 378 CD_RW, 379 DVD_ROM, 380 DVD_R, 381 DVD_RW, 382 MO_3_RW, 383 MO_5_WO, 384 MO_5_RW, 385 MO_5_LIMDOW, 386 PC_5_WO, 387 PC_5_RW, 388 PD_5_RW, 389 ABL_5_WO, 390 PINNACLE_APEX_5_RW, 391 SONY_12_WO, 392 PHILIPS_12_WO, 393 HITACHI_12_WO, 394 CYGNET_12_WO, 395 KODAK_14_WO, 396 MO_NFR_525, 397 NIKON_12_RW, 398 IOMEGA_ZIP, 399 IOMEGA_JAZ, 400 SYQUEST_EZ135, 401 SYQUEST_EZFLYER, 402 SYQUEST_SYJET, 403 AVATAR_F2, 404 MP2_8mm, 405 DST_S, 406 DST_M, 407 DST_L, 408 VXATape_1, 409 VXATape_2, 410 #if (NTDDI_VERSION < NTDDI_WINXP) 411 STK_EAGLE, 412 #else 413 STK_9840, 414 #endif 415 LTO_Ultrium, 416 LTO_Accelis, 417 DVD_RAM, 418 AIT_8mm, 419 ADR_1, 420 ADR_2, 421 STK_9940, 422 SAIT, 423 VXATape 424 } STORAGE_MEDIA_TYPE, *PSTORAGE_MEDIA_TYPE; 425 426 typedef enum _STORAGE_BUS_TYPE { 427 BusTypeUnknown = 0x00, 428 BusTypeScsi, 429 BusTypeAtapi, 430 BusTypeAta, 431 BusType1394, 432 BusTypeSsa, 433 BusTypeFibre, 434 BusTypeUsb, 435 BusTypeRAID, 436 BusTypeiScsi, 437 BusTypeSas, 438 BusTypeSata, 439 BusTypeSd, 440 BusTypeMmc, 441 BusTypeVirtual, 442 BusTypeFileBackedVirtual, 443 BusTypeMax, 444 BusTypeMaxReserved = 0x7F 445 } STORAGE_BUS_TYPE, *PSTORAGE_BUS_TYPE; 446 447 typedef struct _DEVICE_MEDIA_INFO { 448 union { 449 struct { 450 LARGE_INTEGER Cylinders; 451 STORAGE_MEDIA_TYPE MediaType; 452 ULONG TracksPerCylinder; 453 ULONG SectorsPerTrack; 454 ULONG BytesPerSector; 455 ULONG NumberMediaSides; 456 ULONG MediaCharacteristics; 457 } DiskInfo; 458 struct { 459 LARGE_INTEGER Cylinders; 460 STORAGE_MEDIA_TYPE MediaType; 461 ULONG TracksPerCylinder; 462 ULONG SectorsPerTrack; 463 ULONG BytesPerSector; 464 ULONG NumberMediaSides; 465 ULONG MediaCharacteristics; 466 } RemovableDiskInfo; 467 struct { 468 STORAGE_MEDIA_TYPE MediaType; 469 ULONG MediaCharacteristics; 470 ULONG CurrentBlockSize; 471 STORAGE_BUS_TYPE BusType; 472 union { 473 struct { 474 UCHAR MediumType; 475 UCHAR DensityCode; 476 } ScsiInformation; 477 } BusSpecificData; 478 } TapeInfo; 479 } DeviceSpecific; 480 } DEVICE_MEDIA_INFO, *PDEVICE_MEDIA_INFO; 481 482 typedef struct _GET_MEDIA_TYPES { 483 ULONG DeviceType; 484 ULONG MediaInfoCount; 485 DEVICE_MEDIA_INFO MediaInfo[1]; 486 } GET_MEDIA_TYPES, *PGET_MEDIA_TYPES; 487 488 typedef struct _STORAGE_PREDICT_FAILURE { 489 ULONG PredictFailure; 490 UCHAR VendorSpecific[512]; 491 } STORAGE_PREDICT_FAILURE, *PSTORAGE_PREDICT_FAILURE; 492 493 typedef enum _STORAGE_QUERY_TYPE { 494 PropertyStandardQuery = 0, 495 PropertyExistsQuery, 496 PropertyMaskQuery, 497 PropertyQueryMaxDefined 498 } STORAGE_QUERY_TYPE, *PSTORAGE_QUERY_TYPE; 499 500 typedef enum _STORAGE_PROPERTY_ID { 501 StorageDeviceProperty = 0, 502 StorageAdapterProperty, 503 StorageDeviceIdProperty, 504 StorageDeviceUniqueIdProperty, 505 StorageDeviceWriteCacheProperty, 506 StorageMiniportProperty, 507 StorageAccessAlignmentProperty, 508 StorageDeviceSeekPenaltyProperty, 509 StorageDeviceTrimProperty, 510 StorageDeviceWriteAggregationProperty, 511 StorageDeviceDeviceTelemetryProperty, 512 StorageDeviceLBProvisioningProperty, 513 StorageDevicePowerProperty, 514 StorageDeviceCopyOffloadProperty, 515 StorageDeviceResiliencyProperty, 516 StorageDeviceMediumProductType, 517 StorageAdapterRpmbProperty, 518 StorageAdapterCryptoProperty, 519 StorageDeviceTieringProperty, 520 StorageDeviceFaultDomainProperty, 521 StorageDeviceClusportProperty, 522 StorageDeviceDependantDevicesProperty, 523 StorageDeviceIoCapabilityProperty = 48, 524 StorageAdapterProtocolSpecificProperty, 525 StorageDeviceProtocolSpecificProperty, 526 StorageAdapterTemperatureProperty, 527 StorageDeviceTemperatureProperty, 528 StorageAdapterPhysicalTopologyProperty, 529 StorageDevicePhysicalTopologyProperty, 530 StorageDeviceAttributesProperty, 531 StorageDeviceManagementStatus, 532 StorageAdapterSerialNumberProperty, 533 StorageDeviceLocationProperty, 534 StorageDeviceNumaProperty, 535 StorageDeviceZonedDeviceProperty, 536 StorageDeviceUnsafeShutdownCount, 537 StorageDeviceEnduranceProperty, 538 } STORAGE_PROPERTY_ID, *PSTORAGE_PROPERTY_ID; 539 540 typedef struct _STORAGE_PROPERTY_QUERY { 541 STORAGE_PROPERTY_ID PropertyId; 542 STORAGE_QUERY_TYPE QueryType; 543 UCHAR AdditionalParameters[1]; 544 } STORAGE_PROPERTY_QUERY, *PSTORAGE_PROPERTY_QUERY; 545 546 typedef _Struct_size_bytes_(Size) struct _STORAGE_DESCRIPTOR_HEADER { 547 ULONG Version; 548 ULONG Size; 549 } STORAGE_DESCRIPTOR_HEADER, *PSTORAGE_DESCRIPTOR_HEADER; 550 551 typedef _Struct_size_bytes_(Size) struct _STORAGE_DEVICE_DESCRIPTOR { 552 ULONG Version; 553 ULONG Size; 554 UCHAR DeviceType; 555 UCHAR DeviceTypeModifier; 556 BOOLEAN RemovableMedia; 557 BOOLEAN CommandQueueing; 558 ULONG VendorIdOffset; 559 ULONG ProductIdOffset; 560 ULONG ProductRevisionOffset; 561 ULONG SerialNumberOffset; 562 STORAGE_BUS_TYPE BusType; 563 ULONG RawPropertiesLength; 564 UCHAR RawDeviceProperties[1]; 565 } STORAGE_DEVICE_DESCRIPTOR, *PSTORAGE_DEVICE_DESCRIPTOR; 566 567 typedef _Struct_size_bytes_(Size) struct _STORAGE_ADAPTER_DESCRIPTOR { 568 ULONG Version; 569 ULONG Size; 570 ULONG MaximumTransferLength; 571 ULONG MaximumPhysicalPages; 572 ULONG AlignmentMask; 573 BOOLEAN AdapterUsesPio; 574 BOOLEAN AdapterScansDown; 575 BOOLEAN CommandQueueing; 576 BOOLEAN AcceleratedTransfer; 577 #if (NTDDI_VERSION < NTDDI_WINXP) 578 BOOLEAN BusType; 579 #else 580 UCHAR BusType; 581 #endif 582 USHORT BusMajorVersion; 583 USHORT BusMinorVersion; 584 #if (NTDDI_VERSION >= NTDDI_WIN8) 585 UCHAR SrbType; 586 UCHAR AddressType; 587 #endif 588 } STORAGE_ADAPTER_DESCRIPTOR, *PSTORAGE_ADAPTER_DESCRIPTOR; 589 590 typedef _Struct_size_bytes_(Size) struct _STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR { 591 ULONG Version; 592 ULONG Size; 593 ULONG BytesPerCacheLine; 594 ULONG BytesOffsetForCacheAlignment; 595 ULONG BytesPerLogicalSector; 596 ULONG BytesPerPhysicalSector; 597 ULONG BytesOffsetForSectorAlignment; 598 } STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR, *PSTORAGE_ACCESS_ALIGNMENT_DESCRIPTOR; 599 600 typedef _Struct_size_bytes_(Size) struct _STORAGE_MEDIUM_PRODUCT_TYPE_DESCRIPTOR { 601 ULONG Version; 602 ULONG Size; 603 ULONG MediumProductType; 604 } STORAGE_MEDIUM_PRODUCT_TYPE_DESCRIPTOR, *PSTORAGE_MEDIUM_PRODUCT_TYPE_DESCRIPTOR; 605 606 typedef enum _STORAGE_PORT_CODE_SET { 607 StoragePortCodeSetReserved = 0, 608 StoragePortCodeSetStorport = 1, 609 StoragePortCodeSetSCSIport = 2, 610 StoragePortCodeSetSpaceport= 3, 611 StoragePortCodeSetATAport = 4, 612 StoragePortCodeSetUSBport = 5, 613 StoragePortCodeSetSBP2port = 6, 614 StoragePortCodeSetSDport = 7 615 } STORAGE_PORT_CODE_SET, *PSTORAGE_PORT_CODE_SET; 616 617 typedef struct _STORAGE_MINIPORT_DESCRIPTOR { 618 ULONG Version; 619 ULONG Size; 620 STORAGE_PORT_CODE_SET Portdriver; 621 BOOLEAN LUNResetSupported; 622 BOOLEAN TargetResetSupported; 623 #if (NTDDI_VERSION >= NTDDI_WIN8) 624 USHORT IoTimeoutValue; 625 #endif 626 #if (NTDDI_VERSION >= NTDDI_WINBLUE) 627 BOOLEAN ExtraIoInfoSupported; 628 UCHAR Reserved0[3]; 629 ULONG Reserved1; 630 #endif 631 } STORAGE_MINIPORT_DESCRIPTOR, *PSTORAGE_MINIPORT_DESCRIPTOR; 632 633 typedef struct _DEVICE_LB_PROVISIONING_DESCRIPTOR { 634 ULONG Version; 635 ULONG Size; 636 UCHAR ThinProvisioningEnabled:1; 637 UCHAR ThinProvisioningReadZeros:1; 638 UCHAR AnchorSupported:3; 639 UCHAR UnmapGranularityAlignmentValid:1; 640 UCHAR Reserved0:2; 641 UCHAR Reserved1[7]; 642 ULONGLONG OptimalUnmapGranularity; 643 ULONGLONG UnmapGranularityAlignment; 644 #if (NTDDI_VERSION >= NTDDI_WINBLUE) 645 ULONG MaxUnmapLbaCount; 646 ULONG MaxUnmapBlockDescriptorCount; 647 #endif 648 } DEVICE_LB_PROVISIONING_DESCRIPTOR, *PDEVICE_LB_PROVISIONING_DESCRIPTOR; 649 650 #define DEVICE_LB_PROVISIONING_DESCRIPTOR_V1_SIZE RTL_SIZEOF_THROUGH_FIELD(DEVICE_LB_PROVISIONING_DESCRIPTOR, UnmapGranularityAlignment) 651 652 typedef struct _DEVICE_POWER_DESCRIPTOR { 653 ULONG Version; 654 ULONG Size; 655 BOOLEAN DeviceAttentionSupported; 656 BOOLEAN AsynchronousNotificationSupported; 657 BOOLEAN IdlePowerManagementEnabled; 658 BOOLEAN D3ColdEnabled; 659 BOOLEAN D3ColdSupported; 660 BOOLEAN NoVerifyDuringIdlePower; 661 UCHAR Reserved[2]; 662 ULONG IdleTimeoutInMS; 663 } DEVICE_POWER_DESCRIPTOR, *PDEVICE_POWER_DESCRIPTOR; 664 665 typedef struct _DEVICE_COPY_OFFLOAD_DESCRIPTOR { 666 ULONG Version; 667 ULONG Size; 668 ULONG MaximumTokenLifetime; 669 ULONG DefaultTokenLifetime; 670 ULONGLONG MaximumTransferSize; 671 ULONGLONG OptimalTransferCount; 672 ULONG MaximumDataDescriptors; 673 ULONG MaximumTransferLengthPerDescriptor; 674 ULONG OptimalTransferLengthPerDescriptor; 675 USHORT OptimalTransferLengthGranularity; 676 UCHAR Reserved[2]; 677 } DEVICE_COPY_OFFLOAD_DESCRIPTOR, *PDEVICE_COPY_OFFLOAD_DESCRIPTOR; 678 679 typedef _Struct_size_bytes_(Size) struct _STORAGE_DEVICE_IO_CAPABILITY_DESCRIPTOR { 680 ULONG Version; 681 ULONG Size; 682 ULONG LunMaxIoCount; 683 ULONG AdapterMaxIoCount; 684 } STORAGE_DEVICE_IO_CAPABILITY_DESCRIPTOR, *PSTORAGE_DEVICE_IO_CAPABILITY_DESCRIPTOR; 685 686 typedef enum _STORAGE_IDENTIFIER_CODE_SET { 687 StorageIdCodeSetReserved = 0, 688 StorageIdCodeSetBinary = 1, 689 StorageIdCodeSetAscii = 2, 690 StorageIdCodeSetUtf8 = 3 691 } STORAGE_IDENTIFIER_CODE_SET, *PSTORAGE_IDENTIFIER_CODE_SET; 692 693 typedef enum _STORAGE_IDENTIFIER_TYPE { 694 StorageIdTypeVendorSpecific = 0, 695 StorageIdTypeVendorId = 1, 696 StorageIdTypeEUI64 = 2, 697 StorageIdTypeFCPHName = 3, 698 StorageIdTypePortRelative = 4, 699 StorageIdTypeTargetPortGroup = 5, 700 StorageIdTypeLogicalUnitGroup = 6, 701 StorageIdTypeMD5LogicalUnitIdentifier = 7, 702 StorageIdTypeScsiNameString = 8 703 } STORAGE_IDENTIFIER_TYPE, *PSTORAGE_IDENTIFIER_TYPE; 704 705 typedef enum _STORAGE_ID_NAA_FORMAT { 706 StorageIdNAAFormatIEEEExtended = 2, 707 StorageIdNAAFormatIEEERegistered = 3, 708 StorageIdNAAFormatIEEEERegisteredExtended = 5 709 } STORAGE_ID_NAA_FORMAT, *PSTORAGE_ID_NAA_FORMAT; 710 711 typedef enum _STORAGE_ASSOCIATION_TYPE { 712 StorageIdAssocDevice = 0, 713 StorageIdAssocPort = 1, 714 StorageIdAssocTarget = 2 715 } STORAGE_ASSOCIATION_TYPE, *PSTORAGE_ASSOCIATION_TYPE; 716 717 typedef struct _STORAGE_IDENTIFIER { 718 STORAGE_IDENTIFIER_CODE_SET CodeSet; 719 STORAGE_IDENTIFIER_TYPE Type; 720 USHORT IdentifierSize; 721 USHORT NextOffset; 722 STORAGE_ASSOCIATION_TYPE Association; 723 UCHAR Identifier[1]; 724 } STORAGE_IDENTIFIER, *PSTORAGE_IDENTIFIER; 725 726 typedef _Struct_size_bytes_(Size) struct _STORAGE_DEVICE_ID_DESCRIPTOR { 727 ULONG Version; 728 ULONG Size; 729 ULONG NumberOfIdentifiers; 730 UCHAR Identifiers[1]; 731 } STORAGE_DEVICE_ID_DESCRIPTOR, *PSTORAGE_DEVICE_ID_DESCRIPTOR; 732 733 typedef struct _DEVICE_SEEK_PENALTY_DESCRIPTOR { 734 ULONG Version; 735 ULONG Size; 736 BOOLEAN IncursSeekPenalty; 737 } DEVICE_SEEK_PENALTY_DESCRIPTOR, *PDEVICE_SEEK_PENALTY_DESCRIPTOR; 738 739 typedef struct _DEVICE_WRITE_AGGREGATION_DESCRIPTOR { 740 ULONG Version; 741 ULONG Size; 742 BOOLEAN BenefitsFromWriteAggregation; 743 } DEVICE_WRITE_AGGREGATION_DESCRIPTOR, *PDEVICE_WRITE_AGGREGATION_DESCRIPTOR; 744 745 typedef struct _DEVICE_TRIM_DESCRIPTOR { 746 ULONG Version; 747 ULONG Size; 748 BOOLEAN TrimEnabled; 749 } DEVICE_TRIM_DESCRIPTOR, *PDEVICE_TRIM_DESCRIPTOR; 750 751 typedef ULONG DEVICE_DATA_MANAGEMENT_SET_ACTION; 752 753 #define DEVICE_DSM_FLAG_TRIM_NOT_FS_ALLOCATED 0x80000000 754 755 typedef struct _DEVICE_DATA_SET_RANGE { 756 LONGLONG StartingOffset; 757 ULONGLONG LengthInBytes; 758 } DEVICE_DATA_SET_RANGE, *PDEVICE_DATA_SET_RANGE; 759 760 typedef struct _DEVICE_MANAGE_DATA_SET_ATTRIBUTES { 761 ULONG Size; 762 DEVICE_DATA_MANAGEMENT_SET_ACTION Action; 763 ULONG Flags; 764 ULONG ParameterBlockOffset; 765 ULONG ParameterBlockLength; 766 ULONG DataSetRangesOffset; 767 ULONG DataSetRangesLength; 768 } DEVICE_MANAGE_DATA_SET_ATTRIBUTES, *PDEVICE_MANAGE_DATA_SET_ATTRIBUTES; 769 770 typedef struct _DEVICE_DSM_NOTIFICATION_PARAMETERS { 771 ULONG Size; 772 ULONG Flags; 773 ULONG NumFileTypeIDs; 774 GUID FileTypeID[1]; 775 } DEVICE_DSM_NOTIFICATION_PARAMETERS, *PDEVICE_DSM_NOTIFICATION_PARAMETERS; 776 777 typedef struct _STORAGE_GET_BC_PROPERTIES_OUTPUT { 778 ULONG MaximumRequestsPerPeriod; 779 ULONG MinimumPeriod; 780 ULONGLONG MaximumRequestSize; 781 ULONG EstimatedTimePerRequest; 782 ULONG NumOutStandingRequests; 783 ULONGLONG RequestSize; 784 } STORAGE_GET_BC_PROPERTIES_OUTPUT, *PSTORAGE_GET_BC_PROPERTIES_OUTPUT; 785 786 typedef struct _STORAGE_ALLOCATE_BC_STREAM_INPUT { 787 ULONG Version; 788 ULONG RequestsPerPeriod; 789 ULONG Period; 790 BOOLEAN RetryFailures; 791 BOOLEAN Discardable; 792 BOOLEAN Reserved1[2]; 793 ULONG AccessType; 794 ULONG AccessMode; 795 } STORAGE_ALLOCATE_BC_STREAM_INPUT, *PSTORAGE_ALLOCATE_BC_STREAM_INPUT; 796 797 typedef struct _STORAGE_ALLOCATE_BC_STREAM_OUTPUT { 798 ULONGLONG RequestSize; 799 ULONG NumOutStandingRequests; 800 } STORAGE_ALLOCATE_BC_STREAM_OUTPUT, *PSTORAGE_ALLOCATE_BC_STREAM_OUTPUT; 801 802 typedef struct _STORAGE_PRIORITY_HINT_SUPPORT { 803 ULONG SupportFlags; 804 } STORAGE_PRIORITY_HINT_SUPPORT, *PSTORAGE_PRIORITY_HINT_SUPPORT; 805 806 #ifdef _MSC_VER 807 #pragma warning(push) 808 #pragma warning(disable:4200) 809 #endif 810 811 #if defined(_MSC_EXTENSIONS) 812 813 typedef struct _STORAGE_MEDIA_SERIAL_NUMBER_DATA { 814 USHORT Reserved; 815 USHORT SerialNumberLength; 816 UCHAR SerialNumber[0]; 817 } STORAGE_MEDIA_SERIAL_NUMBER_DATA, *PSTORAGE_MEDIA_SERIAL_NUMBER_DATA; 818 819 typedef struct _PERSISTENT_RESERVE_COMMAND { 820 ULONG Version; 821 ULONG Size; 822 __MINGW_EXTENSION union { 823 struct { 824 UCHAR ServiceAction:5; 825 UCHAR Reserved1:3; 826 USHORT AllocationLength; 827 } PR_IN; 828 struct { 829 UCHAR ServiceAction:5; 830 UCHAR Reserved1:3; 831 UCHAR Type:4; 832 UCHAR Scope:4; 833 UCHAR ParameterList[0]; 834 } PR_OUT; 835 } DUMMYUNIONNAME; 836 } PERSISTENT_RESERVE_COMMAND, *PPERSISTENT_RESERVE_COMMAND; 837 838 #endif /* defined(_MSC_EXTENSIONS) */ 839 840 #ifdef _MSC_VER 841 #pragma warning(pop) /* disable:4200 */ 842 #endif 843 844 typedef _Struct_size_bytes_(Size) struct _STORAGE_READ_CAPACITY { 845 ULONG Version; 846 ULONG Size; 847 ULONG BlockLength; 848 LARGE_INTEGER NumberOfBlocks; 849 LARGE_INTEGER DiskLength; 850 } STORAGE_READ_CAPACITY, *PSTORAGE_READ_CAPACITY; 851 852 typedef enum _WRITE_CACHE_TYPE { 853 WriteCacheTypeUnknown, 854 WriteCacheTypeNone, 855 WriteCacheTypeWriteBack, 856 WriteCacheTypeWriteThrough 857 } WRITE_CACHE_TYPE; 858 859 typedef enum _WRITE_CACHE_ENABLE { 860 WriteCacheEnableUnknown, 861 WriteCacheDisabled, 862 WriteCacheEnabled 863 } WRITE_CACHE_ENABLE; 864 865 typedef enum _WRITE_CACHE_CHANGE { 866 WriteCacheChangeUnknown, 867 WriteCacheNotChangeable, 868 WriteCacheChangeable 869 } WRITE_CACHE_CHANGE; 870 871 typedef enum _WRITE_THROUGH { 872 WriteThroughUnknown, 873 WriteThroughNotSupported, 874 WriteThroughSupported 875 } WRITE_THROUGH; 876 877 typedef _Struct_size_bytes_(Size) struct _STORAGE_WRITE_CACHE_PROPERTY { 878 ULONG Version; 879 ULONG Size; 880 WRITE_CACHE_TYPE WriteCacheType; 881 WRITE_CACHE_ENABLE WriteCacheEnabled; 882 WRITE_CACHE_CHANGE WriteCacheChangeable; 883 WRITE_THROUGH WriteThroughSupported; 884 BOOLEAN FlushCacheSupported; 885 BOOLEAN UserDefinedPowerProtection; 886 BOOLEAN NVCacheEnabled; 887 } STORAGE_WRITE_CACHE_PROPERTY, *PSTORAGE_WRITE_CACHE_PROPERTY; 888 889 typedef struct _STORAGE_LB_PROVISIONING_MAP_RESOURCES { 890 ULONG Size; 891 ULONG Version; 892 UCHAR AvailableMappingResourcesValid:1; 893 UCHAR UsedMappingResourcesValid:1; 894 UCHAR Reserved0:6; 895 UCHAR Reserved1[3]; 896 UCHAR AvailableMappingResourcesScope:2; 897 UCHAR UsedMappingResourcesScope:2; 898 UCHAR Reserved2:4; 899 UCHAR Reserved3[3]; 900 ULONGLONG AvailableMappingResources; 901 ULONGLONG UsedMappingResources; 902 } STORAGE_LB_PROVISIONING_MAP_RESOURCES, *PSTORAGE_LB_PROVISIONING_MAP_RESOURCES; 903 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 916 typedef struct _DEVICE_DATA_SET_LB_PROVISIONING_STATE { 917 ULONG Size; 918 ULONG Version; 919 ULONGLONG SlabSizeInBytes; 920 ULONG SlabOffsetDeltaInBytes; 921 ULONG SlabAllocationBitMapBitCount; 922 ULONG SlabAllocationBitMapLength; 923 ULONG SlabAllocationBitMap[ANYSIZE_ARRAY]; 924 } DEVICE_DATA_SET_LB_PROVISIONING_STATE, *PDEVICE_DATA_SET_LB_PROVISIONING_STATE, 925 DEVICE_DSM_ALLOCATION_OUTPUT, *PDEVICE_DSM_ALLOCATION_OUTPUT; 926 927 #define DEVICE_DSM_ALLOCATION_OUTPUT_V1 (sizeof(DEVICE_DSM_ALLOCATION_OUTPUT)) 928 #define DEVICE_DATA_SET_LB_PROVISIONING_STATE_VERSION_V1 DEVICE_DSM_ALLOCATION_OUTPUT_V1 929 930 typedef struct _DEVICE_DATA_SET_LB_PROVISIONING_STATE_V2 { 931 ULONG Size; 932 ULONG Version; 933 ULONGLONG SlabSizeInBytes; 934 ULONGLONG SlabOffsetDeltaInBytes; 935 ULONG SlabAllocationBitMapBitCount; 936 ULONG SlabAllocationBitMapLength; 937 ULONG SlabAllocationBitMap[ANYSIZE_ARRAY]; 938 } DEVICE_DATA_SET_LB_PROVISIONING_STATE_V2, *PDEVICE_DATA_SET_LB_PROVISIONING_STATE_V2, 939 DEVICE_DSM_ALLOCATION_OUTPUT2, *PDEVICE_DSM_ALLOCATION_OUTPUT2; 940 941 #define DEVICE_DSM_ALLOCATION_OUTPUT_V2 (sizeof(DEVICE_DSM_ALLOCATION_OUTPUT2)) 942 #define DEVICE_DATA_SET_LB_PROVISIONING_STATE_VERSION_V2 DEVICE_DSM_ALLOCATION_OUTPUT_V2 943 944 #define DeviceDsmDefinition_Allocation {DeviceDsmAction_Allocation, \ 945 TRUE, \ 946 __alignof(DEVICE_DSM_ALLOCATION_PARAMETERS), \ 947 sizeof(DEVICE_DSM_ALLOCATION_PARAMETERS), \ 948 TRUE, \ 949 __alignof(DEVICE_DSM_ALLOCATION_OUTPUT2), \ 950 sizeof(DEVICE_DSM_ALLOCATION_OUTPUT2)} 951 952 #define DEVICE_DSM_FLAG_ALLOCATION_CONSOLIDATEABLE_ONLY 0x40000000 953 954 typedef struct _DEVICE_DATA_SET_LBP_STATE_PARAMETERS { 955 ULONG Version; 956 ULONG Size; 957 ULONG Flags; 958 ULONG OutputVersion; 959 } DEVICE_DATA_SET_LBP_STATE_PARAMETERS, *PDEVICE_DATA_SET_LBP_STATE_PARAMETERS, 960 DEVICE_DSM_ALLOCATION_PARAMETERS, *PDEVICE_DSM_ALLOCATION_PARAMETERS; 961 962 typedef struct _STORAGE_EVENT_NOTIFICATION { 963 ULONG Version; 964 ULONG Size; 965 ULONGLONG Events; 966 } STORAGE_EVENT_NOTIFICATION, *PSTORAGE_EVENT_NOTIFICATION; 967 968 #define STORAGE_EVENT_NOTIFICATION_VERSION_V1 1 969 970 #define STORAGE_EVENT_MEDIA_STATUS 0x0000000000000001 971 #define STORAGE_EVENT_DEVICE_STATUS 0x0000000000000002 972 #define STORAGE_EVENT_DEVICE_OPERATION 0x0000000000000004 973 #define STORAGE_EVENT_ALL (STORAGE_EVENT_MEDIA_STATUS | STORAGE_EVENT_DEVICE_STATUS | STORAGE_EVENT_DEVICE_OPERATION) 974 975 #define STORAGE_OFFLOAD_MAX_TOKEN_LENGTH 512 976 #define STORAGE_OFFLOAD_TOKEN_ID_LENGTH 0x1F8 977 #define STORAGE_OFFLOAD_TOKEN_TYPE_ZERO_DATA 0xFFFF0001 978 979 typedef struct _STORAGE_OFFLOAD_TOKEN { 980 UCHAR TokenType[4]; 981 UCHAR Reserved[2]; 982 UCHAR TokenIdLength[2]; 983 union { 984 struct { 985 UCHAR Reserved2[STORAGE_OFFLOAD_TOKEN_ID_LENGTH]; 986 } StorageOffloadZeroDataToken; 987 UCHAR Token[STORAGE_OFFLOAD_TOKEN_ID_LENGTH]; 988 } DUMMYUNIONNAME; 989 } STORAGE_OFFLOAD_TOKEN, *PSTORAGE_OFFLOAD_TOKEN; 990 991 #define MAKE_ZERO_TOKEN(T) ( \ 992 ((PSTORAGE_OFFLOAD_TOKEN)T)->TokenType[0] = 0xFF, \ 993 ((PSTORAGE_OFFLOAD_TOKEN)T)->TokenType[1] = 0xFF, \ 994 ((PSTORAGE_OFFLOAD_TOKEN)T)->TokenType[2] = 0x00, \ 995 ((PSTORAGE_OFFLOAD_TOKEN)T)->TokenType[3] = 0x01, \ 996 ((PSTORAGE_OFFLOAD_TOKEN)T)->TokenIdLength[0] = 0x01, \ 997 ((PSTORAGE_OFFLOAD_TOKEN)T)->TokenIdLength[1] = 0xF8 \ 998 ) 999 1000 #define IS_ZERO_TOKEN(T) ( \ 1001 (((PSTORAGE_OFFLOAD_TOKEN)T)->TokenType[0] == 0xFF && \ 1002 ((PSTORAGE_OFFLOAD_TOKEN)T)->TokenType[1] == 0xFF && \ 1003 ((PSTORAGE_OFFLOAD_TOKEN)T)->TokenType[2] == 0x00 && \ 1004 ((PSTORAGE_OFFLOAD_TOKEN)T)->TokenType[3] == 0x01 && \ 1005 ((PSTORAGE_OFFLOAD_TOKEN)T)->TokenIdLength[0] == 0x01 && \ 1006 ((PSTORAGE_OFFLOAD_TOKEN)T)->TokenIdLength[1] == 0xF8) \ 1007 ) 1008 1009 typedef struct _DEVICE_DSM_OFFLOAD_READ_PARAMETERS { 1010 ULONG Flags; 1011 ULONG TimeToLive; 1012 ULONG Reserved[2]; 1013 } DEVICE_DSM_OFFLOAD_READ_PARAMETERS, *PDEVICE_DSM_OFFLOAD_READ_PARAMETERS; 1014 1015 #define STORAGE_OFFLOAD_READ_RANGE_TRUNCATED 0x00000001 1016 1017 typedef struct _STORAGE_OFFLOAD_READ_OUTPUT { 1018 ULONG OffloadReadFlags; 1019 ULONG Reserved; 1020 ULONGLONG LengthProtected; 1021 ULONG TokenLength; 1022 STORAGE_OFFLOAD_TOKEN Token; 1023 } STORAGE_OFFLOAD_READ_OUTPUT, *PSTORAGE_OFFLOAD_READ_OUTPUT; 1024 1025 #define DeviceDsmDefinition_OffloadRead {DeviceDsmAction_OffloadRead, \ 1026 FALSE, \ 1027 __alignof(DEVICE_DSM_OFFLOAD_READ_PARAMETERS), \ 1028 sizeof(DEVICE_DSM_OFFLOAD_READ_PARAMETERS), \ 1029 FALSE, \ 1030 __alignof(STORAGE_OFFLOAD_READ_OUTPUT), \ 1031 sizeof(STORAGE_OFFLOAD_READ_OUTPUT)} 1032 1033 typedef struct _DEVICE_DSM_OFFLOAD_WRITE_PARAMETERS { 1034 ULONG Flags; 1035 ULONG Reserved; 1036 ULONGLONG TokenOffset; 1037 STORAGE_OFFLOAD_TOKEN Token; 1038 } DEVICE_DSM_OFFLOAD_WRITE_PARAMETERS, *PDEVICE_DSM_OFFLOAD_WRITE_PARAMETERS; 1039 1040 #define STORAGE_OFFLOAD_WRITE_RANGE_TRUNCATED 0x0001 1041 #define STORAGE_OFFLOAD_TOKEN_INVALID 0x0002 1042 1043 typedef struct _STORAGE_OFFLOAD_WRITE_OUTPUT { 1044 ULONG OffloadWriteFlags; 1045 ULONG Reserved; 1046 ULONGLONG LengthCopied; 1047 } STORAGE_OFFLOAD_WRITE_OUTPUT, *PSTORAGE_OFFLOAD_WRITE_OUTPUT; 1048 1049 #define DeviceDsmDefinition_OffloadWrite {DeviceDsmAction_OffloadWrite, \ 1050 FALSE, \ 1051 __alignof(DEVICE_DSM_OFFLOAD_WRITE_PARAMETERS), \ 1052 sizeof(DEVICE_DSM_OFFLOAD_WRITE_PARAMETERS), \ 1053 FALSE, \ 1054 __alignof(STORAGE_OFFLOAD_WRITE_OUTPUT), \ 1055 sizeof(STORAGE_OFFLOAD_WRITE_OUTPUT)} 1056 1057 1058 #define READ_COPY_NUMBER_KEY 0x52434e00 //'RCN' 1059 #define READ_COPY_NUMBER_BYPASS_CACHE_FLAG 0x00000100 1060 1061 #define IsKeyReadCopyNumber(_k) (((_k) & 0xFFFFFE00) == READ_COPY_NUMBER_KEY) 1062 1063 #define IsKeyReadCopyNumberBypassCache(_k) ((_k) & READ_COPY_NUMBER_BYPASS_CACHE_FLAG) 1064 #define SetReadCopyNumberBypassCacheToKey(_k) ((_k) |= READ_COPY_NUMBER_BYPASS_CACHE_FLAG) 1065 1066 #define ReadCopyNumberToKey(_c) (READ_COPY_NUMBER_KEY | (UCHAR)(_c)) 1067 #define ReadCopyNumberFromKey(_k) (UCHAR)((_k) & 0x000000FF) 1068 1069 typedef struct _STORAGE_IDLE_POWER { 1070 ULONG Version; 1071 ULONG Size; 1072 ULONG WakeCapableHint:1; 1073 ULONG D3ColdSupported:1; 1074 ULONG Reserved:30; 1075 ULONG D3IdleTimeout; 1076 } STORAGE_IDLE_POWER, *PSTORAGE_IDLE_POWER; 1077 1078 #ifdef __cplusplus 1079 } 1080 #endif 1081 1082 #endif /* _NTDDSTOR_H_ */ 1083