KeDelayExecutionThread-Funktion (wdm.h)
Die KeDelayExecutionThread Routine versetzt den aktuellen Thread in einen warnbaren oder nicht veränderlichen Wartezustand für ein angegebenes Intervall.
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 warnbar 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 eintritt. Ein negativer Wert gibt die relative Zeit an. Absolute Ablaufzeiten verfolgen alle Änderungen der Systemzeit; Relative Ablaufzeiten sind von Systemzeitänderungen nicht betroffen.
Rückgabewert
KeDelayExecutionThread gibt einen der folgenden Werte zurück, der beschreibt, wie die Verzögerung abgeschlossen wurde:
Rückgabecode | Beschreibung |
---|---|
|
Die Verzögerung wurde abgeschlossen, da das angegebene Intervall verstrichen ist. |
|
Die Verzögerung wurde abgeschlossen, da der Thread benachrichtigt wurde. |
|
Ein Benutzermodus-APC wurde übermittelt, bevor das angegebene Interval abgelaufen ist. |
Beachten Sie, dass das NT_SUCCESS Makro alle diese Statuswerte als "Erfolgswerte" erkennt.
Bemerkungen
Die Ablaufzeit wird berechnet, und der aktuelle Thread wird in einen Wartezustand versetzt. Wenn das angegebene Intervall übergeben wurde, beendet der Thread den Wartezustand und wird in den Zustand "Bereit" versetzt und kann zur Ausführung berechtigt werden.
Der parameter Alertable bestimmt, wann der Thread benachrichtigt werden kann und der Wartezustand daher abgebrochen wurde. Weitere Informationen finden Sie unter Waits and APCs.
Wenn der parameter WaitModeUserModeist, kann der Kernelstapel während der Wartezeit vertauscht werden. Folglich muss ein Aufrufer niemals versuchen, Parameter im Stapel zu übergeben, wenn KeDelayExecutionThread mithilfe des Arguments UserMode aufgerufen wird.
Es ist besonders wichtig, den Rückgabewert von KeDelayExecutionThread zu überprüfen, wenn der WaitMode Parameter UserMode oder AlertableTRUEist, da KeDelayExecutionThreadthread- früh mit einem Status von STATUS_USER_APC oder STATUS_ALERTED zurückgegeben wird.
Alle langfristigen Wartezeiten, die von einem Benutzer abgebrochen werden können, sollten UserMode warte und warnungsfähige auf FALSE-festgelegt werden.
Wenn möglich, sollte warnungsfähige auf FALSE- und WaitMode- auf KernelMode-festgelegt werden, um die Treiberkomplexität zu verringern. Die Hauptausnahme dieser Richtlinie ist, wenn die Wartezeit eine langfristige Wartezeit ist.
Die Ablaufzeit der Verzögerung wird entweder als absolute Zeit ausgedrückt, zu der die Verzögerung abläuft, oder als Zeit relativ zur aktuellen Systemzeit. Wenn der wert des Interval Parameter positiv ist, ist die Ablaufzeit eine absolute Zeit. Wenn dieser Wert negativ ist, ist die Ablaufzeit eine relative Zeit.
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.
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- | <= APC_LEVEL |
DDI-Complianceregeln | HwStorPortProhibitedDDIs(storport), IrqlKeApcLte1(wdm), PowerIrpDDis(wdm) |