IoReleaseRemoveLockAndWait-Makro (wdm.h)
Die IoReleaseRemoveLockAndWait Routine gibt eine Remove-Sperre frei, die der Treiber in einem vorherigen Aufruf von IoAcquireRemoveLockerworben hat, und wartet, bis alle Käufe der Sperre freigegeben 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 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 diese Routine in der Regel im Verteilercode für eine IRP_MN_REMOVE_DEVICE Anforderung auf. Damit in die Warteschlange eingereihte E/A-Anforderungen abgeschlossen werden können, sollte jeder Treiber IoReleaseRemoveLockAndWaitaufrufen, nachdem das Entfernen von IRP an den nächsten niedrigeren Treiber übergeben wurde, und , bevor Speicher freigegeben wird, ruft IoDetachDeviceoder ruft IoDeleteDeviceauf. Die IoReleaseRemoveLockAndWait Routine wartet, bis der Bustreiber alle ausstehenden IRPs abbricht (z. B. ein IRP_MN_WAIT_WAKE IRP).
Ein Treiber muss die Remove-Sperre abrufen, bevor IoReleaseRemoveLockAndWaitaufgerufen wird. In der Regel ruft ein Treiber IoAcquireRemoveLock früh in seiner DispatchPnp- Routine vor der Switch-Anweisung auf. Daher wird die Sperre für jeden PnP-Vorgang abgerufen, einschließlich des Erwerbs, der erforderlich ist, bevor IoReleaseRemoveLockAndWait im Code aufgerufen wird, der IRP_MN_REMOVE_DEVICEbehandelt.
Verwenden Sie IoReleaseRemoveLock, um eine Sperre aus einem anderen Code als dem IRP_MN_REMOVE_DEVICE Dispatch-Code freizugeben.
Nachdem IoReleaseRemoveLockAndWait für eine bestimmte Remove-Sperre aufgerufen wurde, treten nachfolgende Aufrufe von IoAcquireRemoveLock- für dieselbe Remove-Sperre fehl. IoReleaseRemoveLockAndWait erst zurück, wenn alle ausstehenden Käufe der Entfernungssperre freigegeben wurden.
Nachdem IoReleaseRemoveLockAndWait zurückgegeben wurde, sollte der Treiber das Gerät in einem Zustand berücksichtigen, in dem es entfernt werden kann und keine E/A-Vorgänge ausführen kann. Daher darf der Treiber die IoInitializeRemoveLock Routine nicht aufrufen, um die Entfernungssperre neu zu initialisieren. 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 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- | 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) |