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 l’émission de commandes de réserve permanente. Le comportement du périphérique de stockage lors de la réception d’une commande De réserve permanente out est décrit dans la spécification SCSI Primary Commands - 2 (SPC-2). L’interface IOCTL nécessite que l’appelant dispose d’un accès en lecture/écriture à l’appareil physique pour les commandes de réserve permanente. 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 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 hors.

Code principal

IRP_MJ_DEVICE_CONTROL

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_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 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 obligatoire 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 État 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 Commandes principales SCSI - 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_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 incorrectement dimensionnée ou renseignée.
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. Cette status ne peut être retournée que lorsqu’un pilote envoie un IOCTL à la pile de stockage. Cette status n’est 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 hors.
STATUS_SUCCESS L'opération a réussi.

Configuration requise

Condition requise Valeur
En-tête ntddstor.h (inclure Ntddstor.h)