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. |