headers: Add new names in winioctl.h

Signed-off-by: Biswapriyo Nath <nathbappai@gmail.com>
Signed-off-by: LIU Hao <lh_mouse@126.com>
diff --git a/mingw-w64-headers/include/winioctl.h b/mingw-w64-headers/include/winioctl.h
index 68982c7..d282d25 100644
--- a/mingw-w64-headers/include/winioctl.h
+++ b/mingw-w64-headers/include/winioctl.h
@@ -19,7 +19,17 @@
 DEFINE_GUID(GUID_DEVINTERFACE_FLOPPY,0x53f56311,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b);
 DEFINE_GUID(GUID_DEVINTERFACE_CDCHANGER,0x53f56312,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b);
 DEFINE_GUID(GUID_DEVINTERFACE_STORAGEPORT,0x2accfe60,0xc130,0x11d2,0xb0,0x82,0x00,0xa0,0xc9,0x1e,0xfb,0x8b);
+DEFINE_GUID(GUID_DEVINTERFACE_VMLUN,0x6f416619,0x9f29,0x42a5,0xb2,0x0b,0x37,0xe2,0x19,0xca,0x02,0xb0);
+DEFINE_GUID(GUID_DEVINTERFACE_SES,0x1790c9ec,0x47d5,0x4df3,0xb5,0xaf,0x9a,0xdf,0x3c,0xf2,0x3e,0x48);
+DEFINE_GUID(GUID_DEVINTERFACE_ZNSDISK,0xb87941c5,0xffdb,0x43c7,0xb6,0xb1,0x20,0xb6,0x32,0xf0,0xb1,0x09);
+#define WDI_STORAGE_PREDICT_FAILURE_DPS_GUID {0xe9f2d03a,0x747c,0x41c2,{0xbb,0x9a,0x02,0xc6,0x2b,0x6d,0x5f,0xcb}};
+
+DEFINE_GUID(GUID_DEVINTERFACE_SERVICE_VOLUME,0x6ead3d82,0x25ec,0x46bc,0xb7,0xfd,0xc1,0xf0,0xdf,0x8f,0x50,0x37);
 DEFINE_GUID(GUID_DEVINTERFACE_HIDDEN_VOLUME,0x7f108a28,0x9833,0x4b3b,0xb7,0x80,0x2c,0x6b,0x5f,0xa5,0xc0,0x62);
+DEFINE_GUID(GUID_DEVINTERFACE_UNIFIED_ACCESS_RPMB,0x27447c21,0xbcc3,0x4d07,0xa0,0x5b,0xa3,0x39,0x5b,0xb4,0xee,0xe7);
+DEFINE_GUID(GUID_DEVINTERFACE_SCM_PHYSICAL_DEVICE,0x4283609d,0x4dc2,0x43be,0xbb,0xb4,0x4f,0x15,0xdf,0xce,0x2c,0x61);
+DEFINE_GUID(GUID_SCM_PD_HEALTH_NOTIFICATION,0x9da2d386,0x72f5,0x4ee3,0x81,0x55,0xec,0xa0,0x67,0x8e,0x3b,0x6);
+DEFINE_GUID(GUID_SCM_PD_PASSTHROUGH_INVDIMM,0x4309ac30,0x0d11,0x11e4,0x91,0x91,0x08,0x00,0x20,0x0c,0x9a,0x66);
 DEFINE_GUID(GUID_DEVINTERFACE_COMPORT,0x86e0d1e0,0x8089,0x11d0,0x9c,0xe4,0x08,0x00,0x3e,0x30,0x1f,0x73);
 DEFINE_GUID(GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR,0x4D36E978,0xE325,0x11CE,0xBF,0xC1,0x08,0x00,0x2B,0xE1,0x03,0x18);
 
@@ -38,6 +48,23 @@
 #define GUID_SERENUM_BUS_ENUMERATOR GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR
 #endif /* DEFINE_GUID */
 
