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                 Reserved1[3];
  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 반환할 수 있는 가능한 값은 다음과 같습니다.

상태 값 Description
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

명령의 길이(바이트)입니다. 호출자는 이 값을 0이 아닌 값으로 설정해야 합니다.

ErrorInfoLength

ErrorCode 버퍼의 길이(바이트)입니다. 선택적으로 설정되며 0으로 설정할 수 있습니다.

DataToDeviceTransferLength

디바이스로 전송할 버퍼의 크기입니다.

DataFromDeviceTransferLength

디바이스에서 전송할 버퍼의 크기입니다.

TimeOutValue

시간이 초과될 때까지 디바이스를 기다리는 시간을 지정합니다. 이 값은 초 단위로 설정됩니다.

ErrorInfoOffset

ErrorCode 버퍼의 오프셋입니다. 포인터 맞춤이어야 합니다.

DataToDeviceBufferOffset

디바이스로 전송할 버퍼의 오프셋입니다. 포인터 정렬이어야 하며 WRITE 요청에서만 사용됩니다.

DataFromDeviceBufferOffset

디바이스에서 전송할 버퍼의 오프셋입니다. 포인터 정렬이어야 하며 READ 요청에서만 사용됩니다.

CommandSpecific

명령과 함께 전달된 추가 명령별 데이터입니다. 이는 드라이버의 명령에 따라 달라지고 선택적으로 설정됩니다.

Reserved0

다음에 사용하도록 예약됩니다.

FixedProtocolReturnData

반환 데이터입니다. 선택적으로 설정됩니다. NVMe와 같은 일부 프로토콜은 별도의 디바이스 데이터 전송 없이 소량의 데이터(완료 큐 항목에서 DWORD0)를 반환할 수 있습니다.

Reserved1[3]

다음에 사용하도록 예약됩니다.

Command[ANYSIZE_ARRAY]

디바이스에 전달할 공급업체별 명령입니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 10
지원되는 최소 서버 Windows Server 2016
머리글 ntddstor.h(Ntddstor.h 포함)

추가 정보

IOCTL_STORAGE_PROTOCOL_COMMAND