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 |