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
返回数据 2。 这是可选的设置。 某些协议(如 NVMe)可能会从完成队列条目返回少量数据(DWORD1),而无需单独的设备数据传输。
Reserved1[2]
保留以供将来使用。
Command[ANYSIZE_ARRAY]
要传递到设备的特定于供应商的命令。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows 10 |
支持的最低服务器 | Windows Server 2016 |
标头 | ntddstor.h (包括 Ntddstor.h) |