ExSetTimer 関数 (wdm.h)
ExSetTimer ルーチンはタイマー操作を開始し、指定した期限にタイマーを期限切れに設定します。
構文
BOOLEAN ExSetTimer(
[in] PEX_TIMER Timer,
[in] LONGLONG DueTime,
[in] LONGLONG Period,
[in, optional] PEXT_SET_PARAMETERS Parameters
);
パラメーター
[in] Timer
EX_TIMER 構造体へのポインター。 この構造体は、以前に ExAllocateTimer ルーチンによって割り当てられたタイマー オブジェクトです。
[in] DueTime
タイマーの有効期限が切れる絶対時間または相対時間。 DueTime パラメーターの値が負の場合、有効期限は現在のシステム時刻を基準とします。 それ以外の場合、有効期限は絶対です。 有効期限は、システム時間単位 (100 ナノ秒間隔) で表されます。 絶対有効期限は、システム時刻の変更を追跡します。相対有効期限は、システム時刻の変更の影響を受けません。 絶対時間は、1601 年の開始以降にシステム時間単位で渡された時間の量として表されます。
高解像度タイマー の DueTime パラメーターは、相対時間 (負の値) または定期的なバグ チェックである必要があります。
[in] Period
システム時間単位でのタイマーの省略可能な期間 (100 ナノ秒間隔)。 MAXLONG 以下である必要があります。 定期的ではなく 1 ショットのタイマーの場合は、Period を 0 に設定します。
[in, optional] Parameters
EXT_SET_PARAMETERS 構造体へのポインター。 呼び出し元のドライバーは、ExInitializeSetTimerParameters ルーチンを呼び出して、この構造体を初期化します。
戻り値
このルーチンは、ルーチン 呼び出された時点で保留中のタイマーを取り消した場合に TRUE を返します。 それ以外の場合、ルーチンは FALSE 返します。 詳細については、「解説」を参照してください。
備考
ドライバーは、このルーチンを呼び出して、将来期限切れになるタイマーを設定できます。 その後、ドライバーはタイマーの有効期限が切れるのを待つことができます。 または、ドライバーは、タイマーの有効期限が切れたときに呼び出されるコールバック ルーチンを実装できます。
ドライバーが ExSetTimer 呼び出した後、ドライバーは、KeWaitForSingleObject などのルーチンを呼び出すか、KeWaitForMultipleObjects を してタイマーの有効期限が切れるのを待つことができます。 タイマーの有効期限が切れると、オペレーティング システムはタイマー オブジェクトに通知します。
オプションとして、ドライバーは、ExTimerCallback コールバック ルーチンを実装し、ExAllocateTimer ルーチンへの入力パラメーターとしてこのルーチンへのポインターを指定できます。 タイマーの有効期限が切れると、オペレーティング システムは ExTimerCallback ルーチンを呼び出します。
ExSetTimer 呼び出しでは、Timerで指定されたタイマー オブジェクトに対して、以前に開始された set-timer 操作が暗黙的に取り消されます。 以前にドライバーが ExSetTimer を呼び出して、Timerを使用するタイマーを設定し、ExSetTimer が 2 回目に呼び出されたときにこのタイマーがまだ期限切れになっていない場合、2 回目の呼び出しは最初の呼び出しからタイマーを取り消してから、新しいタイマーを開始します。 この場合、2 番目の呼び出しは TRUE 返します。 ただし、最初の呼び出しによって開始されたタイマーがこのタイマーを取り消す前に 2 番目の呼び出しが期限切れになった場合、2 番目の呼び出しは新しいタイマーを開始し、FALSEを返します。
Period パラメーターが 0 以外の場合、タイマーは定期的です。 定期的なタイマーの場合、DueTime パラメーターは初期タイマーの有効期限を指定し、Period は後続の有効期限までの間隔を指定します。
システム クロックに使用されるハードウェア タイマーは、均一な間隔で割り込み要求を通知しますが、これらの割り込みの処理は、他のデバイスの割り込み処理によって遅延する可能性があります。 したがって、定期的なタイマーの場合、定期的な有効期限からタイマー オブジェクトが通知されるまでの遅延、または ExTimerCallback ルーチンの実行 は、ある期間から次の期間に異なる場合があります。 詳細については、「タイマー精度 を参照してください。
定期的なタイマーの有効期限は、システム クロック ティックごとに 1 回までです。 タイマーの期間をシステム クロック ティック間の間隔よりも小さい値に設定しても、システム クロック ティックごとにタイマーの有効期限が複数回切れることはありませんが、システム クロック レートが変化すると、連続する有効期限の間隔が変わる可能性があります。 たとえば、オペレーティング システムは、高解像度タイマーのタイミング要件を満たすためにシステム クロック レートを一時的に上げる場合があります。 詳細については、「High-Resolution タイマーの」を参照してください。
高解像度タイマーではない定期的なタイマーの場合、ドライバーは、システム クロック ティック間の既定の間隔の倍数に 期間 を設定することで、比較的均一な定期的な有効期限を実現できます。
過剰な電力消費を回避するために、ドライバーは、長時間実行される高解像度タイマーの期間を、システム クロック ティック間の既定の間隔より小さい値に設定しないでください。 それ以外の場合、システム クロック タイマーは、許容される最大システム クロック レートで継続的に割り込みを生成します。
詳細については、「ExXxxTimer ルーチンとEX_TIMER オブジェクト する」を参照してください。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 8.1 以降で使用できます。 |
ターゲット プラットフォーム の | 万国 |
ヘッダー | wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |
ライブラリ | Ntoskrnl.lib |
IRQL | <= DISPATCH_LEVEL |
関連項目
ExAllocateTimer の
ExInitializeSetTimerParameters の
ExTimerCallback を する
KeWaitForMultipleObjects の
KeWaitForSingleObject を する