Funzione ExSetTimerResolution (wdm.h)
La routine ExSetTimerResolution modifica la frequenza con cui si interrompe l'orologio di sistema. Utilizzare questa routine con estrema cautela (vedere la sezione Osservazioni seguente).
Sintassi
ULONG ExSetTimerResolution(
[in] ULONG DesiredTime,
[in] BOOLEAN SetResolution
);
Parametri
[in] DesiredTime
Specifica la quantità di tempo che deve trascorrere tra ogni interrupt timer, in unità di 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, ovvero specifico della piattaforma.
Valore restituito
exSetTimerResolution restituisce la nuova risoluzione timer, in unità da 100 nanosecondi.
Osservazioni
Per impostare la risoluzione del timer, un driver chiama questa routine passando TRUE come parametro per SetResolution. Si applicano 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 del clock 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 effettuando 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 finché 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 frequenze di interruzione dell'orologio più elevate possono ridurre la durata della batteria di un sistema.
Durante l'elaborazione di una richiesta di IRP_MJ_POWER, il risparmio energia mantiene un blocco su una risorsa che ExSetTimerResolution deve acquisire per completare. Di conseguenza, si verificherà un deadlock se un driver chiama direttamente o indirettamente exSetTimerResolution durante l'elaborazione di una richiesta di alimentazione e quindi attende che la chiamata a ExSetTimerResolution di restituire prima che il driver completi la richiesta di alimentazione. Per altre informazioni sulla chiamata sicura exSetTimerResolution durante l'elaborazione di un IRP per l'alimentazione, vedere Chiamata di ExSetTimerResolution durante l'elaborazione di unpower IRP.
Fabbisogno
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 | HwStorPortProhibitedDDIs(storport), IrqlExApcLte2(wdm) |