ExSetTimerResolution-Funktion (wdm.h)
Die ExSetTimerResolution Routine ändert die Häufigkeit, mit der die Systemuhr unterbrochen wird. Verwenden Sie diese Routine mit äußerster Vorsicht (siehe den folgenden Abschnitt "Hinweise").
Syntax
ULONG ExSetTimerResolution(
[in] ULONG DesiredTime,
[in] BOOLEAN SetResolution
);
Parameter
[in] DesiredTime
Gibt die Zeitspanne an, die zwischen jedem Timer-Interrupt in 100-Nanosekundeneinheiten verstrichen werden soll. Der Mindestwert beträgt ca. 10.000 (1 Millisekunden), kann aber leicht nach Plattform variieren. (Dieser Parameter wird ignoriert, wenn SetResolution-FALSE-ist.)
[in] SetResolution
Wenn TRUE, ist der Aufruf eine Anforderung, die Taktunterbruchfrequenz auf den wert festzulegen, der durch DesiredTimeangegeben wird. Wenn FALSE, ist der Aufruf eine Anforderung, die Taktunterbrechungshäufigkeit auf den Standardwert des Systems wiederherzustellen, der plattformspezifisch ist.
Rückgabewert
ExSetTimerResolution gibt die neue Zeitgeberauflösung in 100-Nanosekundeneinheiten zurück.
Bemerkungen
Um die Timerauflösung festzulegen, ruft ein Treiber diese Routine auf, die TRUE als Parameter für SetResolution-übergibt. Die folgenden Regeln gelten:
Die Routine ändert die Taktunterbruchhäufigkeit nur, wenn der angegebene wert DesiredTime kleiner als die aktuelle Einstellung ist.
Wenn ein Treiber einen DesiredTime- Wert anfordert, der größer ist als das, was derzeit festgelegt ist, gibt die Routine einfach die aktuelle Einstellung zurück.
Wenn ein Treiber einen DesiredTime- Wert anfordert, der kleiner als die Systemuhr ist, verwendet die Routine die kleinste Auflösung, die das System unterstützen kann, und gibt diesen Wert zurück.
Wenn Sie diese Routine verwenden, um die Taktunterbruchhäufigkeit zu ändern, muss Der Treiber die Standardunterbruchfrequenz wiederherstellen, in der Regel durch Ausführen des folgenden Aufrufs, bevor er entladen wird:
ExSetTimerResolution (0, FALSE);
Wenn mehrere Treiber versucht haben, die Taktunterbruchfrequenz zu ändern, stellt das System die Standardhäufigkeit erst wieder her, wenn alle diese Treiber diese Routine mit einem SetResolution Wert von FALSEaufgerufen haben.
Das Ergebnis einer Änderung der Taktunterbruchhäufigkeit ist systemweit und kann stark negative Auswirkungen auf die Systemleistung haben. Beachten Sie auch, dass höhere Taktunterbruchfrequenzen die Akkulaufzeit eines Systems verkürzen können.
Während der Verarbeitung einer IRP_MJ_POWER Anforderung hält der Power Manager eine Sperre für eine Ressource, die ExSetTimerResolution abrufen muss, um den Vorgang abzuschließen. Folglich tritt ein Deadlock auf, wenn ein Treiber ExSetTimerResolution während der Verarbeitung einer Energieanforderung direkt oder indirekt aufruft, und wartet dann, bis der Aufruf ExSetTimerResolution, bevor der Treiber die Energieanforderung abgeschlossen hat. Weitere Informationen zum sicheren Aufrufen von ExSetTimerResolution beim Verarbeiten eines Strom-IRP finden Sie unter Aufrufen von ExSetTimerResolution While Processing a Power IRP.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform- | Universal |
Header- | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
Library | NtosKrnl.lib |
DLL- | NtosKrnl.exe |
IRQL- | IRQL-<= APC_LEVEL |
DDI-Complianceregeln | HwStorPortProhibitedDDIs(storport), IrqlExApcLte2(wdm) |