Freigeben über


IoAcquireRemoveLock-Makro (wdm.h)

Die IoAcquireRemoveLock-Routine erhöht die Anzahl für eine Entfernungssperre, was angibt, dass das zugeordnete Geräteobjekt nicht vom Gerätestapel getrennt oder gelöscht werden soll.

Syntax

NTSTATUS
IoAcquireRemoveLock (
    _Inout_ PIO_REMOVE_LOCK RemoveLock,
    _In_opt_ PVOID          Tag
    );

Parameter

[in] RemoveLock

Zeiger auf eine IO_REMOVE_LOCK Struktur, die der Aufrufer mit einem vorherigen Aufruf von IoInitializeRemoveLock initialisiert hat.

[in, optional] Tag

Zeigt optional auf ein vom Aufrufer bereitgestelltes Tag, das diesen instance des Abrufens der Entfernungssperre identifiziert. Beispielsweise legt eine Treiber dispatch-Routine diesen Parameter in der Regel auf einen Zeiger auf die IRP fest, die von der Routine verarbeitet wird.

Wenn ein Treiber ein Tag für einen Aufruf von IoAcquireRemoveLock angibt, muss der Treiber dasselbe Tag im entsprechenden Aufruf von IoReleaseRemoveLock angeben.

Das Tag muss nicht eindeutig sein, sondern sollte beim Debuggen sinnvoll sein.

Rückgabewert

Keine

Bemerkungen

Das IoAcquireRemoveLock-Makro umschließt und übernimmt den Rückgabewert von IoAcquireRemoveLockEx, der NTSTATUS zurückgibt:

Rückgabewert BESCHREIBUNG
STATUS_SUCCESS Gibt an, dass der Aufruf erfolgreich war.
STATUS_DELETE_PENDING Fehlerwert, der angibt, dass der Treiber eine IRP_MN_REMOVE_DEVICE für das Gerät erhalten und IoReleaseRemoveLockandWait aufgerufen hat. Diese Routine wartet darauf, dass alle Entfernungssperren gelöscht werden, bevor die Steuerung an den Treiber zurückgegeben wird.

Wenn die Routine einen Wert außer STATUS_SUCCESS zurückgibt, starten Sie keine neuen Vorgänge auf dem Gerät.

Ein Treiber muss eine Remove-Sperre mit einem Aufruf von IoInitializeRemoveLock initialisieren, bevor die Sperre verwendet wird.

Ein Treiber muss IoReleaseRemoveLock aufrufen, um die Sperre zu lösen, wenn sie nicht mehr benötigt wird.

Weitere Informationen finden Sie unter Verwenden von Sperren entfernen.

Anforderungen

Anforderung Wert
Zielplattform Desktop
Header wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI-Complianceregeln CompleteRequestStatusCheck(wdm), MarkDevicePower(wdm), MarkPower(wdm), MarkPowerDown(wdm), MarkQueryRelations(wdm), MarkStartDevice(wdm), MultRemoveLock(wdm), NsRemoveLockMnRemove(wdm), NsRemoveLockMnSurpriseRemove(wdm), NsRemoveLockQueryMnRemove(wdm), PowerDownAllocate(wdm), PowerDownFail(wdm), PowerUpFail(wdm), RemoveLock(wdm) , RemoveLockCheck(wdm), RemoveLockForward(wdm), RemoveLockForward2(wdm), RemoveLockForwardDeviceControl(wdm), RemoveLockForwardDeviceControl2(wdm), RemoveLockForwardDeviceControlInternal(wdm), RemoveLockForwardDeviceControlInternal2(wdm), RemoveLockForwardRead(wdm), RemoveLockForwardRead2(wdm), RemoveLockwardForWrite(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), WmiForward(wdm)

Weitere Informationen

IoInitializeRemoveLock

IoReleaseRemoveLock

IoReleaseRemoveLockAndWait