Compartir a través de


Macro IoInitializeRemoveLock (wdm.h)

La rutina IoInitializeRemoveLock inicializa un bloqueo de eliminación para un objeto de dispositivo.

Sintaxis

void IoInitializeRemoveLock(
  [in]  Lock,
  [in]  Tag,
  [in]  Maxmin,
  [in]  HighWater
);

Parámetros

[in] Lock

Puntero a una estructura de IO_REMOVE_LOCK proporcionada por el autor de la llamada que esta rutina inicializa con información sobre el bloqueo, incluido un contador y un evento de sincronización. Un escritor de controladores debe asignar esta estructura como parte de la extensión de dispositivo del objeto de dispositivo.

[in] Tag

Especifica una etiqueta para identificar al creador del bloqueo. Los escritores de controladores suelen usar una cadena de 4 caracteres, especificada en orden inverso, como las etiquetas usadas para ExAllocatePoolWithTag.

El sistema de E/S usa este parámetro si el comprobador de controladores está habilitado. El llamador siempre debe proporcionar un valor de etiqueta distinto de cero para este parámetro.

[in] Maxmin

Especifica el número máximo de minutos que se debe mantener este bloqueo. Un valor de cero significa que no hay ningún límite. Este valor se usa normalmente durante la depuración para identificar una rutina de controlador que contiene el bloqueo más largo de lo esperado.

El sistema de E/S usa este parámetro si el comprobador de controladores está habilitado.

[in] HighWater

Especifica el número máximo de adquisiciones pendientes permitidas en el bloqueo. Use 0 para especificar ningún máximo. HighWatermark debe ser <= 0x7FFFFFFF.

El sistema de E/S usa este parámetro si el comprobador de controladores está habilitado.

Valor devuelto

None

Observaciones

Un controlador puede usar un bloqueo de eliminación para realizar un seguimiento de las operaciones de E/S pendientes en un dispositivo y determinar cuándo el controlador puede eliminar su objeto de dispositivo en respuesta a una solicitud de IRP_MN_REMOVE_DEVICE .

Antes de llamar a IoInitializeRemoveLock, un controlador debe asignar una estructura de IO_REMOVE_LOCK en su extensión de dispositivo. Normalmente, un controlador llama a IoInitializeRemoveLock en su rutina AddDevice , cuando el controlador inicializa el resto de la extensión del dispositivo para un objeto de dispositivo.

Una vez que se devuelve la rutina IoReleaseRemoveLockAndWait , el controlador debe considerar que el dispositivo está en un estado en el que está listo para quitarse y no puede realizar operaciones de E/S. Por lo tanto, el controlador no debe llamar a IoInitializeRemoveLock para volver a inicializar el bloqueo de eliminación. La infracción de esta regla mientras el comprobador de controladores comprueba el controlador producirá una comprobación de errores.

Dado que el controlador almacena la estructura IO_REMOVE_LOCK en la extensión de dispositivo de un objeto de dispositivo, el bloqueo de eliminación se elimina cuando el controlador elimina la extensión del dispositivo como parte del procesamiento de una solicitud de IRP_MN_REMOVE_DEVICE .

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 PASSIVE_LEVEL

Consulte también

IoAcquireRemoveLock

IoInitializeRemoveLock

IoReleaseRemoveLock

IoReleaseRemoveLockAndWait