KeSetTimerEx 関数 (wdm.h)
KeSetTimerEx ルーチンは、タイマー オブジェクトをシグナル状態に設定する絶対間隔または相対間隔を設定し、必要に応じて、その間隔の有効期限が切れたときに実行される CustomTimerDpc ルーチンを提供し、必要に応じてタイマーの定期的な間隔を指定します。
構文
BOOLEAN KeSetTimerEx(
[in, out] PKTIMER Timer,
[in] LARGE_INTEGER DueTime,
[in] LONG Period,
[in, optional] PKDPC Dpc
);
パラメーター
[in, out] Timer
KeInitializeTimer または KeInitializeTimerEx で初期化されたタイマー オブジェクトへのポインター。
[in] DueTime
タイマーの有効期限が切れる絶対時間または相対時間を指定します。 DueTime パラメーターの値が負の場合、有効期限は現在のシステム時刻を基準とします。 それ以外の場合、有効期限は絶対です。 有効期限は、システム時間単位 (100 ナノ秒間隔) で表されます。 絶対有効期限は、システム時刻の変更を追跡します。相対有効期限は、システム時間の変更の影響を受けません。
[in] Period
タイマーの省略可能な定期的な間隔をミリ秒単位で指定します。 0 以上の値である必要があります。 このパラメーターの値が 0 の場合、タイマーは自動的にキュー自体を再キューしない非期間タイマーです。
[in, optional] Dpc
KeInitializeDpc によって初期化された DPC オブジェクトへのポインター。 このパラメーターは省略できます。
戻り値
タイマー オブジェクトがシステム タイマー キューに既に存在する場合、 KeSetTimerEx はTRUE を返します。
注釈
KeSetTimerEx ルーチンは、次の処理を行います。
有効期限を計算します。
タイマーをシグナルなし状態に設定します。
タイマーが指定されている場合は、タイマーの定期的な間隔を設定します。
システム タイマー キューにタイマー オブジェクトを挿入します。
タイマー オブジェクトが既にタイマー キューに存在していた場合は、新しい有効期限に設定される前に暗黙的に取り消されます。 以前に指定した DueTime の有効期限が切れる前に KeSetTimerEx を呼び出すと、タイマーと、前の呼び出しに関連付けられている Dpc への呼び出し (存在する場合) の両方が取り消されます。
有効期限はシステム クロックに対して測定され、タイマーの有効期限が切れたときにオペレーティング システムが検出できる精度は、システム クロックの粒度によって制限されます。 詳細については、「タイマーの 精度」を参照してください。
Dpc パラメーターを指定すると、DPC オブジェクトがタイマー オブジェクトに関連付けられます。 タイマーの有効期限が切れると、タイマー オブジェクトはシステム タイマー キューから削除され、シグナル状態に設定されます。 DPC オブジェクトが設定されたときにタイマーに関連付けられた場合、DPC オブジェクトはシステム DPC キューに挿入され、タイマー間隔の有効期限が切れると条件が許可されるとすぐに実行されます。
DPC ルーチンは、定期的なタイマーの割り当てを解除できません。 DPC ルーチンは、非期間タイマーの割り当てを解除できます。
定期的なタイマーは、有効期限が切れるとすぐに自動的に再起動されることに注意してください。 したがって、マルチプロセッサ マシンでは、定期的なタイマーの DPC を 2 つのプロセッサで同時に実行できます。
特定の時点でキューに入ることができるのは、特定の DPC オブジェクトのインスタンス化を 1 つだけです。 競合状態の可能性を回避するために、 KeSetTimerEx に渡される DPC を KeInsertQueueDpc に渡すべきではありません。
ドライバーは、 アンロード ルーチンでアクティブなタイマーを取り消す必要があります。 KeCancelTimer を使用してタイマーを取り消します。
タイマー オブジェクトの詳細については、「タイマー オブジェクト と DPC」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 以降で使用できます。 |
対象プラットフォーム | ユニバーサル |
Header | wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |
Library | NtosKrnl.lib |
[DLL] | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |
DDI コンプライアンス規則 | HwStorPortProhibitedDDIs(storport), IrqlKeDispatchLte(wdm) |