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)

Confira também

KeSetTimerEx