+#ifdef DEFINE_DEVPROPKEY
+
+#ifndef __WRAPPED__
+#define __WRAPPED__
+#endif
+
+DEFINE_DEVPROPKEY(DEVPKEY_Storage_Portable,0x4d1ebee8,0x803,0x4774,0x98,0x42,0xb7,0x7d,0xb5,0x2,0x65,0xe9,2);
+DEFINE_DEVPROPKEY(DEVPKEY_Storage_Removable_Media,0x4d1ebee8,0x803,0x4774,0x98,0x42,0xb7,0x7d,0xb5,0x2,0x65,0xe9,3);
+DEFINE_DEVPROPKEY(DEVPKEY_Storage_System_Critical,0x4d1ebee8,0x803,0x4774,0x98,0x42,0xb7,0x7d,0xb5,0x2,0x65,0xe9,4);
+DEFINE_DEVPROPKEY(DEVPKEY_Storage_Disk_Number,0x4d1ebee8,0x803,0x4774,0x98,0x42,0xb7,0x7d,0xb5,0x2,0x65,0xe9,5);
+DEFINE_DEVPROPKEY(DEVPKEY_Storage_Partition_Number,0x4d1ebee8,0x803,0x4774,0x98,0x42,0xb7,0x7d,0xb5,0x2,0x65,0xe9,6);
+DEFINE_DEVPROPKEY(DEVPKEY_Storage_Mbr_Type,0x4d1ebee8,0x803,0x4774,0x98,0x42,0xb7,0x7d,0xb5,0x2,0x65,0xe9,7);
+DEFINE_DEVPROPKEY(DEVPKEY_Storage_Gpt_Type,0x4d1ebee8,0x803,0x4774,0x98,0x42,0xb7,0x7d,0xb5,0x2,0x65,0xe9,8);
+DEFINE_DEVPROPKEY(DEVPKEY_Storage_Gpt_Name,0x4d1ebee8,0x803,0x4774,0x98,0x42,0xb7,0x7d,0xb5,0x2,0x65,0xe9,9);
+
+#endif /* DEFINE_DEVPROPKEY */
+
 #ifndef _WINIOCTL_
 #define _WINIOCTL_
 
@@ -133,10 +160,15 @@
 #define FILE_DEVICE_HOLOGRAPHIC 0x0000005b
 #define FILE_DEVICE_SDFXHCI 0x0000005c
 #define FILE_DEVICE_UCMUCSI 0x0000005d
+#define FILE_DEVICE_PRM 0x0000005e
+#define FILE_DEVICE_EVENT_COLLECTOR 0x0000005f
+#define FILE_DEVICE_USB4 0x00000060
+#define FILE_DEVICE_SOUNDWIRE 0x00000061
 
 #define CTL_CODE(DeviceType,Function,Method,Access) (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
 
 #define DEVICE_TYPE_FROM_CTL_CODE(ctrlCode) (((DWORD)(ctrlCode & 0xffff0000)) >> 16)
+#define METHOD_FROM_CTL_CODE(ctrlCode) ((DWORD)(ctrlCode & 3))
 
 #define METHOD_BUFFERED 0
 #define METHOD_IN_DIRECT 1
@@ -189,17 +221,59 @@
 #define IOCTL_STORAGE_PERSISTENT_RESERVE_OUT CTL_CODE(IOCTL_STORAGE_BASE, 0x0407, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
 
 #define IOCTL_STORAGE_GET_DEVICE_NUMBER CTL_CODE(IOCTL_STORAGE_BASE,0x0420,METHOD_BUFFERED,FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_GET_DEVICE_NUMBER_EX CTL_CODE(IOCTL_STORAGE_BASE,0x0421,METHOD_BUFFERED,FILE_ANY_ACCESS)
 #define IOCTL_STORAGE_PREDICT_FAILURE CTL_CODE(IOCTL_STORAGE_BASE,0x0440,METHOD_BUFFERED,FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_FAILURE_PREDICTION_CONFIG CTL_CODE(IOCTL_STORAGE_BASE,0x0441,METHOD_BUFFERED,FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_GET_COUNTERS CTL_CODE(IOCTL_STORAGE_BASE,0x442,METHOD_BUFFERED,FILE_ANY_ACCESS)
 #define IOCTL_STORAGE_READ_CAPACITY CTL_CODE(IOCTL_STORAGE_BASE,0x0450,METHOD_BUFFERED,FILE_READ_ACCESS)
 
+#define IOCTL_STORAGE_GET_DEVICE_TELEMETRY CTL_CODE(IOCTL_STORAGE_BASE, 0x0470, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_STORAGE_DEVICE_TELEMETRY_NOTIFY CTL_CODE(IOCTL_STORAGE_BASE, 0x0471, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_STORAGE_DEVICE_TELEMETRY_QUERY_CAPS CTL_CODE(IOCTL_STORAGE_BASE, 0x0472, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_STORAGE_GET_DEVICE_TELEMETRY_RAW CTL_CODE(IOCTL_STORAGE_BASE, 0x0473, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_STORAGE_SET_TEMPERATURE_THRESHOLD CTL_CODE(IOCTL_STORAGE_BASE, 0x0480, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_STORAGE_PROTOCOL_COMMAND CTL_CODE(IOCTL_STORAGE_BASE, 0x04F0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_STORAGE_SET_PROPERTY CTL_CODE(IOCTL_STORAGE_BASE, 0x04FF, METHOD_BUFFERED, FILE_WRITE_ACCESS)
+#define IOCTL_STORAGE_QUERY_PROPERTY CTL_CODE(IOCTL_STORAGE_BASE, 0x0500, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES CTL_CODE(IOCTL_STORAGE_BASE, 0x0501, METHOD_BUFFERED, FILE_WRITE_ACCESS)
+#define IOCTL_STORAGE_GET_LB_PROVISIONING_MAP_RESOURCES CTL_CODE(IOCTL_STORAGE_BASE, 0x0502, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_STORAGE_REINITIALIZE_MEDIA CTL_CODE(IOCTL_STORAGE_BASE, 0x0590, METHOD_BUFFERED, FILE_WRITE_ACCESS)
+
 #define IOCTL_STORAGE_GET_BC_PROPERTIES CTL_CODE(IOCTL_STORAGE_BASE, 0x0600, METHOD_BUFFERED, FILE_READ_ACCESS)
 #define IOCTL_STORAGE_ALLOCATE_BC_STREAM CTL_CODE(IOCTL_STORAGE_BASE, 0x0601, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
 #define IOCTL_STORAGE_FREE_BC_STREAM CTL_CODE(IOCTL_STORAGE_BASE, 0x0602, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
 #define IOCTL_STORAGE_CHECK_PRIORITY_HINT_SUPPORT CTL_CODE(IOCTL_STORAGE_BASE, 0x0620, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
+#define IOCTL_STORAGE_START_DATA_INTEGRITY_CHECK CTL_CODE(IOCTL_STORAGE_BASE, 0x0621, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_STORAGE_STOP_DATA_INTEGRITY_CHECK CTL_CODE(IOCTL_STORAGE_BASE, 0x0622, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
 #define OBSOLETE_IOCTL_STORAGE_RESET_BUS CTL_CODE(IOCTL_STORAGE_BASE,0x0400,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
 #define OBSOLETE_IOCTL_STORAGE_RESET_DEVICE CTL_CODE(IOCTL_STORAGE_BASE,0x0401,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
 
+#define IOCTL_STORAGE_FIRMWARE_GET_INFO CTL_CODE(IOCTL_STORAGE_BASE, 0x0700, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_FIRMWARE_DOWNLOAD CTL_CODE(IOCTL_STORAGE_BASE, 0x0701, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_STORAGE_FIRMWARE_ACTIVATE CTL_CODE(IOCTL_STORAGE_BASE, 0x0702, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_STORAGE_ENABLE_IDLE_POWER CTL_CODE(IOCTL_STORAGE_BASE, 0x0720, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_GET_IDLE_POWERUP_REASON CTL_CODE(IOCTL_STORAGE_BASE, 0x0721, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_STORAGE_POWER_ACTIVE CTL_CODE(IOCTL_STORAGE_BASE, 0x0722, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_POWER_IDLE CTL_CODE(IOCTL_STORAGE_BASE, 0x0723, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_STORAGE_EVENT_NOTIFICATION CTL_CODE(IOCTL_STORAGE_BASE, 0x0724, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_DEVICE_POWER_CAP CTL_CODE(IOCTL_STORAGE_BASE, 0x0725, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_RPMB_COMMAND CTL_CODE(IOCTL_STORAGE_BASE, 0x0726, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_ATTRIBUTE_MANAGEMENT CTL_CODE(IOCTL_STORAGE_BASE, 0x0727, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_STORAGE_DIAGNOSTIC CTL_CODE(IOCTL_STORAGE_BASE, 0x0728, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_GET_PHYSICAL_ELEMENT_STATUS CTL_CODE(IOCTL_STORAGE_BASE, 0x0729, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_REMOVE_ELEMENT_AND_TRUNCATE CTL_CODE(IOCTL_STORAGE_BASE, 0x0730, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_GET_DEVICE_INTERNAL_LOG CTL_CODE(IOCTL_STORAGE_BASE, 0x0731, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
 typedef struct _STORAGE_READ_CAPACITY {
   ULONG Version;
   ULONG Size;
@@ -320,6 +394,27 @@
     DWORD PartitionNumber;
   } STORAGE_DEVICE_NUMBER,*PSTORAGE_DEVICE_NUMBER;
 
+  typedef struct _STORAGE_DEVICE_NUMBERS {
+    DWORD Version;
+    DWORD Size;
+    DWORD NumberOfDevices;
+    STORAGE_DEVICE_NUMBER Devices[ANYSIZE_ARRAY];
+  } STORAGE_DEVICE_NUMBERS,*PSTORAGE_DEVICE_NUMBERS;
+
+#define STORAGE_DEVICE_FLAGS_RANDOM_DEVICEGUID_REASON_CONFLICT 0x1
+#define STORAGE_DEVICE_FLAGS_RANDOM_DEVICEGUID_REASON_NOHWID 0x2
+#define STORAGE_DEVICE_FLAGS_PAGE_83_DEVICEGUID 0x4
+
+  typedef struct _STORAGE_DEVICE_NUMBER_EX {
+    DWORD Version;
+    DWORD Size;
+    DWORD Flags;
+    DEVICE_TYPE DeviceType;
+    DWORD DeviceNumber;
+    GUID DeviceGuid;
+    DWORD PartitionNumber;
+  } STORAGE_DEVICE_NUMBER_EX,*PSTORAGE_DEVICE_NUMBER_EX;
+
   typedef struct _STORAGE_BUS_RESET_REQUEST {
     BYTE PathId;
   } STORAGE_BUS_RESET_REQUEST,*PSTORAGE_BUS_RESET_REQUEST;
