Freigeben über


IoReleaseRemoveLock-Makro (wdm.h)

Die IoReleaseRemoveLock Routine gibt eine entfernte Sperre frei, die mit einem vorherigen Aufruf von IoAcquireRemoveLockabgerufen 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 an IoAcquireRemoveLockübergeben hat.

[in] Tag

Zeiger auf ein vom Aufrufer bereitgestelltes Tag, das an einen vorherigen Aufruf an IoAcquireRemoveLockübergeben wurde.

Wenn ein Treiber beim Erwerb der Sperre einen Tag angegeben hat, muss der Treiber beim Freigeben der Sperre denselben Tag- angeben.

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

Rückgabewert

Nichts

Bemerkungen

Ein Treiber ruft IoReleaseRemoveLock auf, wenn er den E/A-Vorgang abgeschlossen hat, für den er IoAcquireRemoveLockaufgerufen hat.

  • Bei E/A-Vorgängen (einschließlich Energie- und PnP-IRPs), die eine IoCompletion- Routine festlegen, sollte ein Treiber IoReleaseRemoveLock- in der IoCompletion- Routine aufrufen, nachdem IoCompleteRequestaufgerufen wurde.
  • Bei E/A-Vorgängen, die keine IoCompletion- Routine festlegen, sollte ein Treiber IoReleaseRemoveLock aufrufen, nachdem der aktuelle IRP an den nächsten niedrigeren Treiber übergeben wurde, aber bevor die Verteilerroutine beendet wird.
Jeder Aufruf von IoAcquireRemoveLock- muss über einen entsprechenden Aufruf IoReleaseRemoveLockverfügen.

IoReleaseRemoveLock die Anzahl der ausstehenden Käufe der Entfernungssperre erhöht. Wenn die Anzahl auf Null geht und der Treiber eine IRP_MN_REMOVE_DEVICE Anforderung empfangen hat, legt IoReleaseRemoveLock ein internes Ereignis fest. Wenn ein Treiber zum Löschen eines Geräteobjekts bereit ist, ruft er eine ähnliche Routine auf, IoReleaseRemoveLockAndWait. Der Treiber führt diesen Aufruf nur im Verteilercode 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 Kaufanzahl null ist. Nachdem IoReleaseRemoveLockAndWait zurückgegeben wurde, kann der Treiber das Geräteobjekt sicher trennen und löschen.

Weitere Informationen finden Sie unter Using Remove Locks.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Ab Windows 2000 verfügbar.
Zielplattform- Desktop
Header- wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Library 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), RemoveLockRel, RemoveLockReleasePnp(wdm), RemoveLockReleasePower(wdm), RemoveLockReleaseRead(wdm), RemoveLockReleaseShutdown(wdm), RemoveLockReleaseSystemControl(wdm), RemoveLockReleaseWrite(wdm)

Siehe auch

IoAcquireRemoveLock

IoInitializeRemoveLock-

IoReleaseRemoveLockAndWait