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