Partager via


Macro IoReleaseRemoveLock (wdm.h)

La routine IoReleaseRemoveLock libère un verrou de suppression acquis avec un appel précédent à IoAcquireRemoveLock.

Syntaxe

void IoReleaseRemoveLock(
  [in]  RemoveLock,
  [in]  Tag
);

Paramètres

[in] RemoveLock

Pointeur vers une structure IO_REMOVE_LOCK que l’appelant a passée à un appel précédent à IoAcquireRemoveLock.

[in] Tag

Pointeur vers une balise fournie par l’appelant qui a été passée à un appel précédent à IoAcquireRemoveLock.

Si un pilote a spécifié une balise lorsqu’il a acquis le 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 IoReleaseRemoveLock lorsqu’il a terminé l’opération d’E/S pour laquelle il a appelé IoAcquireRemoveLock.

  • Pour les opérations d’E/S (y compris les IRP d’alimentation et PnP) qui définissent une routine IoCompletion , un pilote doit appeler IoReleaseRemoveLock dans la routine IoCompletion , après avoir appelé IoCompleteRequest.
  • Pour les opérations d’E/S qui ne définissent pas de routine IoCompletion , un pilote doit appeler IoReleaseRemoveLock après avoir passé l’IRP actuel au pilote inférieur suivant, mais avant de quitter la routine de répartition.
Chaque appel à IoAcquireRemoveLock doit avoir un appel correspondant à IoReleaseRemoveLock.

IoReleaseRemoveLock décrémente le nombre d’acquisitions en attente du verrou de suppression. Si le nombre est égal à zéro et que le pilote a reçu une demande de IRP_MN_REMOVE_DEVICE , IoReleaseRemoveLock définit un événement interne. Lorsqu’un pilote est prêt à supprimer un objet d’appareil, il appelle une routine similaire, IoReleaseRemoveLockAndWait. Le pilote effectue cet appel uniquement dans son code de répartition pour une demande de IRP_MN_REMOVE_DEVICE . La routine IoReleaseRemoveLockAndWait ne retourne pas tant que IoReleaseRemoveLock ne définit pas l’événement qui indique que le nombre d’acquisitions est égal à zéro. Une fois que IoReleaseRemoveLockAndWait est retourné, le pilote peut détacher et supprimer l’objet de périphérique en toute sécurité.

Pour plus d’informations, consultez Utilisation de supprimer des 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 (include Wdm.h, Ntddk.h, Ntifs.h)
Bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
Règles de conformité DDI RemoveLock(wdm), RemoveLockCheck(wdm), RemoveLockForward(wdm), RemoveLockForward2(wdm), RemoveLockForwardDeviceControl(wdm), RemoveLockForwardDeviceControl2(wdm), RemoveLockForwardDeviceControlInternal(wdm), RemoveLockForwardDeviceControlInternal2(wdm), RemoveLockForwardRead(wdm), RemoveLockForwardRead2(wdm), RemoveLockForwardWrite(wdm), RemoveLockForwardWrite2(wdm), RemoveLockMnRemove(wdm), RemoveLockMnRemove2(wdm), RemoveLockMnSurpriseRemove(wdm), RemoveLockQueryMnRemove(wdm), RemoveLockRelease2(wdm), RemoveLockReleaseCleanup(wdm), RemoveLockReleaseClose(wdm), RemoveLockReleaseCreate(wdm), RemoveLockReleaseDeviceControl(wdm), RemoveLockReleaseInternalDeviceControl(wdm), RemoveLockReleasePnp(wdm), RemoveLockReleasePower(wdm), RemoveLockReleaseRead(wdm), RemoveLockReleaseShutdown(wdm), RemoveLockReleaseSystemControl(wdm), RemoveLockReleaseWrite(wdm)

Voir aussi

IoAcquireRemoveLock

IoInitializeRemoveLock

IoReleaseRemoveLockAndWait