Funzione ExSetTimerResolution (wdm.h)

La routine ExSetTimerResolution modifica la frequenza in cui viene interrotto l'orologio di sistema. Usare questa routine con attenzione estrema (vedere la sezione Osservazioni seguenti).

Sintassi

ULONG ExSetTimerResolution(
  [in] ULONG   DesiredTime,
  [in] BOOLEAN SetResolution
);

Parametri

[in] DesiredTime

Specifica la quantità di tempo che deve essere trascorsa tra ogni interruzione timer, in unità da 100 nanosecondi. Il valore minimo è circa 10.000 (1 millisecondo), ma può variare leggermente in base alla piattaforma. Questo parametro viene ignorato se SetResolution è FALSE.

[in] SetResolution

Se TRUE, la chiamata è una richiesta per impostare la frequenza di interruzione dell'orologio sul valore specificato da DesiredTime. Se FALSE, la chiamata è una richiesta per ripristinare la frequenza di interruzione dell'orologio al valore predefinito del sistema, che è specifico della piattaforma.

Valore restituito

ExSetTimerResolution restituisce la nuova risoluzione timer, in 100-nanosecondi.

Commenti

Per impostare la risoluzione del timer, un driver chiama questa routine passando TRUE come parametro per SetResolution. Sono applicabili le regole seguenti:

  • La routine modifica la frequenza di interruzione dell'orologio solo se il valore DesiredTime specificato è minore dell'impostazione corrente.

  • Se un driver richiede un valore DesiredTime maggiore di quello attualmente impostato, la routine restituisce solo l'impostazione corrente.

  • Se un driver richiede un valore DesiredTime minore dell'orologio di sistema può supportare, la routine usa la risoluzione più piccola che il sistema può supportare e restituisce tale valore.

Se si usa questa routine per modificare la frequenza di interruzione dell'orologio, il driver deve ripristinare la frequenza di interruzione predefinita, in genere eseguendo la chiamata seguente prima di essere scaricata:

ExSetTimerResolution (0, FALSE);

Se più driver hanno tentato di modificare la frequenza di interruzione dell'orologio, il sistema non ripristina la frequenza predefinita fino a quando tutti questi driver non hanno chiamato questa routine con un valore SetResolution di FALSE.

Il risultato della modifica della frequenza di interruzione dell'orologio è a livello di sistema e può avere un effetto gravemente negativo sulle prestazioni del sistema. Si noti anche che le frequenze di interruzione del clock più elevate possono ridurre la durata della batteria di un sistema.

Durante l'elaborazione di una richiesta di IRP_MJ_POWER , power manager contiene un blocco su una risorsa che ExSetTimerResolution deve acquisire. Di conseguenza, un deadlock si verifica se un driver chiama direttamente o indirettamente ExSetTimerResolution durante l'elaborazione di una richiesta di alimentazione e quindi attende che la chiamata a ExSetTimerResolution venga restituita prima che il driver completi la richiesta di alimentazione. Per altre informazioni sulla chiamata sicura di ExSetTimerResolution durante l'elaborazione di un'IRP di alimentazione, vedere Chiamata di ExSetTimerResolution durante l'elaborazione di un'IRP di Power.

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= APC_LEVEL
Regole di conformità DDI HwStorPortProhibitedDDDIs(storport), IrqlExApcLte2(wdm)

Vedi anche

KeSetTimerEx