structure STORAGE_PROTOCOL_COMMAND (winioctl.h)

Cette structure est utilisée comme mémoire tampon d’entrée lors de l’utilisation du mécanisme de pass-through pour émettre une commande spécifique au fournisseur sur un dispositif de stockage (via IOCTL_STORAGE_PROTOCOL_COMMAND).

Syntaxe

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;

Membres

Version

Version de cette structure. Cette valeur doit être définie sur STORAGE_PROTOCOL_STRUCTURE_VERSION.

Length

La taille de cette structure. Cette valeur doit être définie sur sizeof(STORAGE_PROTOCOL_COMMAND).

ProtocolType

Type de protocole, de type STORAGE_PROTOCOL_TYPE.

Flags

Indicateurs définis pour cette demande. Voici des indicateurs valides.

Indicateur Description
STORAGE_PROTOCOL_COMMAND_FLAG_ADAPTER_REQUEST Cet indicateur indique la demande de cibler un adaptateur au lieu de l’appareil.

ReturnStatus

Status de la demande adressée au périphérique de stockage. Dans Windows 10, les valeurs possibles sont les suivantes :

Valeur d’état Description
STORAGE_PROTOCOL_STATUS_PENDING La demande est en attente.
STORAGE_PROTOCOL_STATUS_SUCCESS La demande s’est terminée avec succès.
STORAGE_PROTOCOL_STATUS_ERROR La demande a rencontré une erreur.
STORAGE_PROTOCOL_STATUS_INVALID_REQUEST La demande n’est pas valide.
STORAGE_PROTOCOL_STATUS_NO_DEVICE Un appareil n’est pas disponible pour effectuer une demande.
STORAGE_PROTOCOL_STATUS_BUSY L’appareil est occupé à agir sur la demande.
STORAGE_PROTOCOL_STATUS_DATA_OVERRUN L’appareil a rencontré un dépassement de données lors de l’exécution de la demande.
STORAGE_PROTOCOL_STATUS_INSUFFICIENT_RESOURCES L’appareil ne peut pas terminer la demande en raison de ressources insuffisantes.
STORAGE_PROTOCOL_STATUS_NOT_SUPPORTED La demande n'est pas prise en charge.

ErrorCode

Code d’erreur de cette demande. Cette valeur est éventuellement définie.

CommandLength

Longueur de la commande. Une valeur autre que zéro doit être définie par l’appelant.

ErrorInfoLength

Longueur de la mémoire tampon d’erreur. Cette valeur est éventuellement définie et peut être définie sur 0.

DataToDeviceTransferLength

Taille de la mémoire tampon à transférer vers l’appareil. Il est utilisé uniquement avec une requête WRITE.

DataFromDeviceTransferLength

Taille de la mémoire tampon à transférer à partir de l’appareil. Il est utilisé uniquement avec une requête READ.

TimeOutValue

Durée d’attente de l’appareil jusqu’à expiration. Cette valeur est définie en unités de secondes.

ErrorInfoOffset

Décalage de la mémoire tampon d’erreur. Il doit être aligné sur le pointeur.

DataToDeviceBufferOffset

Décalage de la mémoire tampon à transférer vers l’appareil. Il doit être aligné sur le pointeur et est utilisé uniquement avec une requête WRITE.

DataFromDeviceBufferOffset

Décalage de la mémoire tampon à transférer à partir de l’appareil. Il doit être aligné sur le pointeur et est utilisé uniquement avec une requête READ.

CommandSpecific

Données spécifiques à la commande transmises avec la commande. Cela dépend de la commande du pilote et est éventuellement défini.

Reserved0

Réservé pour un usage futur.

FixedProtocolReturnData

Données de retour. Cette valeur est éventuellement définie. Certains protocoles, tels que NVMe, peuvent retourner une petite quantité de données (DWORD0 à partir de l’entrée de la file d’attente d’achèvement) sans avoir besoin d’un transfert de données d’appareil distinct.

FixedProtocolReturnData2

Reserved1[2]

Réservé pour un usage futur.

Command[ANYSIZE_ARRAY]

Commande spécifique au fournisseur qui doit être transmise à l’appareil.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 10
Serveur minimal pris en charge Windows Server 2016
En-tête winioctl.h (inclure Windows.h)

Voir aussi

IOCTL_STORAGE_PROTOCOL_COMMAND