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, optional eine CustomTimerDpc Routine, die ausgeführt werden soll, wenn dieses Intervall abläuft, und optional ein wiederkehrendes Intervall für den Timer bereitstellt.
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 KeInitializeTimerExinitialisiert wurde.
[in] DueTime
Gibt die absolute oder relative Uhrzeit 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 ausgedrückt (100-Nanosekunden-Intervalle). Absolute Ablaufzeiten verfolgen alle Änderungen der Systemzeit; Relative Ablaufzeiten sind von Systemzeitänderungen nicht betroffen.
[in] Period
Gibt ein optionales Wiederkehrendes Intervall für den Timer in Millisekunden an. Muss ein Wert sein, der größer oder gleich Null ist. Wenn der Wert dieses Parameters null ist, ist der Timer ein nichtperioischer Timer, der sich nicht automatisch erneut in die Warteschlange einreiht.
[in, optional] Dpc
Zeiger auf ein DPC-Objekt, das von KeInitializeDpcinitialisiert wurde. Dieser Parameter ist optional.
Rückgabewert
Wenn sich das Timerobjekt bereits in der Systemzeitgeberwarteschlange befand, gibt KeSetTimerEx-TRUE-zurück.
Bemerkungen
Die KeSetTimerEx Routine führt folgende Aktionen aus:
Berechnet die Ablaufzeit.
Legt den Timer auf einen nicht signalisierten Zustand fest.
Legt das Wiederkehrende Intervall für den Timer fest, wenn eins angegeben wurde.
Fügt das Timerobjekt in die Systemzeitgeberwarteschlange ein.
Wenn sich das Timerobjekt bereits in der Zeitgeberwarteschlange befand, wird es implizit abgebrochen, bevor es auf die neue Ablaufzeit festgelegt wird. Ein Aufruf von KeSetTimerEx, bevor die zuvor angegebene DueTime- abgelaufen ist, wird sowohl der Timer als auch der Aufruf des Dpc( falls vorhanden) abgebrochen, der dem vorherigen Aufruf zugeordnet ist.
Die Ablaufzeiten werden relativ zur Systemuhr gemessen, und die Genauigkeit, mit der das Betriebssystem erkennen kann, wann ein Timer abläuft, ist durch die Granularität der Systemuhr begrenzt. Weitere Informationen finden Sie unter Zeitgebergenauigkeit.
Wenn der Dpc Parameter angegeben ist, wird dem Timerobjekt ein DPC-Objekt zugeordnet. Wenn der Timer abläuft, wird das Timerobjekt aus der Systemzeitgeberwarteschlange entfernt und auf einen signalisierten Zustand festgelegt. Wenn ein DPC-Objekt dem Timer zugeordnet war, als er festgelegt wurde, wird das DPC-Objekt in die DPC-Systemwarteschlange eingefügt, sobald Bedingungen nach Ablauf des Zeitgeberintervalls zulässig sind.
Eine DPC-Routine kann einen regelmäßigen Timer nicht behandeln. Eine DPC-Routine kann einen nichtperiodischen Timer behandeln.
Beachten Sie, dass ein periodischer Timer automatisch neu gestartet wird, sobald er abläuft. Auf einer Multiprozessormaschine kann der DPC für einen regelmäßigen Timer auf zwei Prozessoren gleichzeitig ausgeführt werden.
Es kann jeweils nur eine Instanziierung eines bestimmten DPC-Objekts in die Warteschlange gestellt werden. Um potenzielle Rennbedingungen zu vermeiden, sollte der DPC an KeSetTimerEx nicht an KeInsertQueueDpcübergeben werden.
Treiber müssen alle aktiven Timer in ihren Unload Routinen abbrechen. Verwenden Sie KeCancelTimer-, um Timer abzubrechen.
Weitere Informationen zu Timerobjekten finden Sie unter timer Objects and DPCs.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Ab Windows 2000 verfügbar. |
Zielplattform- | Universal |
Header- | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
Library | NtosKrnl.lib |
DLL- | NtosKrnl.exe |
IRQL- | <= DISPATCH_LEVEL |
DDI-Complianceregeln | HwStorPortProhibitedDIs(storport), IrqlKeDispatchLte(wdm) |