Macro IoAcquireRemoveLock (wdm.h)

La rutina IoAcquireRemoveLock incrementa el recuento de un bloqueo de eliminación, lo que indica que el objeto de dispositivo asociado no debe desasociarse de la pila de dispositivos ni eliminarse.

Sintaxis

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

Parámetros

[in] RemoveLock

Puntero a una estructura de IO_REMOVE_LOCK que el autor de la llamada inicializó con una llamada anterior a IoInitializeRemoveLock.

[in, optional] Tag

Opcionalmente, apunta a una etiqueta proporcionada por el autor de la llamada que identifica esta instancia de adquisición del bloqueo remove. Por ejemplo, una rutina de distribución del controlador normalmente establece este parámetro en un puntero al IRP que la rutina está procesando.

Si un controlador especifica una etiqueta en una llamada a IoAcquireRemoveLock, el controlador debe proporcionar la misma etiqueta en la llamada correspondiente a IoReleaseRemoveLock.

La etiqueta no tiene que ser única, pero debe ser algo significativo durante la depuración.

Valor devuelto

None

Observaciones

La macro IoAcquireRemoveLock encapsula y asume el valor devuelto de IoAcquireRemoveLockEx, que devuelve NTSTATUS:

Valor devuelto Descripción
STATUS_SUCCESS Indica que la llamada se realizó correctamente.
STATUS_DELETE_PENDING Valor de error que indica que el controlador ha recibido un IRP_MN_REMOVE_DEVICE para el dispositivo y ha llamado IoReleaseRemoveLockandWait. Esa rutina está esperando que todos los bloqueos se eliminen antes de devolver el control al controlador.

Si la rutina devuelve cualquier valor además de STATUS_SUCCESS, no inicie ninguna nueva operación en el dispositivo.

Un controlador debe inicializar un bloqueo de eliminación con una llamada a IoInitializeRemoveLock antes de usar el bloqueo.

Un controlador debe llamar a IoReleaseRemoveLock para liberar el bloqueo cuando ya no sea necesario.

Para obtener más información, consulte Uso de bloqueos de eliminación.

Requisitos

Requisito Value
Plataforma de destino Escritorio
Encabezado wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
Reglas de cumplimiento de 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)

Consulte también

IoInitializeRemoveLock

IoReleaseRemoveLock

IoReleaseRemoveLockAndWait