Freigeben über


ExSetTimer-Funktion (wdm.h)

Die ExSetTimer- Routine startet einen Timervorgang und legt fest, dass der Timer zum angegebenen Fälligkeitszeitpunkt abläuft.

Syntax

BOOLEAN ExSetTimer(
  [in]           PEX_TIMER           Timer,
  [in]           LONGLONG            DueTime,
  [in]           LONGLONG            Period,
  [in, optional] PEXT_SET_PARAMETERS Parameters
);

Parameter

[in] Timer

Ein Zeiger auf eine EX_TIMER Struktur. Diese Struktur ist ein Timerobjekt, das zuvor von der ExAllocateTimer Routine zugewiesen wurde.

[in] DueTime

Die absolute oder relative Uhrzeit, 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. Eine absolute Zeit wird als die Zeitspanne ausgedrückt, die seit Beginn des Jahres 1601 in Systemzeiteinheiten vergangen ist.

Der DueTime--Parameter für einen hochauflösenden Timer- muss eine relative Zeit (negativer Wert) oder die Routinefehlerüberprüfungen sein.

[in] Period

Ein optionaler Zeitraum für den Timer in Systemzeiteinheiten (100-Nanosekunden-Intervalle). Muss kleiner oder gleich MAXLONG sein. Legen Sie für einen Zeitgeber, der statt periodisch einen 1-Schuss ist, Punkt auf Null fest.

[in, optional] Parameters

Ein Zeiger auf eine EXT_SET_PARAMETERS Struktur. Der aufrufende Treiber hat zuvor die ExInitializeSetTimerParameters Routine aufgerufen, um diese Struktur zu initialisieren.

Rückgabewert

Diese Routine gibt TRUE zurück, wenn ein Timer abgebrochen wird, der zum Zeitpunkt des Aufrufs der Routine aussteht. Andernfalls gibt die Routine FALSE-zurück. Weitere Informationen finden Sie in den Hinweisen.

Bemerkungen

Ihr Treiber kann diese Routine aufrufen, um einen Timer für den Ablauf zu einem zukünftigen Zeitpunkt festzulegen. Der Treiber kann dann warten, bis der Timer abläuft. Oder der Treiber kann eine Rückrufroutine implementieren, die aufgerufen wird, wenn der Timer abläuft.

Nachdem ein Treiber ExSetTimer-aufgerufen hat, kann der Treiber eine Routine aufrufen, z. B. KeWaitForSingleObject oder KeWaitForMultipleObjects, bis der Timer abläuft. Wenn der Timer abläuft, signalisiert das Betriebssystem das Timerobjekt.

Als Option kann der Treiber eine ExTimerCallback- Rückrufroutine implementieren und einen Zeiger auf diese Routine als Eingabeparameter für die ExAllocateTimer Routine bereitstellen. Wenn der Timer abläuft, ruft das Betriebssystem die ExTimerCallback Routine auf.

Ein ExSetTimer- Aufruf bricht implizit alle zuvor gestarteten Set-Timer-Vorgänge für das durch Timer-angegebene Timerobjekt ab. Wenn Ihr Treiber zuvor ExSetTimer aufgerufen hat, um einen Timer festzulegen, der Timer-verwendet, und dieser Timer ist noch nicht abgelaufen, wenn ExSetTimer- ein zweites Mal aufgerufen wird, bricht der zweite Aufruf den Timer vom ersten Aufruf ab und startet dann den neuen Timer. In diesem Fall gibt der zweite Aufruf TRUEzurück. Wenn der timer, der vom ersten Aufruf gestartet wurde, jedoch abläuft, bevor der zweite Aufruf diesen Timer abbrechen kann, startet der zweite Aufruf den neuen Timer und gibt FALSEzurück.

Wenn der Period Parameter ungleich Null ist, ist der Timer periodisch. Für einen periodischen Timer gibt der DueTime--Parameter die Zeit des anfänglichen Timerablaufs an, und Period gibt das Intervall zwischen nachfolgenden Ablaufzeiten an.

Der für die Systemuhrsignale verwendete Hardwarezeitgeber unterbricht Anforderungen in einheitlichen Intervallen, aber die Behandlung dieser Unterbrechungen kann durch die Unterbrechungsverarbeitung für andere Geräte verzögert werden. Bei einem periodischen Timer kann die Verzögerung von einer periodischen Ablaufzeit bis zur Uhrzeit, zu der das Timerobjekt signalisiert wird, oder die ExTimerCallback- Routineausführung von einem Punkt zum nächsten variieren. Weitere Informationen finden Sie unter Zeitgebergenauigkeit.

Ein periodischer Timer kann nicht mehr als einmal pro Systemuhr-Tick ablaufen. Wenn Sie den Zeitraum eines Timers auf einen Wert festlegen, der kleiner als das Intervall zwischen Systemuhr-Ticks ist, läuft der Timer nicht mehr als einmal pro Systemuhr-Tick ab, kann jedoch dazu führen, dass die Intervalle zwischen aufeinander folgenden Ablaufzeiten variieren, wenn sich die Systemuhrrate ändert. Beispielsweise kann das Betriebssystem die Systemuhrrate vorübergehend erhöhen, um die Anzeigedauer eines hochauflösenden Timers zu erfüllen. Weitere Informationen finden Sie unter High-Resolution Timer.

Bei einem periodischen Timer, der kein hochauflösender Timer ist, kann ein Treiber relativ einheitliche periodische Ablaufzeiten erzielen, indem Period auf ein ganzzahliges Vielfaches des Standardintervalls zwischen Systemuhrstrichen festgelegt wird.

Um einen übermäßigen Stromverbrauch zu vermeiden, sollte ein Treiber nicht den Zeitraum eines long-running high-resolution timers auf einen Wert festlegen, der kleiner als das Standardintervall zwischen Systemuhr-Ticks ist. Andernfalls erzeugt der Systemuhrzeitgeber kontinuierlich Unterbrechungen mit der maximal zulässigen Systemuhrrate.

Weitere Informationen finden Sie unter ExXxxTimer Routines und EX_TIMER Objects.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Verfügbar ab Windows 8.1.
Zielplattform- Universal
Header- wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Library Ntoskrnl.lib
IRQL- <= DISPATCH_LEVEL

Siehe auch

EXT_SET_PARAMETERS

EX_TIMER

ExAllocateTimer-

ExInitializeSetTimerParameters

ExTimerCallback-

KeWaitForMultipleObjects

KeWaitForSingleObject