Função ExSetTimerResolution (wdm.h)
A rotina ExSetTimerResolution modifica a frequência em que o relógio do sistema interrompe. Use essa rotina com extrema cautela (consulte a seção Comentários a seguir).
Sintaxe
ULONG ExSetTimerResolution(
[in] ULONG DesiredTime,
[in] BOOLEAN SetResolution
);
Parâmetros
[in] DesiredTime
Especifica a quantidade de tempo que deve decorrer entre cada interrupção do temporizador, em unidades de 100 nanossegundos. O valor mínimo é de aproximadamente 10.000 (1 milissegundo), mas pode variar ligeiramente por plataforma. (Esse parâmetro será ignorado se SetResolution for FALSE.)
[in] SetResolution
Se TRUE, a chamada será uma solicitação para definir a frequência de interrupção do relógio para o valor especificado por DesiredTime. Se FALSE, a chamada será uma solicitação para restaurar a frequência de interrupção do relógio para o valor padrão do sistema, que é específico da plataforma.
Valor de retorno
ExSetTimerResolution retorna a nova resolução de temporizador, em unidades de 100 nanossegundos.
Observações
Para definir a resolução do temporizador, um driver chama essa rotina passando verdadeiro como o parâmetro para setResolution. As seguintes regras se aplicam:
A rotina altera a frequência de interrupção do relógio somente se o valor DesiredTime especificado for menor que a configuração atual.
Se um driver solicitar um DesiredTime valor maior do que o definido no momento, a rotina retornará apenas a configuração atual.
Se um driver solicitar um DesiredTime valor menor do que o relógio do sistema pode dar suporte, a rotina usará a menor resolução que o sistema pode dar suporte e retornará esse valor.
Se você usar essa rotina para alterar a frequência de interrupção do relógio, o driver deverá restaurar a frequência de interrupção padrão, normalmente fazendo a seguinte chamada antes de ser descarregado:
ExSetTimerResolution (0, FALSE);
Se vários drivers tentarem modificar a frequência de interrupção do relógio, o sistema não restaurará a frequência padrão até que todos esses drivers tenham chamado essa rotina com um SetResolution valor de FALSE.
O resultado da alteração da frequência de interrupção do relógio é em todo o sistema e pode ter um efeito severamente negativo no desempenho do sistema. Observe também que frequências de interrupção de relógio mais altas podem reduzir a duração da bateria de um sistema.
Durante o processamento de uma solicitação de IRP_MJ_POWER, o power manager mantém um bloqueio em um recurso que exSetTimerResolution deve adquirir para concluir. Consequentemente, um deadlock ocorrerá se um driver chamar direta ou indiretamente ExSetTimerResolution durante o processamento de uma solicitação de energia e aguardar a chamada para exSetTimerResolution retornar antes que o driver conclua a solicitação de energia. Para obter mais informações sobre como chamar com segurança ExSetTimerResolution durante o processamento de um IRP de energia, consulte Chamando ExSetTimerResolution durante o processamento de um power IRP.
Requisitos
Requisito | Valor |
---|---|
da Plataforma de Destino | Universal |
cabeçalho | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
biblioteca | NtosKrnl.lib |
de DLL | NtosKrnl.exe |
IRQL | IRQL <= APC_LEVEL |
regras de conformidade de DDI | HwStorPortProhibitedDIs(storport), IrqlExApcLte2(wdm) |