IoReleaseRemoveLockAndWait-Makro (wdm.h)

Die IoReleaseRemoveLockAndWait-Routine gibt eine Entfernungssperre frei, die der Treiber bei einem vorherigen Aufruf von IoAcquireRemoveLock erworben hat, und wartet, bis alle Käufe der Sperre aufgehoben wurden.

Syntax

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

Parameter

[in] RemoveLock

Zeiger auf eine IO_REMOVE_LOCK Struktur, die der Aufrufer in einem vorherigen Aufruf an IoAcquireRemoveLock übergeben hat.

[in] Tag

Zeiger auf ein vom Aufrufer bereitgestelltes Tag, das in einem vorherigen Aufruf von IoAcquireRemoveLock übergeben wurde.

Wenn ein Treiber beim Erwerb der Sperre ein Tag angegeben hat, muss der Treiber beim Freigeben der Sperre das gleiche Tag angeben.

Wenn der Aufruf von IoAcquireRemoveLock kein Tag angegeben hat, ist dieser Parameter NULL.

Rückgabewert

Keine

Bemerkungen

Ein Treiber ruft diese Routine in der Regel im Dispatchcode für eine IRP_MN_REMOVE_DEVICE-Anforderung auf. Damit E/A-Anforderungen in der Warteschlange abgeschlossen werden können, sollte jeder Treiber IoReleaseRemoveLockAndWait aufrufen, nachdem er die Remove-IRP an den nächstniedrigen Treiber übergeben hat und vor der Freigabe von Arbeitsspeicher IoDetachDevice aufruft oder IoDeleteDevice aufruft. Die IoReleaseRemoveLockAndWait-Routine wartet darauf, dass der Bustreiber alle ausstehenden IRPs abbricht (z. B. ein IRP_MN_WAIT_WAKE IRP).

Ein Treiber muss die Entfernungssperre erwerben, bevor IoReleaseRemoveLockAndWait aufgerufen wird. In der Regel ruft ein Treiber IoAcquireRemoveLock früh in seiner DispatchPnp-Routine auf, vor der switch-Anweisung. Daher wird die Sperre für jeden PnP-Vorgang abgerufen, einschließlich der Vor dem Aufrufen von IoReleaseRemoveLockAndWait im Code, der IRP_MN_REMOVE_DEVICE verarbeitet.

Verwenden Sie IoReleaseRemoveLock, um eine Sperre für anderen Code als den IRP_MN_REMOVE_DEVICE-Dispatchcode freizugeben.

Nachdem IoReleaseRemoveLockAndWait für eine bestimmte Remove-Sperre aufgerufen wurde, schlagen nachfolgende Aufrufe von IoAcquireRemoveLock für dieselbe Remove-Sperre fehl. IoReleaseRemoveLockAndWait wird erst zurückgegeben, wenn alle ausstehenden Käufe der Entfernungssperre freigegeben wurden.

Nachdem IoReleaseRemoveLockAndWait zurückgegeben wurde, sollte der Treiber das Gerät in einem Zustand betrachten, in dem es zum Entfernen bereit ist und keine E/A-Vorgänge ausführen kann. Daher darf der Treiber die IoInitializeRemoveLock-Routine nicht aufrufen, um die Remove-Sperre erneut zu initialisieren. Ein Verstoß gegen diese Regel, während der Treiber von driver verifier überprüft wird, führt zu einer Fehlerüberprüfung.

Weitere Informationen finden Sie unter Verwenden von Sperren entfernen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar ab Windows 2000.
Zielplattform Desktop
Header wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI-Complianceregeln IoReleaseRemoveLockAndWaitOutsideRemoveDevice(wdm), RemoveLock(wdm), RemoveLockCheck(wdm), RemoveLockMnRemove(wdm), RemoveLockMnRemove2(wdm), RemoveLockReleaseCleanup(wdm), RemoveLockReleaseClose(wdm), RemoveLockReleaseCreate(wdm), RemoveLockReleaseDeviceControl(wdm), RemoveLockReleaseInternalDeviceControl(wdm), RemoveLockReleasePower(wdm), RemoveLockReleaseRead(wdm), RemoveLockReleaseShutdown(wdm), RemoveLockReleaseSystemControl(wdm), RemoveLockReleaseWrite(wdm)

Weitere Informationen

DispatchPnp

IRP_MN_WAIT_WAKE

IoAcquireRemoveLock

IoDeleteDevice

IoDetachDevice

IoInitializeRemoveLock

IoReleaseRemoveLock