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) |