Freigeben über


STORAGE_PROTOCOL_COMMAND-Struktur (winioctl.h)

Wird als Eingabepuffer verwendet, wenn über den Pass-Through-Mechanismus ein herstellerspezifischer Befehl an ein Speichergerät gesendet wird (über IOCTL_STORAGE_PROTOCOL_COMMAND).

Syntax

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;

Member

Version

Die Version dieser Struktur. Dies sollte auf STORAGE_PROTOCOL_STRUCTURE_VERSION festgelegt werden.

Length

Die Größe dieser Struktur. Dies sollte auf sizeof(STORAGE_PROTOCOL_COMMAND) festgelegt werden.

ProtocolType

Der Protokolltyp vom Typ STORAGE_PROTOCOL_TYPE.

Flags

Für diese Anforderung festgelegte Flags. Im Folgenden sind gültige Flags aufgeführt.

Flag Beschreibung
STORAGE_PROTOCOL_COMMAND_FLAG_ADAPTER_REQUEST Dieses Flag gibt die Anforderung an, einen Adapter anstelle des Geräts als Ziel zu verwenden.

ReturnStatus

Die status der Anforderung, die an das Speichergerät gestellt wurde. In Windows 10 sind folgende Werte möglich:

Statuswert BESCHREIBUNG
STORAGE_PROTOCOL_STATUS_PENDING Die Anforderung steht aus.
STORAGE_PROTOCOL_STATUS_SUCCESS Die Anforderung wurde erfolgreich abgeschlossen.
STORAGE_PROTOCOL_STATUS_ERROR Bei der Anforderung ist ein Fehler aufgetreten.
STORAGE_PROTOCOL_STATUS_INVALID_REQUEST Die Anforderung ist ungültig.
STORAGE_PROTOCOL_STATUS_NO_DEVICE Ein Gerät ist nicht für eine Anforderung verfügbar.
STORAGE_PROTOCOL_STATUS_BUSY Das Gerät ist damit beschäftigt, die Anforderung zu bearbeiten.
STORAGE_PROTOCOL_STATUS_DATA_OVERRUN Beim Ausführen der Anforderung ist auf dem Gerät ein Datenüberlauf aufgetreten.
STORAGE_PROTOCOL_STATUS_INSUFFICIENT_RESOURCES Das Gerät kann die Anforderung aufgrund unzureichender Ressourcen nicht abschließen.
STORAGE_PROTOCOL_STATUS_NOT_SUPPORTED Die Anforderung wird nicht unterstützt.

ErrorCode

Der Fehlercode für diese Anforderung. Dies ist optional festgelegt.

CommandLength

Die Länge des Befehls. Der Aufrufer muss einen Wert ungleich 0 festlegen.

ErrorInfoLength

Die Länge des Fehlerpuffers. Dies ist optional festgelegt und kann auf 0 festgelegt werden.

DataToDeviceTransferLength

Die Größe des Puffers, der auf das Gerät übertragen werden soll. Dies wird nur mit einer WRITE-Anforderung verwendet.

DataFromDeviceTransferLength

Die Größe des Puffers, der vom Gerät übertragen werden soll. Dies wird nur mit einer READ-Anforderung verwendet.

TimeOutValue

Gibt an, wie lange auf das Gerät gewartet werden soll, bis ein Timeout auftritt. Dies wird in Sekundeneinheiten festgelegt.

ErrorInfoOffset

Der Offset des Fehlerpuffers. Dies muss mit einem Zeiger ausgerichtet sein.

DataToDeviceBufferOffset

Der Offset des Puffers, der auf das Gerät übertragen werden soll. Dies muss zeigerbündig sein und wird nur mit einer WRITE-Anforderung verwendet.

DataFromDeviceBufferOffset

Der Offset des Puffers, der vom Gerät übertragen werden soll. Dies muss zeigerbündig sein und wird nur mit einer READ-Anforderung verwendet.

CommandSpecific

Befehlsspezifische Daten, die zusammen mit dem Befehl übergeben werden. Dies hängt vom Befehl des Treibers ab und ist optional festgelegt.

Reserved0

Für die zukünftige Verwendung reserviert.

FixedProtocolReturnData

Die Rückgabedaten. Dies ist optional festgelegt. Einige Protokolle, z. B. NVMe, geben möglicherweise eine kleine Datenmenge (DWORD0 aus dem Eintrag der Abschlusswarteschlange) zurück, ohne dass eine separate Gerätedatenübertragung erforderlich ist.

FixedProtocolReturnData2

Reserved1[2]

Für die zukünftige Verwendung reserviert.

Command[ANYSIZE_ARRAY]

Der herstellerspezifische Befehl, der an das Gerät übergeben werden soll.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 10
Unterstützte Mindestversion (Server) Windows Server 2016
Kopfzeile winioctl.h (windows.h einschließen)

Weitere Informationen

IOCTL_STORAGE_PROTOCOL_COMMAND