KeDelayExecutionThread-Funktion (wdm.h)

Die KeDelayExecutionThread-Routine versetzt den aktuellen Thread für ein angegebenes Intervall in einen warnbaren oder nicht verwertbaren Wartezustand.

Syntax

NTSTATUS KeDelayExecutionThread(
  [in] KPROCESSOR_MODE WaitMode,
  [in] BOOLEAN         Alertable,
  [in] PLARGE_INTEGER  Interval
);

Parameter

[in] WaitMode

Gibt den Prozessormodus an, in dem der Aufrufer wartet, der entweder KernelMode oder UserMode sein kann. Treiber auf niedrigerer Ebene sollten KernelMode angeben.

[in] Alertable

Gibt TRUE an, wenn die Wartezeit warnungsfähig ist. Treiber auf niedrigerer Ebene sollten FALSE angeben.

[in] Interval

Gibt die absolute oder relative Zeit in Einheiten von 100 Nanosekunden an, für die die Wartezeit erfolgen soll. Ein negativer Wert gibt die relative Zeit an. Absolute Ablaufzeiten verfolgen alle Änderungen der Systemzeit; relative Ablaufzeiten werden von Systemzeitänderungen nicht beeinflusst.

Rückgabewert

KeDelayExecutionThread gibt einen der folgenden Werte zurück, der beschreibt, wie die Verzögerung abgeschlossen wurde:

Rückgabecode Beschreibung
STATUS_SUCCESS
Die Verzögerung wurde abgeschlossen, da das angegebene Intervall abgelaufen ist.
STATUS_ALERTED
Die Verzögerung wurde abgeschlossen, da der Thread benachrichtigt wurde.
STATUS_USER_APC
Ein Benutzermodus-APC wurde übermittelt, bevor das angegebene Intervall abgelaufen ist.
 

Beachten Sie, dass das NT_SUCCESS Makro alle diese status Werte als "Erfolgswerte" erkennt.

Hinweise

Die Ablaufzeit wird berechnet, und der aktuelle Thread wird in einen Wartezustand versetzt. Wenn das angegebene Intervall überschritten wurde, beendet der Thread den Wartezustand und wird in den Status Bereit versetzt, soweit er für die Ausführung berechtigt ist.

Der Alertable-Parameter bestimmt, wann der Thread gewarnt werden kann und sein Wartezustand folglich abgebrochen wird. Weitere Informationen finden Sie unter Wartevorgänge und APCs.

Wenn der WaitMode-ParameterUserMode ist, kann der Kernelstapel während der Wartezeit ausgetauscht werden. Folglich darf ein Aufrufer niemals versuchen, Parameter für den Stapel zu übergeben, wenn KeDelayExecutionThread mit dem UserMode-Argument aufgerufen wird.

Es ist besonders wichtig, den Rückgabewert von KeDelayExecutionThread zu überprüfen, wenn der WaitMode-ParameterUserMode oder AlertableTRUE ist, da KeDelayExecutionThread möglicherweise frühzeitig mit einer status von STATUS_USER_APC oder STATUS_ALERTED zurückgegeben wird.

Alle langfristigen Wartezeiten, die von einem Benutzer abgebrochen werden können, sollten userMode waits und Alertable auf FALSE festgelegt werden.

Wenn möglich, sollte Alertable auf FALSE und WaitMode auf KernelMode festgelegt werden, um die Treiberkomplexität zu verringern. Die Hauptausnahme von dieser Richtlinie ist, wenn es sich bei der Wartezeit um eine langfristige Wartezeit handelt.

Die Ablaufzeit der Verzögerung wird entweder als absoluter Zeitpunkt ausgedrückt, zu dem die Verzögerung abläuft, oder als Zeit relativ zur aktuellen Systemzeit. Wenn der Wert des Interval-Parameters positiv ist, ist die Ablaufzeit eine absolute Zeit. Wenn dieser Wert negativ ist, ist die Ablaufzeit eine relative Zeit.

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.

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 <= APC_LEVEL
DDI-Complianceregeln HwStorPortProhibitedDIs(storport), IrqlKeApcLte1(wdm), PowerIrpDDis(wdm)

Weitere Informationen

KeQuerySystemTime