Condividi tramite


Macro IoAcquireRemoveLock (wdm.h)

La routine IoAcquireRemoveLock incrementa il conteggio per un blocco di rimozione, a indicare che l'oggetto dispositivo associato non deve essere scollegato dallo stack di dispositivi o eliminato.

Sintassi

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

Parametri

[in] RemoveLock

Puntatore a una struttura IO_REMOVE_LOCK inizializzata dal chiamante con una chiamata precedente a IoInitializeRemoveLock.

[in, optional] Tag

Facoltativamente punta a un tag fornito dal chiamante che identifica questa istanza di acquisizione del blocco di rimozione. Ad esempio, una routine Dispatch del driver imposta in genere questo parametro su un puntatore all'IRP che la routine sta elaborando.

Se un driver specifica un tag in una chiamata a IoAcquireRemoveLock, il driver deve fornire lo stesso tag nella chiamata corrispondente a IoReleaseRemoveLock.

Il tag non deve essere univoco, ma deve essere un elemento significativo durante il debug.

Valore restituito

nessuno

Osservazioni

La macro IoAcquireRemoveLock esegue il wrapping e presuppone il valore restituito di IoAcquireRemoveLockEx, che restituisce NTSTATUS:

Valore restituito Descrizione
STATUS_SUCCESS Indica che la chiamata ha avuto esito positivo.
STATUS_DELETE_PENDING Valore di errore che indica che il driver ha ricevuto un IRP_MN_REMOVE_DEVICE per il dispositivo e ha chiamato IoReleaseRemoveLockandWait. Questa routine è in attesa che tutti i blocchi vengano rimossi prima di restituire il controllo al driver.

Se la routine restituisce qualsiasi valore oltre STATUS_SUCCESS, non avviare nuove operazioni nel dispositivo.

Un driver deve inizializzare un blocco remove con una chiamata a IoInitializeRemoveLock prima di usare il blocco.

Un driver deve chiamare IoReleaseRemoveLock per rilasciare il blocco quando non è più necessario.

Per altre informazioni, vedere Using Remove Locks.For more information, see Using Remove Locks.

Requisiti

Requisito Valore
Piattaforma di destinazione Desktop
Intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
Regole di conformità DDI 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), RemoveLockForwardWrite(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)

Vedi anche

IoInitializeRemoveLock

IoReleaseRemoveLock

IoReleaseRemoveLockAndWait