Partager via


IOCTL_STORAGE_PERSISTENT_RESERVE_OUT 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 out. 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/écriture à l’appareil physique pour les commandes de réserve permanente out. 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 et FILE_WRITE_ACCESS, ce qui nécessite qu’un handle d’appareil dispose à la fois des autorisations de lecture et d’écriture pour émettre la commande Réserve permanente out.

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_OUT. ServiceAction peut être l’un des éléments suivants :

  • RESERVATION_ACTION_REGISTER
  • RESERVATION_ACTION_RESERVE
  • RESERVATION_ACTION_RELEASE
  • RESERVATION_ACTION_CLEAR
  • RESERVATION_ACTION_PREEMPT
  • RESERVATION_ACTION_PREEMPT_ABORT
  • RESERVATION_ACTION_REGISTER_IGNORE_EXISTING

PR_OUT. L’étendue peut être l’une des options suivantes :

  • RESERVATION_SCOPE_LU
  • RESERVATION_SCOPE_ELEMENT

PR_OUT. Le type peut être l’un des éléments suivants :

  • RESERVATION_TYPE_WRITE_EXCLUSIVE
  • RESERVATION_TYPE_EXCLUSIVE
  • RESERVATION_TYPE_WRITE_EXCLUSIVE_REGISTRANTS
  • RESERVATION_TYPE_EXCLUSIVE_REGISTRANTS

PR_OUT. ParameterList est utilisé pour contenir la structure PRO_PARAMETER_LIST. Cette structure est requise et doit être contiguë au reste de la structure PERSISTENT_RESERVE_COMMAND.

Longueur de la mémoire tampon d’entrée

Longueur d’une structure PERSISTENT_RESERVE_COMMAND.

Mémoire tampon de sortie

Aucun.

Longueur de la mémoire tampon de sortie

Aucun.

Bloc d’état

Le champ Informations est défini sur zéro.

Le champ Status est défini sur l’une des valeurs suivantes.

Valeur Signification
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_OUT) 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 n’est pas alignée correctement pour l’appareil ou l’adaptateur. Cet état ne peut être retourné qu’lorsqu’un pilote envoie un IOCTL à la pile de stockage. Cet état n’est 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 out.
STATUS_SUCCESS L’opération a réussi.

Exigences

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