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 decorrido 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.
Retornar valor
ExSetTimerResolution retorna a nova resolução de temporizador, em unidades de 100 nanossegundos.
Comentários
Para definir a resolução do temporizador, um driver chama essa rotina passando TRUE como o parâmetro para SetResolution. As seguintes regras se aplicam:
A rotina alterará 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 valor DesiredTime maior do que o que está definido no momento, a rotina retornará apenas a configuração atual.
Se um driver solicitar um valor DesiredTime menor que o relógio do sistema, 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 valor SetResolution de FALSE.
O resultado da alteração da frequência de interrupção do relógio é de 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 ser concluído. Consequentemente, um deadlock ocorrerá se um driver chamar ExSetTimerResolution direta ou indiretamente 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 ExSetTimerResolution com segurança durante o processamento de um IRP de energia, consulte Chamando ExSetTimerResolution ao processar um Power IRP.
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Universal |
Cabeçalho | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
Biblioteca | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | IRQL <= APC_LEVEL |
Regras de conformidade de DDI | HwStorPortProhibitedDIs(storport), IrqlExApcLte2(wdm) |