Freigeben über


IoReleaseRemoveLock-Makro (wdm.h)

Die IoReleaseRemoveLock-Routine gibt eine Entfernungssperre frei, die mit einem vorherigen Aufruf von IoAcquireRemoveLock erworben wurde.

Syntax

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

Parameter

[in] RemoveLock

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

[in] Tag

Zeiger auf ein vom Aufrufer bereitgestelltes Tag, das an einen 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 IoReleaseRemoveLock auf, wenn er den E/A-Vorgang abgeschlossen hat, für den er IoAcquireRemoveLock aufgerufen hat.

  • Für E/A-Vorgänge (einschließlich Energie und PnP-IRPs), die eine IoCompletion-Routine festlegen, sollte ein Treiber IoReleaseRemoveLock in der IoCompletion-Routine aufrufen, nachdem IoCompleteRequest aufgerufen wurde.
  • Bei E/A-Vorgängen, die keine IoCompletion-Routine festlegen, sollte ein Treiber IoReleaseRemoveLock aufrufen, nachdem er den aktuellen IRP an den nächstniedrigen Treiber übergeben hat, aber vor dem Beenden der Dispatchroutine.
Jeder Aufruf von IoAcquireRemoveLock muss über einen entsprechenden Aufruf von IoReleaseRemoveLock verfügen.

IoReleaseRemoveLock verringert die Anzahl der ausstehenden Käufe der Entfernungssperre. Wenn die Anzahl auf 0 (null) lautet und der Treiber eine IRP_MN_REMOVE_DEVICE-Anforderung empfangen hat, legt IoReleaseRemoveLock ein internes Ereignis fest. Wenn ein Treiber bereit ist, ein Geräteobjekt zu löschen, ruft er eine ähnliche Routine auf, IoReleaseRemoveLockAndWait. Der Treiber führt diesen Aufruf nur in seinem Dispatchcode für eine IRP_MN_REMOVE_DEVICE-Anforderung aus. Die IoReleaseRemoveLockAndWait-Routine wird erst zurückgegeben, wenn IoReleaseRemoveLock das Ereignis festlegt, das angibt, dass die Erfassungsanzahl null ist. Nachdem IoReleaseRemoveLockAndWait zurückgegeben wurde, kann der Treiber das Geräteobjekt sicher trennen und löschen.

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 <= DISPATCH_LEVEL
DDI-Complianceregeln 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)

Weitere Informationen

IoAcquireRemoveLock

IoInitializeRemoveLock

IoReleaseRemoveLockAndWait