Partager via


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 émettre des commandes de réserve permanente. Le comportement de l’appareil de stockage lorsqu’une commande de réserve permanente est reçue 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 de réserve permanente. Les applications, services et pilotes en mode noyau peuvent utiliser cette IOCTL pour contrôler les réservations persistantes. Si elle est appelée à partir d’un pilote, cette IOCTL doit être appelée à partir d’un thread s’exécutant à l'< DISPATCH_LEVEL IRQL. Ce IOCTL est défini avec FILE_READ_ACCESS, nécessitant qu’un handle d’appareil dispose d’autorisations de lecture pour émettre la commande Réserve permanente en cours.

Code principal

IRP_MJ_DEVICE_CONTROL

Mémoire tampon d’entrée

La mémoire tampon à 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 cible et l’adaptateur.

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 réserve permanente, la réussite est retournée et la taille requise est retournée dans la liste des paramètres champ AdditionalLength.

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 Status est défini sur l’un des éléments suivants :

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 le IOCTL est inférieure à sizeof(PERSISTENT_RESERVE_COMMAND) ou la taille spécifiée dans la structure de données PERSISTENT_RESERVE_COMMAND 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 correctement dimensionnée ou remplie.
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. Cet état n’a pu être retourné qu’lorsqu’un pilote envoie un IOCTL à la pile de stockage. Cet état ne sera pas retourné lorsqu’une application en mode utilisateur envoie le 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 en cours.
STATUS_SUCCESS L’opération a réussi.

Exigences

Exigence Valeur
d’en-tête ntddstor.h (include Ntddstor.h)