IO_CSQ_ACQUIRE_LOCK función de devolución de llamada (wdm.h)
El sistema usa la rutina CsqAcquireLock para adquirir el bloqueo de una cola IRP implementada por el controlador y segura para cancelar.
Sintaxis
IO_CSQ_ACQUIRE_LOCK IoCsqAcquireLock;
void IoCsqAcquireLock(
[in] PIO_CSQ Csq,
[out] PKIRQL Irql
)
{...}
Parámetros
[in] Csq
Puntero a la estructura de IO_CSQ para la cola irP segura de cancelación.
[out] Irql
Puntero a una variable que la rutina de CsqAcquireLock puede usar para almacenar el IRQL actual. El sistema pasa el valor almacenado CsqReleaseLock cuando libera el bloqueo.
Valor devuelto
Ninguno
Observaciones
El controlador especifica la rutina de CsqAcquireLock para una cola IRP segura para cancelar cuando inicializa la estructura IO_CSQ de la cola. El controlador especifica la rutina como el parámetro CsqAcquireLock de IoCsqInitialize o ioCsqInitializeEx cuando inicializa IO_CSQ. Para obtener más información, consulte Cancel-Safe colas de IRP.
El sistema llama a esta rutina para adquirir un bloqueo en la cola IRP del controlador antes de intentar insertar o quitar un IRP de la cola. El sistema llama a la rutina de CsqReleaseLock para liberar el bloqueo.
Si el controlador usa un bloqueo de número para implementar el bloqueo para la cola, debe almacenar el IRQL actual para cuando libera el bloqueo de giro. El sistema pasa un puntero a una variable IRQL que el controlador puede usar para almacenar el IRQL actual. El sistema pasa el valor almacenado como parámetro irql a CsqReleaseLock cuando libera el bloqueo. De lo contrario, el controlador puede omitir el parámetro Irql. Para obtener información sobre los bloqueos de número, consulte bloqueos de número.
Los controladores pueden usar cualquier mecanismo de bloqueo para bloquear la cola, como las exclusiones mutuas. Para obtener más información sobre las exclusión mutuas, vea Objetos de exclusión mutua.
Ejemplos
Para definir un CsqAcquireLock rutina de devolución de llamada, primero debe proporcionar una declaración de función que identifique el tipo de rutina de devolución de llamada que está definiendo. Windows proporciona un conjunto de tipos de función de devolución de llamada para controladores. Declarar una función mediante los tipos de función de devolución de llamada ayuda a Análisis de código para controladores, comprobador de controladores estáticos (SDV) y otras herramientas de comprobación encuentran errores y es un requisito para escribir controladores para el sistema operativo Windows.
Por ejemplo, para definir un CsqAcquireLock rutina de devolución de llamada denominada MyCsqAcquireLock
, use el tipo IO_CSQ_ACQUIRE_LOCK tal como se muestra en este ejemplo de código:
IO_CSQ_ACQUIRE_LOCK MyCsqAcquireLock;
A continuación, implemente la rutina de devolución de llamada de la siguiente manera:
_Use_decl_annotations_
VOID
MyCsqAcquireLock(
PIO_CSQ Csq,
PKIRQL Irql
)
{
// Function body
}
El tipo de función IO_CSQ_ACQUIRE_LOCK se define en el archivo de encabezado Wdm.h. Para identificar con mayor precisión los errores al ejecutar las herramientas de análisis de código, asegúrese de agregar la anotación _Use_decl_annotations_
a la definición de función. La anotación _Use_decl_annotations_
garantiza que se usen las anotaciones que se aplican al tipo de función IO_CSQ_ACQUIRE_LOCK en el archivo de encabezado. Para obtener más información sobre los requisitos de las declaraciones de función, vea Declarar funciones mediante tipos de rol de función para controladores WDM. Para obtener información sobre _Use_decl_annotations_
, vea Anotación del comportamiento de la función.
Requisitos
Requisito | Valor |
---|---|
de la plataforma de destino de | Escritorio |
encabezado de | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
irQL | Consulte la sección Comentarios. |