Macro IoReleaseRemoveLockAndWait (wdm.h)
La routine IoReleaseRemoveLockAndWait libère un verrou de suppression que le pilote a acquis dans 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 IO_REMOVE_LOCK que l’appelant a passée dans un appel précédent à IoAcquireRemoveLock.
[in] Tag
Pointeur vers une balise fournie par l’appelant qui a été passée dans un appel précédent à IoAcquireRemoveLock.
Si un pilote a spécifié une balise lorsqu’il a acquis le verrou, le pilote doit spécifier le 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
Aucun
Remarques
Un pilote appelle généralement cette routine dans son code de distribution pour une demande de IRP_MN_REMOVE_DEVICE. Pour permettre la fin des requêtes d’E/S en file d’attente, chaque pilote doit appeler IoReleaseRemoveLockAndWaitaprès il passe l’IRP de suppression au pilote inférieur suivant et avant de il libère de la mémoire, appelle IoDetachDeviceou appelle IoDeleteDevice. L'IoReleaseRemoveLockAndWait routine attend que le pilote de bus annule les irPs susceptibles d’être en attente (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 tôt dans 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 à partir du code autre que le code de distribution IRP_MN_REMOVE_DEVICE, utilisez IoReleaseRemoveLock.
Une fois 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 dans lequel 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 initialiser à nouveau le verrou de suppression. La violation de cette règle pendant que le pilote est vérifié par vérificateur de pilotes entraîne une vérification des bogues.
Pour plus d’informations, consultez Using Remove Locks.
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Disponible à partir de Windows 2000. |
plateforme cible | Bureau |
d’en-tête | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
bibliothèque | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
règles de conformité DDI |