@@ -368,7 +463,7 @@
 #define TAPE_RESET_STATISTICS __MSABI_LONG(2)
 
   typedef enum _STORAGE_MEDIA_TYPE {
-    DDS_4mm	= 0x20,
+    DDS_4mm = 0x20,
     MiniQic,
     Travan,
     QIC,
@@ -470,6 +565,8 @@
     BusTypeMaxReserved         = 0x7F 
   } STORAGE_BUS_TYPE, *PSTORAGE_BUS_TYPE;
 
+#define SupportsDeviceSharing(BusType) ((BusType == BusTypeScsi) || (BusType == BusTypeFibre) || (BusType == BusTypeiScsi) || (BusType == BusTypeSas) || (BusType == BusTypeSpaces))
+
   typedef struct _DEVICE_MEDIA_INFO {
     union {
       struct {
@@ -516,6 +613,16 @@
     BYTE VendorSpecific[512];
   } STORAGE_PREDICT_FAILURE,*PSTORAGE_PREDICT_FAILURE;
 
+  typedef struct _STORAGE_FAILURE_PREDICTION_CONFIG {
+    DWORD Version;
+    DWORD Size;
+    BOOLEAN Set;
+    BOOLEAN Enabled;
+    WORD Reserved;
+  } STORAGE_FAILURE_PREDICTION_CONFIG,*PSTORAGE_FAILURE_PREDICTION_CONFIG;
+
+#define STORAGE_FAILURE_PREDICTION_CONFIG_V1 1
+
 #ifdef __cplusplus
 }
 #endif
@@ -1871,16 +1978,42 @@
 } STORAGE_DESCRIPTOR_HEADER, *PSTORAGE_DESCRIPTOR_HEADER;
 
 typedef enum _STORAGE_PROPERTY_ID {
-  StorageDeviceProperty              = 0,
-  StorageAdapterProperty             = 1,
-  StorageDeviceIdProperty            = 2,
-  StorageDeviceUniqueIdProperty      = 3,
-  StorageDeviceWriteCacheProperty    = 4,
-  StorageMiniportProperty            = 5,
-  StorageAccessAlignmentProperty     = 6,
-  StorageDeviceSeekPenaltyProperty   = 7,
-  StorageDeviceTrimProperty          = 8,
-  StorageDeviceWriteAggregationProperty = 9
+  StorageDeviceProperty = 0,
+  StorageAdapterProperty,
+  StorageDeviceIdProperty,
+  StorageDeviceUniqueIdProperty,
+  StorageDeviceWriteCacheProperty,
+  StorageMiniportProperty,
+  StorageAccessAlignmentProperty,
+  StorageDeviceSeekPenaltyProperty,
+  StorageDeviceTrimProperty,
+  StorageDeviceWriteAggregationProperty,
+  StorageDeviceDeviceTelemetryProperty,
+  StorageDeviceLBProvisioningProperty,
+  StorageDevicePowerProperty,
+  StorageDeviceCopyOffloadProperty,
+  StorageDeviceResiliencyProperty,
+  StorageDeviceMediumProductType,
+  StorageAdapterRpmbProperty,
+  StorageAdapterCryptoProperty,
+  StorageDeviceIoCapabilityProperty = 48,
+  StorageAdapterProtocolSpecificProperty,
+  StorageDeviceProtocolSpecificProperty,
+  StorageAdapterTemperatureProperty,
+  StorageDeviceTemperatureProperty,
+  StorageAdapterPhysicalTopologyProperty,
+  StorageDevicePhysicalTopologyProperty,
+  StorageDeviceAttributesProperty,
+  StorageDeviceManagementStatus,
+  StorageAdapterSerialNumberProperty,
+  StorageDeviceLocationProperty,
+  StorageDeviceNumaProperty,
+  StorageDeviceZonedDeviceProperty,
+  StorageDeviceUnsafeShutdownCount,
+  StorageDeviceEnduranceProperty,
+  StorageDeviceLedStateProperty,
+  StorageDeviceSelfEncryptionProperty = 64,
+  StorageFruIdProperty
 } STORAGE_PROPERTY_ID, *PSTORAGE_PROPERTY_ID;
 
 typedef enum _STORAGE_QUERY_TYPE {
@@ -1890,12 +2023,24 @@
   PropertyQueryMaxDefined   = 3 
 } STORAGE_QUERY_TYPE, *PSTORAGE_QUERY_TYPE;
 
