Compartilhar via


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)

Consulte também

KeSetTimerEx