IO_CSQ_RELEASE_LOCK función de devolución de llamada (wdm.h)

El sistema usa la rutina CsqReleaseLock para liberar el bloqueo adquirido mediante CsqAcquireLock.

Sintaxis

IO_CSQ_RELEASE_LOCK IoCsqReleaseLock;

void IoCsqReleaseLock(
  [in] PIO_CSQ Csq,
  [in] KIRQL Irql
)
{...}

Parámetros

[in] Csq

Puntero a la estructura de IO_CSQ para la cola irP segura de cancelación.

[in] Irql

Especifica un IRQL. Este es el valor almacenado por CsqAcquireLock cuando se adquirió el bloqueo.

Valor devuelto

None

Observaciones

El controlador especifica la rutina CsqReleaseLock para una cola irP segura para cancelar cuando inicializa la estructura de IO_CSQ de la cola. El controlador especifica la rutina como el parámetro CsqReleaseLock de IoCsqInitialize o IoCsqInitializeEx al inicializar IO_CSQ. Para obtener más información, consulte Cancel-Safe IRP Queues (Colas irP seguras para cancelar).

El sistema llama a esta función para liberar un bloqueo adquirido mediante CsqAcquireLock.

Si el controlador usa un bloqueo de número para implementar el bloqueo para la cola, debe almacenar el IRQL actual cuando adquiere el bloqueo y proporcionar el IRQL almacenado cuando libera el bloqueo. La rutina CsqAcquireLock almacena el IRQL actual y el sistema pasa el valor almacenado como parámetro Irql a CsqReleaseLock. De lo contrario, el controlador puede omitir el parámetro Irql . Para obtener información sobre los bloqueos de giro, consulte Bloqueos de número.

Los controladores pueden usar cualquier mecanismo de bloqueo para bloquear la cola, como las exclusión mutuas. Para obtener más información sobre las exclusiones mutuas, vea Objetos de exclusión mutua.

Ejemplos

Para definir una rutina de devolución de llamada de CsqReleaseLock , 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 Code Analysis for Drivers, Static Driver Verifier (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 una rutina de devolución de llamada de CsqReleaseLock denominada MyCsqReleaseLock, use el tipo IO_CSQ_RELEASE_LOCK como se muestra en este ejemplo de código:

IO_CSQ_RELEASE_LOCK MyCsqReleaseLock;

A continuación, implemente la rutina de devolución de llamada de la siguiente manera:

_Use_decl_annotations_
VOID 
 MyCsqReleaseLock(
    PIO_CSQ  Csq,
    KIRQL  Irql
    )
  {
      // Function body
  }

El tipo de función IO_CSQ_RELEASE_LOCK se define en el archivo de encabezado Wdm.h. Para identificar con más precisión los errores al ejecutar las herramientas de análisis de código, asegúrese de agregar la anotación a la _Use_decl_annotations_ definición de la función. La _Use_decl_annotations_ anotación garantiza que se usen las anotaciones que se aplican al tipo de función IO_CSQ_RELEASE_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 roles de función para controladores WDM. Para obtener información sobre _Use_decl_annotations_, consulte Anotación del comportamiento de la función.

Requisitos

Requisito Value
Plataforma de destino Escritorio
Encabezado wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h)

Consulte también

CsqAcquireLock

CsqCompleteCanceledIrp

CsqInsertIrp

CsqInsertIrpEx

CsqPeekNextIrp

CsqRemoveIrp

IO_CSQ

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp

IoCsqInsertIrpEx

IoCsqRemoveIrp

IoCsqRemoveNextIrp