+typedef enum _STORAGE_SET_TYPE {
+  PropertyStandardSet = 0,
+  PropertyExistsSet,
+  PropertySetMaxDefined
+} STORAGE_SET_TYPE, *PSTORAGE_SET_TYPE;
+
 typedef struct _STORAGE_PROPERTY_QUERY {
   STORAGE_PROPERTY_ID PropertyId;
   STORAGE_QUERY_TYPE  QueryType;
   BYTE                AdditionalParameters[1];
 } STORAGE_PROPERTY_QUERY, *PSTORAGE_PROPERTY_QUERY;
 
+typedef struct _STORAGE_PROPERTY_SET {
+  STORAGE_PROPERTY_ID PropertyId;
+  STORAGE_SET_TYPE SetType;
+  BYTE AdditionalParameters[1];
+} STORAGE_PROPERTY_SET, *PSTORAGE_PROPERTY_SET;
+
 typedef struct _STORAGE_DEVICE_DESCRIPTOR {
   DWORD            Version;
   DWORD            Size;
@@ -1925,8 +2070,30 @@
   BYTE    BusType;
   WORD    BusMajorVersion;
   WORD    BusMinorVersion;
+#if NTDDI_VERSION >= NTDDI_WIN8
+  BYTE SrbType;
+  BYTE AddressType;
+#endif
 } STORAGE_ADAPTER_DESCRIPTOR, *PSTORAGE_ADAPTER_DESCRIPTOR;
 
+#if NTDDI_VERSION >= NTDDI_WIN8
+
+#define NO_SRBTYPE_ADAPTER_DESCRIPTOR_SIZE UFIELD_OFFSET(STORAGE_ADAPTER_DESCRIPTOR, SrbType)
+
+#ifndef SRB_TYPE_SCSI_REQUEST_BLOCK
+#define SRB_TYPE_SCSI_REQUEST_BLOCK 0
+#endif
+
+#ifndef SRB_TYPE_STORAGE_REQUEST_BLOCK
+#define SRB_TYPE_STORAGE_REQUEST_BLOCK 1
+#endif
+
+#ifndef STORAGE_ADDRESS_TYPE_BTL8
+#define STORAGE_ADDRESS_TYPE_BTL8 0
+#endif
+
+#endif
+
 typedef struct _STORAGE_DEVICE_ID_DESCRIPTOR {
   DWORD Version;
   DWORD Size;
@@ -2308,9 +2475,14 @@
 } STORAGE_WRITE_CACHE_PROPERTY, *PSTORAGE_WRITE_CACHE_PROPERTY;
 
 typedef enum _STORAGE_PORT_CODE_SET {
-  StoragePortCodeSetReserved   = 0,
-  StoragePortCodeSetStorport   = 1,
-  StoragePortCodeSetSCSIport   = 2 
+  StoragePortCodeSetReserved = 0,
+  StoragePortCodeSetStorport = 1,
+  StoragePortCodeSetSCSIport = 2,
+  StoragePortCodeSetSpaceport = 3,
+  StoragePortCodeSetATAport = 4,
+  StoragePortCodeSetUSBport = 5,
+  StoragePortCodeSetSBP2port = 6,
+  StoragePortCodeSetSDport = 7
 } STORAGE_PORT_CODE_SET, *PSTORAGE_PORT_CODE_SET;
 
 typedef struct _STORAGE_MINIPORT_DESCRIPTOR {
@@ -2372,6 +2544,13 @@
   DWORD BytesPerPhysicalSector;
   DWORD BytesOffsetForSectorAlignment;
 } STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR, *PSTORAGE_ACCESS_ALIGNMENT_DESCRIPTOR;
+
+typedef struct _STORAGE_MEDIUM_PRODUCT_TYPE_DESCRIPTOR {
+  DWORD Version;
+  DWORD Size;
+  DWORD MediumProductType;
+} STORAGE_MEDIUM_PRODUCT_TYPE_DESCRIPTOR, *PSTORAGE_MEDIUM_PRODUCT_TYPE_DESCRIPTOR;
+
 #endif /*(_WIN32_WINNT >= 0x0600)*/
 
 typedef struct _DEVICE_SEEK_PENALTY_DESCRIPTOR {
@@ -2392,6 +2571,268 @@
   BOOLEAN TrimEnabled;
 } DEVICE_TRIM_DESCRIPTOR, *PDEVICE_TRIM_DESCRIPTOR;
 
