다음을 통해 공유


STORAGE_PROTOCOL_COMMAND 구조체(winioctl.h)

이 구조체는 통과 메커니즘을 사용하여 IOCTL_STORAGE_PROTOCOL_COMMAND를 통해 공급업체별 명령을 스토리지 디바이스에 발급할 때 입력 버퍼로 사용됩니다.

구문

typedef struct _STORAGE_PROTOCOL_COMMAND {
  DWORD                 Version;
  DWORD                 Length;
  STORAGE_PROTOCOL_TYPE ProtocolType;
  DWORD                 Flags;
  DWORD                 ReturnStatus;
  DWORD                 ErrorCode;
  DWORD                 CommandLength;
  DWORD                 ErrorInfoLength;
  DWORD                 DataToDeviceTransferLength;
  DWORD                 DataFromDeviceTransferLength;
  DWORD                 TimeOutValue;
  DWORD                 ErrorInfoOffset;
  DWORD                 DataToDeviceBufferOffset;
  DWORD                 DataFromDeviceBufferOffset;
  DWORD                 CommandSpecific;
  DWORD                 Reserved0;
  DWORD                 FixedProtocolReturnData;
  DWORD                 FixedProtocolReturnData2;
  DWORD                 Reserved1[2];
  BYTE                  Command[ANYSIZE_ARRAY];
} STORAGE_PROTOCOL_COMMAND, *PSTORAGE_PROTOCOL_COMMAND;

멤버

Version

이 구조체의 버전입니다. STORAGE_PROTOCOL_STRUCTURE_VERSION 설정해야 합니다.

Length

이 구조체의 크기입니다. sizeof(STORAGE_PROTOCOL_COMMAND)로 설정해야 합니다.

ProtocolType

STORAGE_PROTOCOL_TYPE 형식의 프로토콜 형식입니다.

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

오류 버퍼의 길이입니다. 선택적으로 설정되며 0으로 설정할 수 있습니다.

DataToDeviceTransferLength

디바이스로 전송할 버퍼의 크기입니다. WRITE 요청에서만 사용됩니다.

DataFromDeviceTransferLength

디바이스에서 전송할 버퍼의 크기입니다. 이는 READ 요청에서만 사용됩니다.

TimeOutValue

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

ErrorInfoOffset

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

DataToDeviceBufferOffset

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

DataFromDeviceBufferOffset

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

CommandSpecific

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

Reserved0

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

FixedProtocolReturnData

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

FixedProtocolReturnData2

Reserved1[2]

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

Command[ANYSIZE_ARRAY]

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

요구 사항

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

추가 정보

IOCTL_STORAGE_PROTOCOL_COMMAND