Función ExSetTimerResolution (wdm.h)
La rutina ExSetTimerResolution modifica la frecuencia con la que se interrumpe el reloj del sistema. Use esta rutina con extrema precaución (consulte la siguiente sección Comentarios).
Sintaxis
ULONG ExSetTimerResolution(
[in] ULONG DesiredTime,
[in] BOOLEAN SetResolution
);
Parámetros
[in] DesiredTime
Especifica la cantidad de tiempo que debe transcurrir entre cada interrupción del temporizador, en unidades de 100 nanosegundos. El valor mínimo es de aproximadamente 10 000 (1 milisegundos), pero puede variar ligeramente según la plataforma. (Este parámetro se omite si SetResolution es FALSE).
[in] SetResolution
Si es TRUE, la llamada es una solicitud para establecer la frecuencia de interrupción del reloj en el valor especificado por DesiredTime. Si es FALSE, la llamada es una solicitud para restaurar la frecuencia de interrupción del reloj al valor predeterminado del sistema, que es específico de la plataforma.
Valor devuelto
ExSetTimerResolution devuelve la nueva resolución del temporizador, en unidades de 100 nanosegundos.
Comentarios
Para establecer la resolución del temporizador, un controlador llama a esta rutina pasando TRUE como parámetro para SetResolution. Se aplican las reglas siguientes:
La rutina cambia la frecuencia de interrupción del reloj solo si el valor DesiredTime especificado es menor que la configuración actual.
Si un controlador solicita un valor DesiredTime mayor que el establecido actualmente, la rutina simplemente devuelve la configuración actual.
Si un controlador solicita un valor DesiredTime menor que el reloj del sistema puede admitir, la rutina usa la resolución más pequeña que el sistema puede admitir y devuelve ese valor.
Si usa esta rutina para cambiar la frecuencia de interrupción del reloj, el controlador debe restaurar la frecuencia de interrupción predeterminada, normalmente realizando la siguiente llamada antes de descargarse:
ExSetTimerResolution (0, FALSE);
Si varios controladores han intentado modificar la frecuencia de interrupción del reloj, el sistema no restaura la frecuencia predeterminada hasta que todos estos controladores hayan llamado a esta rutina con un valor SetResolution de FALSE.
El resultado de cambiar la frecuencia de interrupción del reloj es en todo el sistema y puede tener un efecto gravemente negativo en el rendimiento del sistema. Tenga en cuenta también que las frecuencias de interrupción del reloj más altas pueden acortar la duración de la batería de un sistema.
Durante el procesamiento de una solicitud de IRP_MJ_POWER , el administrador de energía contiene un bloqueo en un recurso que ExSetTimerResolution debe adquirir para completarse. Por lo tanto, se producirá un interbloqueo si un controlador llama directa o indirectamente a ExSetTimerResolution mientras procesa una solicitud de energía y, a continuación, espera a que la llamada a ExSetTimerResolution vuelva antes de que el controlador complete la solicitud de energía. Para obtener más información sobre cómo llamar de forma segura a ExSetTimerResolution durante el procesamiento de un IRP de energía, vea Llamar a ExSetTimerResolution While Processing a Power IRP.
Requisitos
Requisito | Value |
---|---|
Plataforma de destino | Universal |
Encabezado | wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h) |
Library | NtosKrnl.lib |
Archivo DLL | NtosKrnl.exe |
IRQL | IRQL <= APC_LEVEL |
Reglas de cumplimiento de DDI | HwStorPortProhibitedDIs(storport), IrqlExApcLte2(wdm) |