KeDelayExecutionThread 関数 (wdm.h)
KeDelayExecutionThread ルーチンは、指定された間隔で、現在のスレッドをアラート可能または非アラート可能な待機状態にします。
構文
NTSTATUS KeDelayExecutionThread(
[in] KPROCESSOR_MODE WaitMode,
[in] BOOLEAN Alertable,
[in] PLARGE_INTEGER Interval
);
パラメーター
[in] WaitMode
呼び出し元が待機しているプロセッサ モード ( KernelMode または UserMode ) を指定します。 下位レベルのドライバーでは 、KernelMode を指定する必要があります。
[in] Alertable
待機が警告可能な場合は TRUE を 指定します。 下位レベルのドライバーは FALSE を指定する必要があります。
[in] Interval
待機が発生する 100 ナノ秒の単位で、絶対時間または相対時間を指定します。 負の値は相対時間を示します。 絶対有効期限は、システム時間の変更を追跡します。相対有効期限は、システム時刻の変更の影響を受けません。
戻り値
KeDelayExecutionThread は、遅延がどのように完了したかを説明する次のいずれかの値を返します。
リターン コード | 説明 |
---|---|
|
指定した間隔が経過したため、遅延が完了しました。 |
|
スレッドが警告されたため、遅延が完了しました。 |
|
指定した 間隔 の有効期限が切れる前に、ユーザー モード APC が配信されました。 |
NT_SUCCESS マクロでは、これらの状態値がすべて "成功" 値として認識されることに注意してください。
注釈
有効期限が計算され、現在のスレッドが待機状態になります。 指定された間隔が経過すると、スレッドは待機状態を終了し、準備完了状態になり、実行の対象になります。
Alertable パラメーターは、スレッドを警告できるタイミングと、その待機状態が中止されるタイミングを決定します。 詳細については、「 Waits and APC」を参照してください。
WaitMode パラメーターが UserMode の場合、待機中にカーネル スタックをスワップアウトできます。 したがって、呼び出し元は、UserMode 引数を使用して KeDelayExecutionThread を呼び出すときに、スタックにパラメーターを渡そうとしないでください。
WaitMode パラメーターが UserMode または Alertable が TRUE の場合、KeDelayExecutionThread の戻り値をチェックすることが特に重要です。KeDelayExecutionThread は、STATUS_USER_APCまたはSTATUS_ALERTEDの状態で早期に返される可能性があるためです。
ユーザーが中止できるすべての長期待機は UserMode 待機で、 Alertable を FALSE に設定する必要があります。
可能であれば、ドライバーの複雑さを軽減するために、 Alertable を FALSE に設定し、 WaitMode を KernelMode に設定する必要があります。 このガイドラインの主な例外は、待機が長期待機である場合です。
遅延の有効期限は、遅延が期限切れになる絶対時刻、または現在のシステム時刻を基準とした時間として表されます。 Interval パラメーターの値が正の場合、有効期限は絶対時刻です。 この値が負の値の場合、有効期限は相対的な時間です。
有効期限はシステム クロックに対して測定され、オペレーティング システムがタイマーの有効期限を検出できる精度は、システム クロックの粒度によって制限されます。 詳細については、「タイマーの 精度」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 以降で使用できます。 |
対象プラットフォーム | ユニバーサル |
Header | wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |
Library | NtosKrnl.lib |
[DLL] | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
DDI コンプライアンス規則 | HwStorPortProhibitedDDIs(storport), IrqlKeApcLte1(wdm), PowerIrpDDis(wdm) |