STORAGE_PROTOCOL_COMMAND 结构 (ntddstor.h)
此结构与 IOCTL_STORAGE_PROTOCOL_COMMAND 传递机制一起使用,该机制向存储设备发出特定于供应商的协议命令。
语法
typedef struct _STORAGE_PROTOCOL_COMMAND {
ULONG Version;
ULONG Length;
STORAGE_PROTOCOL_TYPE ProtocolType;
ULONG Flags;
ULONG ReturnStatus;
ULONG ErrorCode;
ULONG CommandLength;
ULONG ErrorInfoLength;
ULONG DataToDeviceTransferLength;
ULONG DataFromDeviceTransferLength;
ULONG TimeOutValue;
ULONG ErrorInfoOffset;
ULONG DataToDeviceBufferOffset;
ULONG DataFromDeviceBufferOffset;
ULONG CommandSpecific;
ULONG Reserved0;
ULONG FixedProtocolReturnData;
ULONG FixedProtocolReturnData2;
ULONG Reserved1[2];
UCHAR Command[ANYSIZE_ARRAY];
} STORAGE_PROTOCOL_COMMAND, *PSTORAGE_PROTOCOL_COMMAND;
成员
Version
此结构的版本。 将其设置为 STORAGE_PROTOCOL_STRUCTURE_VERSION。
Length
此结构的大小。 将此设置为 sizeof (STORAGE_PROTOCOL_COMMAND) 。
ProtocolType
协议类型。
Flags
为此请求设置的标志。 下面是有效的标志。
标志 | 描述 |
---|---|
STORAGE_PROTOCOL_COMMAND_FLAG_ADAPTER_REQUEST | 此标志指示以适配器而不是设备为目标的请求。 |
ReturnStatus
向存储设备发出的请求的状态。 在 Windows 10 中,可以返回的可能值包括:
状态值 | 说明 |
---|---|
STORAGE_PROTOCOL_STATUS_PENDING | 请求处于挂起状态。 |
STORAGE_PROTOCOL_STATUS_SUCCESS | 请求已成功完成。 |
STORAGE_PROTOCOL_STATUS_ERROR | 请求遇到错误。 |
STORAGE_PROTOCOL_STATUS_INVALID_REQUEST | 请求无效。 |
STORAGE_PROTOCOL_STATUS_NO_DEVICE | 设备无法发出请求。 |
STORAGE_PROTOCOL_STATUS_BUSY | 设备正忙于处理请求。 |
STORAGE_PROTOCOL_STATUS_DATA_OVERRUN | 设备在处理请求时遇到数据溢出。 |
STORAGE_PROTOCOL_STATUS_INSUFFICIENT_RESOURCES | 由于资源不足,设备无法完成请求。 |
STORAGE_PROTOCOL_STATUS_NOT_SUPPORTED | 不支持该请求。 |
ErrorCode
要为此请求返回的特定于总线的协议错误代码。 这是可选的。
CommandLength
命令的长度(以字节为单位)。 调用方必须将其设置为非零值。
ErrorInfoLength
ErrorCode 缓冲区的长度(以字节为单位)。 这是可选的,可以设置为 0。
DataToDeviceTransferLength
要传输到设备的缓冲区的大小。
DataFromDeviceTransferLength
要从设备传输的缓冲区大小。
TimeOutValue
指定设备在超时之前等待的时间。这是以秒为单位设置的。
ErrorInfoOffset
ErrorCode 缓冲区的偏移量。 这必须是指针对齐的。
DataToDeviceBufferOffset
要传输到设备的缓冲区的偏移量。 这必须是指针对齐的,并且仅用于 WRITE 请求。
DataFromDeviceBufferOffset
要从设备传输的缓冲区的偏移量。 这必须是指针对齐的,并且仅用于 READ 请求。
CommandSpecific
随 Command 一起传递的其他特定于 命令的数据。 这取决于驱动程序中的命令,并且是可选的。
Reserved0
保留供将来使用。
FixedProtocolReturnData
返回数据。 这是可选的。 某些协议(如 NVMe)可能会从完成队列输入) 返回少量 (DWORD0 的数据,而无需单独的设备数据传输。
FixedProtocolReturnData2
返回 data2。 这是可选的。 某些协议(如 NVMe)可能会从完成队列输入) 返回少量数据 (DWORD1,而无需单独的设备数据传输。
Reserved1[2]
保留供将来使用。
Command[ANYSIZE_ARRAY]
要传递给设备的特定于供应商的命令。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 10 |
最低受支持的服务器 | Windows Server 2016 |
标头 | ntddstor.h (包括 Ntddstor.h) |