+typedef struct _DEVICE_LB_PROVISIONING_DESCRIPTOR {
+  DWORD Version;
+  DWORD Size;
+  BYTE ThinProvisioningEnabled : 1;
+  BYTE ThinProvisioningReadZeros : 1;
+  BYTE AnchorSupported : 3;
+  BYTE UnmapGranularityAlignmentValid : 1;
+  BYTE GetFreeSpaceSupported : 1;
+  BYTE MapSupported : 1;
+  BYTE Reserved1[7];
+  DWORDLONG OptimalUnmapGranularity;
+  DWORDLONG UnmapGranularityAlignment;
+#if NTDDI_VERSION >= NTDDI_WINBLUE
+  DWORD MaxUnmapLbaCount;
+  DWORD MaxUnmapBlockDescriptorCount;
+#endif
+} DEVICE_LB_PROVISIONING_DESCRIPTOR, *PDEVICE_LB_PROVISIONING_DESCRIPTOR;
+
+#define DEVICE_LB_PROVISIONING_DESCRIPTOR_V1_SIZE RTL_SIZEOF_THROUGH_FIELD(DEVICE_LB_PROVISIONING_DESCRIPTOR, UnmapGranularityAlignment)
+
+typedef struct _STORAGE_LB_PROVISIONING_MAP_RESOURCES {
+  DWORD Size;
+  DWORD Version;
+  BYTE AvailableMappingResourcesValid : 1;
+  BYTE UsedMappingResourcesValid : 1;
+  BYTE Reserved0 : 6;
+  BYTE Reserved1[3];
+  BYTE AvailableMappingResourcesScope : 2;
+  BYTE UsedMappingResourcesScope : 2;
+  BYTE Reserved2 : 4;
+  BYTE Reserved3[3];
+  DWORDLONG AvailableMappingResources;
+  DWORDLONG UsedMappingResources;
+} STORAGE_LB_PROVISIONING_MAP_RESOURCES, *PSTORAGE_LB_PROVISIONING_MAP_RESOURCES;
+
+typedef struct _DEVICE_POWER_DESCRIPTOR {
+  DWORD Version;
+  DWORD Size;
+  BOOLEAN DeviceAttentionSupported;
+  BOOLEAN AsynchronousNotificationSupported;
+  BOOLEAN IdlePowerManagementEnabled;
+  BOOLEAN D3ColdEnabled;
+  BOOLEAN D3ColdSupported;
+  BOOLEAN NoVerifyDuringIdlePower;
+  BYTE Reserved[2];
+  DWORD IdleTimeoutInMS;
+} DEVICE_POWER_DESCRIPTOR, *PDEVICE_POWER_DESCRIPTOR;
+
+typedef struct _DEVICE_COPY_OFFLOAD_DESCRIPTOR {
+  DWORD Version;
+  DWORD Size;
+  DWORD MaximumTokenLifetime;
+  DWORD DefaultTokenLifetime;
+  DWORDLONG MaximumTransferSize;
+  DWORDLONG OptimalTransferCount;
+  DWORD MaximumDataDescriptors;
+  DWORD MaximumTransferLengthPerDescriptor;
+  DWORD OptimalTransferLengthPerDescriptor;
+  WORD OptimalTransferLengthGranularity;
+  BYTE Reserved[2];
+} DEVICE_COPY_OFFLOAD_DESCRIPTOR, *PDEVICE_COPY_OFFLOAD_DESCRIPTOR;
+
+typedef struct _STORAGE_DEVICE_RESILIENCY_DESCRIPTOR {
+  DWORD Version;
+  DWORD Size;
+  DWORD NameOffset;
+  DWORD NumberOfLogicalCopies;
+  DWORD NumberOfPhysicalCopies;
+  DWORD PhysicalDiskRedundancy;
+  DWORD NumberOfColumns;
+  DWORD Interleave;
+} STORAGE_DEVICE_RESILIENCY_DESCRIPTOR, *PSTORAGE_DEVICE_RESILIENCY_DESCRIPTOR;
+
+typedef enum _STORAGE_RPMB_FRAME_TYPE {
+  StorageRpmbFrameTypeUnknown = 0,
+  StorageRpmbFrameTypeStandard,
+  StorageRpmbFrameTypeMax
+} STORAGE_RPMB_FRAME_TYPE, *PSTORAGE_RPMB_FRAME_TYPE;
+
+#define STORAGE_RPMB_DESCRIPTOR_VERSION_1 1
+
+#define STORAGE_RPMB_MINIMUM_RELIABLE_WRITE_SIZE 512
+
+typedef struct _STORAGE_RPMB_DESCRIPTOR {
+  DWORD Version;
+  DWORD Size;
+  DWORD SizeInBytes;
+  DWORD MaxReliableWriteSizeInBytes;
+  STORAGE_RPMB_FRAME_TYPE FrameFormat;
+} STORAGE_RPMB_DESCRIPTOR, *PSTORAGE_RPMB_DESCRIPTOR;
+
+typedef enum _STORAGE_CRYPTO_ALGORITHM_ID {
+  StorageCryptoAlgorithmUnknown = 0,
+  StorageCryptoAlgorithmXTSAES = 1,
+  StorageCryptoAlgorithmBitlockerAESCBC,
+  StorageCryptoAlgorithmAESECB,
+  StorageCryptoAlgorithmESSIVAESCBC,
+  StorageCryptoAlgorithmMax
+} STORAGE_CRYPTO_ALGORITHM_ID, *PSTORAGE_CRYPTO_ALGORITHM_ID;
+
+typedef enum _STORAGE_CRYPTO_KEY_SIZE {
+  StorageCryptoKeySizeUnknown = 0,
+  StorageCryptoKeySize128Bits = 1,
+  StorageCryptoKeySize192Bits,
+  StorageCryptoKeySize256Bits,
+  StorageCryptoKeySize512Bits
+} STORAGE_CRYPTO_KEY_SIZE, *PSTORAGE_CRYPTO_KEY_SIZE;
+
+#define STORAGE_CRYPTO_CAPABILITY_VERSION_1 1
+
+typedef struct _STORAGE_CRYPTO_CAPABILITY {
+  DWORD Version;
+  DWORD Size;
+  DWORD CryptoCapabilityIndex;
+  STORAGE_CRYPTO_ALGORITHM_ID AlgorithmId;
+  STORAGE_CRYPTO_KEY_SIZE KeySize;
+  DWORD DataUnitSizeBitmask;
+} STORAGE_CRYPTO_CAPABILITY, *PSTORAGE_CRYPTO_CAPABILITY;
+
+#define STORAGE_CRYPTO_DESCRIPTOR_VERSION_1 1
+
+typedef struct _STORAGE_CRYPTO_DESCRIPTOR {
+  DWORD Version;
+  DWORD Size;
+  DWORD NumKeysSupported;
+  DWORD NumCryptoCapabilities;
+  STORAGE_CRYPTO_CAPABILITY CryptoCapabilities[ANYSIZE_ARRAY];
+} STORAGE_CRYPTO_DESCRIPTOR, *PSTORAGE_CRYPTO_DESCRIPTOR;
+
+#define STORAGE_TIER_NAME_LENGTH (256)
+#define STORAGE_TIER_DESCRIPTION_LENGTH (512)
+
+#define STORAGE_TIER_FLAG_NO_SEEK_PENALTY (0x00020000)
+#define STORAGE_TIER_FLAG_WRITE_BACK_CACHE (0x00200000)
+#define STORAGE_TIER_FLAG_READ_CACHE (0x00400000)
+#define STORAGE_TIER_FLAG_PARITY (0x00800000)
+#define STORAGE_TIER_FLAG_SMR (0x01000000)
+
+typedef enum _STORAGE_TIER_MEDIA_TYPE {
+  StorageTierMediaTypeUnspecified = 0,
+  StorageTierMediaTypeDisk = 1,
+  StorageTierMediaTypeSsd = 2,
+  StorageTierMediaTypeScm = 4,
+  StorageTierMediaTypeMax
+} STORAGE_TIER_MEDIA_TYPE, *PSTORAGE_TIER_MEDIA_TYPE;
+
+typedef enum _STORAGE_TIER_CLASS {
+  StorageTierClassUnspecified = 0,
+  StorageTierClassCapacity,
+  StorageTierClassPerformance,
+  StorageTierClassMax
+} STORAGE_TIER_CLASS, *PSTORAGE_TIER_CLASS;
+
+typedef struct _STORAGE_TIER {
+  GUID Id;
+  WCHAR Name[STORAGE_TIER_NAME_LENGTH];
+  WCHAR Description[STORAGE_TIER_NAME_LENGTH];
+  DWORDLONG Flags;
+  DWORDLONG ProvisionedCapacity;
+  STORAGE_TIER_MEDIA_TYPE MediaType;
+  STORAGE_TIER_CLASS Class;
+} STORAGE_TIER, *PSTORAGE_TIER;
+
+typedef struct _STORAGE_DEVICE_TIERING_DESCRIPTOR {
+  DWORD Version;
+  DWORD Size;
+  DWORD Flags;
+  DWORD TotalNumberOfTiers;
+  DWORD NumberOfTiersReturned;
+  STORAGE_TIER Tiers[ANYSIZE_ARRAY];
+} STORAGE_DEVICE_TIERING_DESCRIPTOR, *PSTORAGE_DEVICE_TIERING_DESCRIPTOR;
+
+typedef struct _STORAGE_DEVICE_FAULT_DOMAIN_DESCRIPTOR {
+  DWORD Version;
+  DWORD Size;
+  DWORD NumberOfFaultDomains;
+  GUID FaultDomainIds[ANYSIZE_ARRAY];
+} STORAGE_DEVICE_FAULT_DOMAIN_DESCRIPTOR, *PSTORAGE_DEVICE_FAULT_DOMAIN_DESCRIPTOR;
+
+typedef enum _STORAGE_PROTOCOL_TYPE {
+  ProtocolTypeUnknown = 0x00,
+  ProtocolTypeScsi,
+  ProtocolTypeAta,
+  ProtocolTypeNvme,
+  ProtocolTypeSd,
+  ProtocolTypeUfs,
+  ProtocolTypeProprietary = 0x7E,
+  ProtocolTypeMaxReserved = 0x7F
+} STORAGE_PROTOCOL_TYPE, *PSTORAGE_PROTOCOL_TYPE;
+
+typedef enum _STORAGE_PROTOCOL_NVME_DATA_TYPE {
+  NVMeDataTypeUnknown = 0,
+  NVMeDataTypeIdentify,
+  NVMeDataTypeLogPage,
+  NVMeDataTypeFeature
+} STORAGE_PROTOCOL_NVME_DATA_TYPE, *PSTORAGE_PROTOCOL_NVME_DATA_TYPE;
+
+typedef enum _STORAGE_PROTOCOL_ATA_DATA_TYPE {
+  AtaDataTypeUnknown = 0,
+  AtaDataTypeIdentify,
+  AtaDataTypeLogPage
+} STORAGE_PROTOCOL_ATA_DATA_TYPE, *PSTORAGE_PROTOCOL_ATA_DATA_TYPE;
+
+typedef enum _STORAGE_PROTOCOL_UFS_DATA_TYPE {
+  UfsDataTypeUnknown = 0,
+  UfsDataTypeQueryDescriptor,
+  UfsDataTypeQueryAttribute,
+  UfsDataTypeQueryFlag,
+  UfsDataTypeQueryDmeAttribute,
+  UfsDataTypeQueryDmePeerAttribute,
+  UfsDataTypeMax
+} STORAGE_PROTOCOL_UFS_DATA_TYPE, *PSTORAGE_PROTOCOL_UFS_DATA_TYPE;
+
+typedef union _STORAGE_PROTOCOL_DATA_SUBVALUE_GET_LOG_PAGE {
+  __C89_NAMELESS struct {
+    DWORD RetainAsynEvent : 1;
+    DWORD LogSpecificField : 4;
+    DWORD Reserved : 27;
+  };
+  DWORD AsUlong;
+} STORAGE_PROTOCOL_DATA_SUBVALUE_GET_LOG_PAGE, *PSTORAGE_PROTOCOL_DATA_SUBVALUE_GET_LOG_PAGE;
+
+typedef struct _STORAGE_PROTOCOL_SPECIFIC_DATA {
+  STORAGE_PROTOCOL_TYPE ProtocolType;
+  DWORD DataType;
+  DWORD ProtocolDataRequestValue;
+  DWORD ProtocolDataRequestSubValue;
+  DWORD ProtocolDataOffset;
+  DWORD ProtocolDataLength;
+  DWORD FixedProtocolReturnData;
+  DWORD ProtocolDataRequestSubValue2;
+  DWORD ProtocolDataRequestSubValue3;
+  DWORD ProtocolDataRequestSubValue4;
+} STORAGE_PROTOCOL_SPECIFIC_DATA, *PSTORAGE_PROTOCOL_SPECIFIC_DATA;
+
+typedef struct _STORAGE_PROTOCOL_SPECIFIC_DATA_EXT {
+  STORAGE_PROTOCOL_TYPE ProtocolType;
+  DWORD DataType;
+  DWORD ProtocolDataValue;
+  DWORD ProtocolDataSubValue;
+  DWORD ProtocolDataOffset;
+  DWORD ProtocolDataLength;
+  DWORD FixedProtocolReturnData;
+  DWORD ProtocolDataSubValue2;
+  DWORD ProtocolDataSubValue3;
+  DWORD ProtocolDataSubValue4;
+  DWORD ProtocolDataSubValue5;
+  DWORD Reserved[5];
+} STORAGE_PROTOCOL_SPECIFIC_DATA_EXT, *PSTORAGE_PROTOCOL_SPECIFIC_DATA_EXT;
+
+typedef struct _STORAGE_PROTOCOL_DATA_DESCRIPTOR {
+  DWORD Version;
+  DWORD Size;
+  STORAGE_PROTOCOL_SPECIFIC_DATA ProtocolSpecificData;
+} STORAGE_PROTOCOL_DATA_DESCRIPTOR, *PSTORAGE_PROTOCOL_DATA_DESCRIPTOR;
+
+typedef struct _STORAGE_PROTOCOL_DATA_DESCRIPTOR_EXT {
+  DWORD Version;
+  DWORD Size;
+  STORAGE_PROTOCOL_SPECIFIC_DATA_EXT ProtocolSpecificData;
+} STORAGE_PROTOCOL_DATA_DESCRIPTOR_EXT, *PSTORAGE_PROTOCOL_DATA_DESCRIPTOR_EXT;
+
 #if (_WIN32_WINNT >= 0x0601)
 typedef struct _REQUEST_OPLOCK_INPUT_BUFFER {
   WORD  StructureVersion;