Rutinas exXxxTimer y objetos EX_TIMER

A partir de Windows 8.1, hay disponible un conjunto completo de rutinas del temporizador ExXxx para administrar temporizadores. Estas rutinas usan objetos de temporizador basados en la estructura EX_TIMER . Las rutinas del temporizador ExXxx son reemplazos para las rutinas del temporizador KeXxx, que están disponibles a partir de Windows 2000. Los controladores diseñados para ejecutarse solo en Windows 8.1 y versiones posteriores de Windows pueden usar las rutinas del temporizador ExXxx en lugar de las rutinas del temporizador KeXxx. Windows 8.1 y versiones posteriores de Windows siguen admitiendo las rutinas de KeXxxTimer.

Las rutinas del temporizador ExXxx tienen todas las funcionalidades importantes que proporcionan las rutinas del temporizador KeXxx. Además, las rutinas del temporizador ExXxx admiten dos tipos de temporizador, temporizadores de alta resolución y temporizadores sin reactivación, que no son compatibles con las rutinas del temporizador KeXxx. Los temporizadores de alta resolución son temporizadores cuyos tiempos de expiración se pueden especificar con mayor precisión que los de temporizadores cuya precisión está limitada por la resolución predeterminada del reloj del sistema. Los temporizadores sin reactivación son temporizadores que evitan reactivar innecesariamente procesadores de estados de bajo consumo. Para obtener más información, vea los temas siguientes:

Temporizadores de alta resolución

Temporizadores sin reactivación

A partir de Windows 8.1, están disponibles las siguientes rutinas del temporizador ExXxx:

ExAllocateTimer

ExSetTimer

ExCancelTimer

ExDeleteTimer

La rutina ExSetTimer se puede usar en lugar de la rutina KeSetTimer o KeSetTimerEx . La rutina ExCancelTimer se puede usar en lugar de la rutina KeCancelTimer .

Las rutinas ExAllocateTimer y ExDeleteTimer no tienen homólogos directos de KeXxxTimer . Estas dos rutinas asignan y liberan un objeto de temporizador. Este objeto de temporizador es una estructura de EX_TIMER asignada por el sistema cuyos miembros son opacos para los controladores. En cambio, el objeto de temporizador utilizado por las rutinas de temporizador KeXxx es una estructura KTIMER asignada por el controlador. El controlador llama a la rutina KeInitializeTimer o KeInitializeTimerEx para inicializar este objeto. ExAllocateTimer inicializa los objetos de temporizador que asigna. Para obtener más información sobre ExDeleteTimer, vea Eliminar un objeto de temporizador de System-Allocated.

EX_TIMER y las estructuras KTIMER son objetos esperables. Después de que un controlador llame a ExSetTimer, KeSetTimer o KeSetTimerEx para establecer un temporizador, el controlador puede llamar a una rutina como KeWaitForSingleObject o KeWaitForMultipleObjects para esperar a que expire el temporizador. El objeto de temporizador se señala cuando expira el temporizador. Como opción, un controlador puede proporcionar un puntero a una rutina de devolución de llamada ExTimerCallback o CustomTimerDpc implementada por el controlador que el sistema operativo llama después de que expire el temporizador.

Las rutinas keXxxTimer tienen dos funcionalidades que no proporcionan las rutinas del temporizador ExXxx, pero la mayoría de los controladores no necesitan estas funcionalidades.

En primer lugar, la estructura KTIMER usada como objeto de temporizador por las rutinas de TemporizadorKe Xxx es asignada por el controlador. El controlador puede asignar previamente este objeto para asegurarse de que el objeto está disponible incluso en circunstancias en las que los recursos están restringidos y se pueden producir errores en las asignaciones de memoria. Por el contrario, una llamada a ExAllocateTimer para asignar un objeto de temporizador podría producir un error en un entorno restringido por recursos. Sin embargo, es necesario diseñar algunos controladores para funcionar en entornos en los que se producen errores en las asignaciones de memoria, y la mayoría de los controladores se benefician de la comodidad de una rutina ExAllocateTimer que asigna e inicializa un objeto de temporizador.

En segundo lugar, no hay ningún equivalente exXxxTimer de la rutina KeReadStateTimer , que indica si un objeto de temporizador está en estado señalado. Sin embargo, esta rutina rara vez se usa. Si es necesario, un controlador que usa las rutinas ex XxxTimer puede comprobar si un objeto de temporizador está en el estado señalado leyendo un valor booleano establecido por la rutina de devolución de llamada ExTimerCallback que el controlador proporciona a la rutina ExAllocateTimer.