Macro IoReleaseRemoveLockAndWait (wdm.h)
La routine IoReleaseRemoveLockAndWait libère un verrou de suppression que le pilote a acquis lors d’un appel précédent à IoAcquireRemoveLock et attend que toutes les acquisitions du verrou aient été libérées.
Syntaxe
void IoReleaseRemoveLockAndWait(
[in] RemoveLock,
[in] Tag
);
Paramètres
[in] RemoveLock
Pointeur vers une structure de IO_REMOVE_LOCK que l’appelant a passé lors d’un appel précédent à IoAcquireRemoveLock.
[in] Tag
Pointeur vers une balise fournie par l’appelant qui a été passée lors d’un appel précédent à IoAcquireRemoveLock.
Si un pilote a spécifié une balise lors de l’acquisition du verrou, il doit spécifier la même balise lors de la libération du verrou.
Si l’appel à IoAcquireRemoveLock n’a pas spécifié de balise, ce paramètre est NULL.
Valeur de retour
None
Remarques
Un pilote appelle généralement cette routine dans son code de répartition pour une demande de IRP_MN_REMOVE_DEVICE . Pour permettre aux demandes d’E/S en file d’attente de se terminer, chaque pilote doit appeler IoReleaseRemoveLockAndWaitune fois qu’il a passé l’IRP de suppression au pilote inférieur suivant et, avant de libérer de la mémoire, appelle IoDetachDevice ou appelle IoDeleteDevice. La routine IoReleaseRemoveLockAndWait attend que le pilote de bus annule tous les IRP qui peuvent être en suspens (par exemple, un IRP IRP_MN_WAIT_WAKE ).
Un pilote doit acquérir le verrou de suppression avant d’appeler IoReleaseRemoveLockAndWait. En règle générale, un pilote appelle IoAcquireRemoveLock au début de sa routine DispatchPnp , avant l’instruction switch. Par conséquent, le verrou est acquis pour chaque opération PnP, y compris l’acquisition requise avant d’appeler IoReleaseRemoveLockAndWait dans le code qui gère IRP_MN_REMOVE_DEVICE.
Pour libérer un verrou d’un code autre que le code de répartition IRP_MN_REMOVE_DEVICE , utilisez IoReleaseRemoveLock.
Une fois que IoReleaseRemoveLockAndWait a été appelé pour un verrou de suppression particulier, les appels suivants à IoAcquireRemoveLock pour le même verrou de suppression échouent. IoReleaseRemoveLockAndWait ne retourne pas tant que toutes les acquisitions en suspens du verrou de suppression n’ont pas été libérées.
Une fois ioReleaseRemoveLockAndWait retourné, le pilote doit considérer que l’appareil est dans un état où il est prêt à être supprimé et ne peut pas effectuer d’opérations d’E/S. Par conséquent, le pilote ne doit pas appeler la routine IoInitializeRemoveLock pour réinitialiser le verrou de suppression. La violation de cette règle pendant la vérification du pilote par le vérificateur de pilotes entraîne un bogue case activée.
Pour plus d’informations, consultez Utilisation de la suppression de verrous.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Disponible à partir de Windows 2000. |
Plateforme cible | Desktop (Expérience utilisateur) |
En-tête | wdm.h (inclure Wdm.h, Ntddk.h, Ntifs.h) |
Bibliothèque | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
Règles de conformité DDI | IoReleaseRemoveLockAndWaitOutsideRemoveDevice(wdm), RemoveLock(wdm), RemoveLockCheck(wdm),RemoveLockMnRemove(wdm), RemoveLockMnRemove2(wdm), RemoveLockReleaseCleanup(wdm), RemoveLockReleaseClose(wdm), RemoveLockReleaseCreate(wdm), RemoveLockReleaseDeviceControl(wdm), RemoveLockReleaseDeviceControl(wdm), RemoveLockReleasePower(wdm), RemoveLockReleaseRead(wdm),RemoveLockReleaseShutdown(wdm), RemoveLockReleaseSystemControl(wdm), RemoveLockReleaseWrite(wdm) |
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour