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;