STORAGE_PROTOCOL_SPECIFIC_DATA structure (winioctl.h)

Describes protocol-specific device data, provided in the input and output buffer of an IOCTL_STORAGE_QUERY_PROPERTY request.

Syntax

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;

Members

ProtocolType

The protocol type. Values for this member are defined in the STORAGE_PROTOCOL_TYPE enumeration.

DataType

The protocol data type. Data types are defined in the STORAGE_PROTOCOL_NVME_DATA_TYPE and STORAGE_PROTOCOL_ATA_DATA_TYPE enumerations.

ProtocolDataRequestValue

The protocol data request value.

ProtocolDataRequestSubValue

The sub value of the protocol data request.

ProtocolDataOffset

The offset of the data buffer that is from the beginning of this structure. The typical value can be sizeof(STORAGE_PROTOCOL_SPECIFIC_DATA).

ProtocolDataLength

The length of the protocol data.

FixedProtocolReturnData

The returned data.

ProtocolDataRequestSubValue2

ProtocolDataRequestSubValue3

ProtocolDataRequestSubValue4

Remarks

When using IOCTL_STORAGE_QUERY_PROPERTY to retrieve protocol-specific information in the STORAGE_PROTOCOL_DATA_DESCRIPTOR, configure the STORAGE_PROPERTY_QUERY structure as follows:

  • Allocate a buffer that can contains both a STORAGE_PROPERTY_QUERY and a STORAGE_PROTOCOL_SPECIFIC_DATA structure.
  • Set the PropertyID field to StorageAdapterProtocolSpecificProperty or StorageDeviceProtocolSpecificProperty for a controller or device/namespace request, respectively.
  • Set the QueryType field to PropertyStandardQuery.
  • Fill the STORAGE_PROTOCOL_SPECIFIC_DATA structure with the desired values. The start of the STORAGE_PROTOCOL_SPECIFIC_DATA is the AdditionalParameters field of STORAGE_PROPERTY_QUERY.
To specify a type of NVMe protocol-specific information, configure the STORAGE_PROTOCOL_SPECIFIC_DATA structure as follows:
  • Set the ProtocolType field to ProtocolTypeNVMe.
  • Set the DataType field to an enumeration value defined by STORAGE_PROTOCOL_NVME_DATA_TYPE:
    • Use NVMeDataTypeIdentify to get Identify Controller data or Identify Namespace data.
    • Use NVMeDataTypeLogPage to get log pages (including SMART/health data).
    • Use NVMeDataTypeFeature to get features of the NVMe drive.
To specify a type of ATA protocol-specific information, configure the STORAGE_PROTOCOL_SPECIFIC_DATA structure as follows:
  • Set the ProtocolType field to ProtocolTypeAta.
  • Set the DataType field to an enumeration value defined by STORAGE_PROTOCOL_ATA_DATA_TYPE:
    • Use AtaDataTypeIdentify to identify the ATA drive.
    • Use AtaDataTypeLogPage to get log pages from the ATA drive.

Requirements

Requirement Value
Minimum supported client Windows 10
Minimum supported server Windows Server 2016
Header winioctl.h (include Windows.h)

See also

IOCTL_STORAGE_QUERY_PROPERTY

STORAGE_PROPERTY_QUERY