Macro IoReleaseRemoveLock (wdm.h)

La rutina IoReleaseRemoveLock libera un bloqueo de eliminación adquirido con una llamada anterior a IoAcquireRemoveLock.

Sintaxis

void IoReleaseRemoveLock(
  [in]  RemoveLock,
  [in]  Tag
);

Parámetros

[in] RemoveLock

Puntero a una estructura de IO_REMOVE_LOCK que el autor de la llamada pasó a una llamada anterior a IoAcquireRemoveLock.

[in] Tag

Puntero a una etiqueta proporcionada por el autor de la llamada que se pasó a una llamada anterior a IoAcquireRemoveLock.

Si un controlador especificó una etiqueta cuando adquirió el bloqueo, el controlador debe especificar la misma etiqueta al liberar el bloqueo.

Si la llamada a IoAcquireRemoveLock no especificó una etiqueta, este parámetro es NULL.

Valor devuelto

None

Observaciones

Un controlador llama a IoReleaseRemoveLock cuando ha completado la operación de E/S para la que llamó IoAcquireRemoveLock.

  • En el caso de las operaciones de E/S (incluidos los IRP de alimentación y PnP) que establecen una rutina de IoCompletion , un controlador debe llamar a IoReleaseRemoveLock en la rutina IoCompletion , después de llamar a IoCompleteRequest.
  • Para las operaciones de E/S que no establecen una rutina de IoCompletion , un controlador debe llamar a IoReleaseRemoveLock después de pasar el IRP actual al controlador inferior siguiente, pero antes de salir de la rutina de envío.
Cada llamada a IoAcquireRemoveLock debe tener una llamada correspondiente a IoReleaseRemoveLock.

IoReleaseRemoveLock disminuye el recuento de adquisiciones pendientes del bloqueo de eliminación. Si el recuento va a cero y el controlador ha recibido una solicitud de IRP_MN_REMOVE_DEVICE , IoReleaseRemoveLock establece un evento interno. Cuando un controlador está listo para eliminar un objeto de dispositivo, llama a una rutina similar , IoReleaseRemoveLockAndWait. El controlador realiza esta llamada solo en su código de envío para una solicitud de IRP_MN_REMOVE_DEVICE . La rutina IoReleaseRemoveLockAndWait no devuelve hasta que IoReleaseRemoveLock establece el evento que indica que el recuento de adquisiciones es cero. Después de que IoReleaseRemoveLockAndWait vuelva, el controlador puede desasociar y eliminar el objeto de dispositivo de forma segura.

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

Requisitos

Requisito Value
Cliente mínimo compatible Disponible a partir de Windows 2000.
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 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)

Consulte también

IoAcquireRemoveLock

IoInitializeRemoveLock

IoReleaseRemoveLockAndWait