KeSetTimerEx-Funktion (wdm.h)

Die KeSetTimerEx-Routine legt das absolute oder relative Intervall fest, in dem ein Timerobjekt auf einen signalierten Zustand festgelegt werden soll, stellt optional eine CustomTimerDpc-Routine bereit, die ausgeführt werden soll, wenn dieses Intervall abläuft, und stellt optional ein wiederkehrendes Intervall für den Timer bereit.

Syntax

BOOLEAN KeSetTimerEx(
  [in, out]      PKTIMER       Timer,
  [in]           LARGE_INTEGER DueTime,
  [in]           LONG          Period,
  [in, optional] PKDPC         Dpc
);

Parameter

[in, out] Timer

Zeiger auf ein Timerobjekt, das mit KeInitializeTimer oder KeInitializeTimerEx initialisiert wurde.

[in] DueTime

Gibt die absolute oder relative Zeit an, zu der der Timer abläuft. Wenn der Wert des DueTime-Parameters negativ ist, ist die Ablaufzeit relativ zur aktuellen Systemzeit. Andernfalls ist die Ablaufzeit absolut. Die Ablaufzeit wird in Systemzeiteinheiten (Intervalle von 100 Nanosekunden) ausgedrückt. Absolute Ablaufzeiten nachverfolgen alle Änderungen der Systemzeit; relative Ablaufzeiten werden von Systemzeitänderungen nicht beeinflusst.

[in] Period

Gibt ein optionales wiederkehrendes Intervall für den Timer in Millisekunden an. Muss ein Wert sein, der größer oder gleich 0 ist. Wenn der Wert dieses Parameters 0 ist, ist der Timer ein nichtperiodischer Timer, der sich selbst nicht automatisch neu in die Warteschlange stellt.

[in, optional] Dpc

Zeiger auf ein DPC-Objekt, das von KeInitializeDpc initialisiert wurde. Dieser Parameter ist optional.

Rückgabewert

Wenn sich das Timerobjekt bereits in der Systemtimerwarteschlange befand, gibt KeSetTimerExTRUE zurück.

Hinweise

Die KeSetTimerEx-Routine führt folgendes aus:

  • Berechnet die Ablaufzeit.

  • Legt den Timer auf einen nicht signalgeschützten Zustand fest.

  • Legt das wiederkehrende Intervall für den Timer fest, sofern eins angegeben wurde.

  • Fügt das Timerobjekt in die Systemtimerwarteschlange ein.

Wenn sich das Timerobjekt bereits in der Timerwarteschlange befand, wird es implizit abgebrochen, bevor es auf die neue Ablaufzeit festgelegt wird. Ein Aufruf von KeSetTimerEx , bevor die zuvor angegebene DueTime abgelaufen ist, bricht sowohl den Timer als auch den Aufruf des Dpc ab, falls vorhanden, der dem vorherigen Aufruf zugeordnet ist.

Ablaufzeiten werden relativ zur Systemuhr gemessen, und die Genauigkeit, mit der das Betriebssystem erkennen kann, wann ein Timer abläuft, wird durch die Granularität der Systemuhr begrenzt. Weitere Informationen finden Sie unter Timergenauigkeit.

Wenn der Dpc-Parameter angegeben wird, wird dem Timerobjekt ein DPC-Objekt zugeordnet. Wenn der Timer abläuft, wird das Timerobjekt aus der Systemtimerwarteschlange entfernt und auf einen signalierten Zustand festgelegt. Wenn ein DPC-Objekt dem Timer zugeordnet war, als es festgelegt wurde, wird das DPC-Objekt in die DPC-Systemwarteschlange eingefügt, um ausgeführt zu werden, sobald die Bedingungen nach Ablauf des Zeitgeberintervalls dies zulassen.

Eine DPC-Routine kann die Zuordnung eines periodischen Timers nicht beheben. Eine DPC-Routine kann die Zuordnung eines nichtperiodischen Timers beheben.

Beachten Sie, dass ein regelmäßiger Timer automatisch neu gestartet wird, sobald er abläuft. Auf einem Multiprozessorcomputer kann der DPC für einen periodischen Timer also gleichzeitig auf zwei Prozessoren ausgeführt werden.

Nur eine Instanziierung eines bestimmten DPC-Objekts kann zu einem bestimmten Zeitpunkt in die Warteschlange gestellt werden. Um potenzielle Racebedingungen zu vermeiden, sollte der an KeSetTimerEx übergebene DPC nicht an KeInsertQueueDpc übergeben werden.

Treiber müssen alle aktiven Timer in ihren Entladen-Routinen abbrechen. Verwenden Sie KeCancelTimer , um alle Zeitgeber abzubrechen.

Weitere Informationen zu Timerobjekten finden Sie unter Timer-Objekte und DPCs.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar ab Windows 2000.
Zielplattform Universell
Header wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI-Complianceregeln HwStorPortProhibitedDDIs(storport), IrqlKeDispatchLte(wdm)

Weitere Informationen

KeCancelTimer

KeInitializeDpc

KeInitializeTimer

KeInitializeTimerEx

KeReadStateTimer

KeWaitForMultipleObjects

KeWaitForSingleObject