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

El sistema usa la rutina CsqInsertIrpEx para insertar un IRP en una cola irP implementada por el controlador y segura para cancelar.

Sintaxis

IO_CSQ_INSERT_IRP_EX IoCsqInsertIrpEx;

NTSTATUS IoCsqInsertIrpEx(
  [in] _IO_CSQ *Csq,
  [in] PIRP Irp,
  [in] PVOID InsertContext
)
{...}

Parámetros

[in] Csq

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

[in] Irp

Puntero al IRP que se va a insertar en la cola irP.

[in] InsertContext

Puntero al contexto definido por el controlador para la operación de inserción.

Valor devuelto

CsqInsertIrpEx devuelve STATUS_SUCCESS si el IRP se ha insertado correctamente o el código de error adecuado en caso de error.

Comentarios

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

La rutina IoCsqInsertIrpEx llama a CsqInsertIrpEx para insertar el IRP en la cola. El parámetro InsertContext de IoCsqInsertIrpEx se pasa como el parámetro InsertContext de CsqInsertIrpEx.

Ejemplos

Para definir una rutina de devolución de llamada de CsqInsertIrpEx , 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 CsqInsertIrpEx denominada MyCsqInsertIrpEx, use el tipo de IO_CSQ_INSERT_IRP_EX como se muestra en este ejemplo de código:

IO_CSQ_INSERT_IRP_EX MyCsqInsertIrpEx;

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

_Use_decl_annotations_
NTSTATUS
 MyCsqInsertIrpEx(
    struct _IO_CSQ  *Csq,
    PIRP  Irp,
    PVOID  InsertContext
    )
  {
      // Function body
  }

El tipo de función IO_CSQ_INSERT_IRP_EX 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_INSERT_IRP_EX 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

CsqPeekNextIrp

CsqReleaseLock

CsqRemoveIrp

IO_CSQ

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp

IoCsqInsertIrpEx

IoCsqRemoveIrp

IoCsqRemoveNextIrp