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 folgenden Abschnitt "Hinweise").

Syntax

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

Parameter

[in] DesiredTime

Gibt die Zeitspanne an, die zwischen den einzelnen Timerunterbrechungen in 100 Nanosekundeneinheiten vergehen soll. Der Mindestwert beträgt ca. 10.000 (1 Millisekunde), kann jedoch je nach Plattform leicht variieren. (Dieser Parameter wird ignoriert, wenn SetResolutionauf FALSE festgelegt ist.)

[in] SetResolution

Wenn TRUE, ist der Aufruf eine Anforderung zum Festlegen der Taktunterbrechungshäufigkeit auf den von DesiredTime angegebenen Wert. Bei FALSE handelt es sich bei dem Aufruf um eine Anforderung zum Wiederherstellen der Taktunterbrechungshäufigkeit auf den Standardwert des Systems, der plattformspezifisch ist.

Rückgabewert

ExSetTimerResolution gibt die neue Timerauflösung in 100 Nanosekundeneinheiten zurück.

Hinweise

Um die Timerauflösung festzulegen, ruft ein Treiber diese Routine auf und übergibt TRUE als Parameter für SetResolution. Es gelten die folgenden Regeln:

  • Die Routine ändert die Taktunterbrechungshäufigkeit nur, wenn der angegebene DesiredTime-Wert kleiner als die aktuelle Einstellung ist.

  • Wenn ein Treiber einen DesiredTime-Wert anfordert, der größer ist als der aktuell festgelegte Wert, gibt die Routine nur die aktuelle Einstellung zurück.

  • Wenn ein Treiber einen DesiredTime-Wert anfordert, der kleiner ist, als die Systemuhr unterstützen kann, 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 Taktunterbrechungshäufigkeit zu ändern, muss Der Treiber die Standardunterbrechungshäufigkeit wiederherstellen. In der Regel führt er den folgenden Aufruf aus, bevor er entladen wird:

ExSetTimerResolution (0, FALSE);

Wenn mehrere Treiber versucht haben, die Taktunterbrechungshäufigkeit zu ändern, stellt das System die Standardhäufigkeit erst wieder her, wenn alle diese Treiber diese Routine mit dem SetResolution-WertFALSE aufgerufen haben.

Das Ergebnis einer Änderung der Taktunterbrechungshäufigkeit ist systemweit und kann sich stark negativ auf die Systemleistung auswirken. Beachten Sie auch, dass höhere Taktunterbrechungsfrequenzen 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 sie abzuschließen. Folglich tritt ein Deadlock auf, wenn ein Treiber während der Verarbeitung einer Energieanforderung direkt oder indirekt ExSetTimerResolution aufruft und dann wartet, bis der Aufruf von ExSetTimerResolution zurückgegeben wird, bevor der Treiber die Energieanforderung abgeschlossen hat. Weitere Informationen zum sicheren Aufrufen von ExSetTimerResolution während der Verarbeitung eines Leistungs-IRP finden Sie unter Aufrufen von ExSetTimerResolution während der Verarbeitung eines Power IRP.

Anforderungen

Anforderung Wert
Zielplattform Universell
Header wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= APC_LEVEL
DDI-Complianceregeln HwStorPortProhibitedDIs(storport), IrqlExApcLte2(wdm)

Weitere Informationen

KeSetTimerEx