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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für