Freigeben über


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)

Siehe auch

DispatchPnp-

IRP_MN_WAIT_WAKE

IoAcquireRemoveLock

IoDeleteDevice-

IoDetachDevice-

IoInitializeRemoveLock-

IoReleaseRemoveLock