IOCTL_STORAGE_PERSISTENT_RESERVE_IN IOCTL (ntddstor.h)
Le pilote de classe de stockage générique (classpnp.sys) expose une interface de contrôle d’E/S (IOCTL) pour l’émission de commandes Réserve permanente dans. Le comportement du périphérique de stockage lors de la réception d’une commande Réserve permanente in est décrit dans la spécification SCSI Primary Commands - 2 (SPC-2). L’interface IOCTL exige que l’appelant dispose d’un accès en lecture à l’appareil physique pour les commandes Réserve permanente dans. Les applications en mode utilisateur, les services et les pilotes en mode noyau peuvent utiliser cet IOCTL pour contrôler les réservations persistantes. S’il est appelé à partir d’un pilote, cet IOCTL doit être appelé à partir d’un thread s’exécutant au DISPATCH_LEVEL IRQL < . Ce IOCTL est défini avec FILE_READ_ACCESS, ce qui nécessite qu’un handle d’appareil dispose d’autorisations de lecture pour émettre la commande Réserve permanente dans.
Code principal
Mémoire tampon d'entrée
La mémoire tampon sur Irp-AssociatedIrp.SystemBuffer> contient une structure PERSISTENT_RESERVE_COMMAND. Vous devez allouer la mémoire tampon à partir d’un pool non paginé et l’aligner correctement pour l’appareil et l’adaptateur cibles.
PR_IN. ServiceAction peut être l’un des éléments suivants :
- RESERVATION_ACTION_READ_KEYS
- RESERVATION_ACTION_READ_RESERVATIONS
PR_IN. La longueur d’allocation est la taille (en octets) de la mémoire tampon allouée pour la liste de paramètres retournée.
Longueur de la mémoire tampon d’entrée
Longueur de la mémoire tampon d’entrée, en octets.
Mémoire tampon de sortie
Pour PR_IN. ServiceAction = RESERVATION_ACTION_READ_KEYS, la mémoire tampon de sortie contient une structure PRI_REGISTRATION_LIST et doit être au moins sizeof(PRI_REGISTRATION_LIST).
Pour PR_IN. ServiceAction = RESERVATION_ACTION_READ_RESERVATIONS, la mémoire tampon de sortie contient une structure PRI_RESERVATION_LIST et doit être au moins sizeof(PRI_RESERVATION_LIST).
Si la mémoire tampon allouée est trop petite pour renvoyer toutes les données de la réserve permanente dans, la réussite est retournée et la taille requise est retournée dans le champ AdditionalLength de la liste de paramètres.
Longueur de la mémoire tampon de sortie
Longueur de la mémoire tampon de sortie, en octets.
Bloc d’état
Le champ Informations est défini sur la taille de la mémoire tampon de sortie. Pour ServiceAction = RESERVATION_ACTION_READ_KEYS, la mémoire tampon de sortie est une structure PRI_REGISTRATION_LIST . Pour ServiceAction = RESERVATION_ACTION_READ_RESERVATIONS, la mémoire tampon de sortie est une structure PRI_REGISTRATION_LIST .
Le champ État est défini sur l’une des valeurs suivantes :
Valeur | Signification |
---|---|
STATUS_BUFFER_OVERFLOW (ERROR_MORE_DATA) | La mémoire tampon de sortie est trop petite pour contenir la réserve persistante dans les données. Le champ AdditionalLength de la mémoire tampon de sortie contient la taille des données à retourner. |
STATUS_DEVICE_BUSY (ERROR_BUSY) | La commande a échoué en raison d’un conflit de réservation (pour plus d’informations, consultez la spécification SCSI Primary Commands - 2 (SPC-2)**). |
STATUS_INFO_LENGTH_MISMATCH | La longueur de la mémoire tampon d’entrée pour l’IOCTL est inférieure à sizeof(PERSISTENT_RESERVE_COMMAND) ou la taille spécifiée dans le PERSISTENT_RESERVE_COMMAND structure de données est inférieure à sizeof(PERSISTENT_RESERVE_COMMAND). |
STATUS_INVALID_DEVICE_REQUEST (ERROR_INVALID_FUNCTION) | Le code de contrôle d’E/S (IOCTL_STORAGE_PERSISTENT_RESERVE_IN) n’est pas pris en charge par les pilotes de stockage. |
STATUS_INVALID_PARAMETER (ERROR_INVALID_PARAMETER) | La structure de la mémoire tampon d’entrée est incorrectement dimensionnée ou renseignée. |
STATUS_INVALID_USER_BUFFER (ERROR_INVALID_USER_BUFFER) | La mémoire tampon d’entrée ou de sortie n’est pas alignée correctement pour l’appareil ou l’adaptateur. Cette status ne peut être retournée que lorsqu’un pilote envoie un IOCTL à la pile de stockage. Cette status ne sera pas retournée lorsqu’une application en mode utilisateur envoie l’IOCTL via l’API DeviceIoControl, car le gestionnaire d’E/S aligne automatiquement les mémoires tampons. |
STATUS_IO_DEVICE_ERROR (ERROR_IO_DEVICE) | L’appareil ne prend pas en charge la commande Réserve permanente dans. |
STATUS_SUCCESS | L'opération a réussi. |
Configuration requise
Condition requise | Valeur |
---|---|
En-tête | ntddstor.h (inclure Ntddstor.h) |