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

Una rutina de devolución de llamada exTimerCallback se ejecuta después de que expire el intervalo de tiempo de un objeto de temporizador de EX_TIMER .

Sintaxis

EXT_CALLBACK ExtCallback;

void ExtCallback(
  [in] PEX_TIMER Timer,
  [in] PVOID Context
)
{...}

Parámetros

[in] Timer

Puntero a una estructura de EX_TIMER . Esta estructura es un objeto de temporizador asignado previamente por la rutina ExAllocateTimer .

[in] Context

Valor de contexto que el controlador proporcionó anteriormente como parámetro CallbackContext de la rutina ExAllocateTimer .

Valor devuelto

None

Observaciones

Como opción, el controlador puede proporcionar un puntero a una rutina ExTimerCallback en el parámetro Callback que el controlador pasa a la rutina ExAllocateTimer . Una vez expirado el temporizador, el sistema operativo llama a la rutina ExTimerCallback .

Para iniciar una operación de temporizador, el controlador pasa el objeto de temporizador como parámetro de entrada a la rutina ExSetTimer . Una vez expirado el temporizador, el sistema operativo programa la rutina ExTimerCallback que se va a ejecutar.

Un objeto de temporizador es un objeto que se puede esperar. Un subproceso de controlador puede llamar a una rutina como KeWaitForSingleObject o KeWaitForMultipleObjects para esperar a que expire el temporizador. Cuando expira el temporizador, el sistema operativo señala el objeto de temporizador.

Es posible que se cancele un temporizador antes de que expire. El controlador puede llamar a la rutina ExCancelTimer para cancelar explícitamente un temporizador. Si el controlador llama a la rutina ExSetTimer para iniciar un nuevo temporizador en un objeto de temporizador antes de que expire un temporizador establecido previamente en este objeto, esta llamada cancela implícitamente el temporizador anterior y, a continuación, inicia el nuevo temporizador.

Una rutina ExTimerCallback puede llamar a una rutina como ExSetTimer o ExDeleteTimer. Si una rutina ExTimerCallback llama a ExDeleteTimer, el parámetro Wait proporcionado en esta llamada debe ser FALSE. Para obtener más información, consulte Eliminación de un objeto de temporizador de System-Allocated.

En un sistema multiprocesador, las devoluciones de llamada exTimerCallback para dos expiraciones sucesivas de un temporizador periódico se pueden ejecutar simultáneamente en dos procesadores diferentes.

Para obtener más información, vea ExXxxTimer Routines and EX_TIMER Objects.

Ejemplos

Para definir una rutina de devolución de llamada exTimerCallback , 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 el tipo de función de devolución de llamada ayuda a Code Analysis for Drivers, Static Driver Verifier (SDV) y otras herramientas de comprobación a encontrar errores y es un requisito para escribir controladores para el sistema operativo Windows.

Por ejemplo, para definir una rutina de devolución de llamada ExTimerCallback denominada MyExTimerCallback, use el tipo de función EXT_CALLBACK, como se muestra en este ejemplo de código:

EXT_CALLBACK  MyExTimerCallback;

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

_Use_decl_annotations_
VOID
  MyExTimerCallback(
    PEX_TIMER  Timer,
    PVOID  Context
    )
  {...}

El tipo de función EXT_CALLBACK 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 EXT_CALLBACK 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 más información sobre _Use_decl_annotations_, vea Anotación del comportamiento de la función.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible a partir de Windows 8.1.
Plataforma de destino Escritorio
Encabezado wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h)
IRQL Se llama en DISPATCH_LEVEL.

Consulte también

EX_TIMER

ExAllocateTimer

ExCancelTimer

ExSetTimer

KeWaitForMultipleObjects

KeWaitForSingleObject