ExAllocateTimer 関数 (wdm.h)
ExAllocateTimer ルーチンは、タイマー オブジェクトを割り当てて初期化します。
構文
PEX_TIMER ExAllocateTimer(
[in, optional] PEXT_CALLBACK Callback,
[in, optional] PVOID CallbackContext,
[in] ULONG Attributes
);
パラメーター
[in, optional] Callback
ドライバーによって実装された ExTimerCallback コールバック ルーチンへのポインター。 オペレーティング システムは、タイマーの有効期限が切れると、このルーチンを呼び出します。 このパラメーターは省略可能であり、コールバック ルーチンが必要ない場合は NULL にすることができます 。
[in, optional] CallbackContext
Callback パラメーターによって指されるコールバック ルーチンのコンテキスト値。 オペレーティング システムは、この値をパラメーターとして ExTimerCallback コールバック ルーチンに渡します (指定されている場合)。 このパラメーターは通常、コールバック ルーチンで使用されるコンテキスト情報を含む呼び出し元定義構造体へのポインターです。 このパラメーターは省略可能であり、コンテキスト情報が必要ない場合は NULL に 設定できます。
[in] Attributes
タイマー属性。 このパラメーターを 0 に設定するか、次のタイマー フラグ ビットの 1 つ以上のビットごとの OR に設定します。
タイマー フラグ ビット | 説明 |
---|---|
EX_TIMER_HIGH_RESOLUTION | 高解像度タイマー。 より高解像度のクロックを使用してタイマーを駆動することで、タイマーをより正確にします。 |
EX_TIMER_NO_WAKE | スリープ解除タイマーなし。 タイマーの有効期限と遅延許容時間を超えるまで、プロセッサをウェイクするタイマー遅延を期限切れにします。 |
EX_TIMER_NOTIFICATION | 通知タイマー。 タイマーを同期タイマーではなく通知タイマーにします。 このフラグが設定されていない場合、タイマーは同期タイマーです。 |
EX_TIMER_NOTIFICATION フラグ ビットは、他のフラグ ビットに関係なく設定できます。
EX_TIMER_HIGH_RESOLUTIONおよびEX_TIMER_NO_WAKE フラグ ビットは相互に排他的です。 呼び出し元がこれらのフラグ ビットの両方を設定した場合、ルーチンのバグチェックが行われます。
タイマー属性の詳細については、「解説」を参照してください。
戻り値
このルーチンは、呼び出しが成功した場合に 、EX_TIMER 構造体へのポインターを返します。 この構造体は、ルーチンが割り当ておよび初期化したタイマー オブジェクトです。 呼び出しが失敗した場合、ルーチンは NULL を返します。
注釈
このルーチンは、新しいタイマー オブジェクトへのポインターを返します。 タイマーを使用するために、呼び出し元のドライバーは、 ExSetTimer、 ExCancelTimer、および ExDeleteTimer ルーチンへの後続の呼び出しでこのポインターを提供します。 ドライバーが ExAllocateTimer ルーチンへの入力パラメーターとして ExTimerCallback コールバック ルーチンへのポインターを提供する場合、オペレーティング システムは、このタイマー オブジェクトを入力パラメーターとして ExTimerCallback ルーチンに渡します。
タイマーには、通知タイマーまたは同期タイマーを指定できます。 通知タイマーが通知されると、すべての待機スレッドの待機が満たされます。 このタイマーの状態は、明示的にリセットされるまで通知されたままになります。 同期タイマーの有効期限が切れると、その状態は 1 つの待機スレッドが解放されるまでシグナルに設定されます。 その後、タイマーは非シグナル状態にリセットされます。
EX_TIMER_HIGH_RESOLUTION フラグ ビットが 属性に設定されている場合、オペレーティング システムは必要に応じてシステム クロックの解像度を上げ、タイマーの有効期限が切れる時刻が、 DueTime パラメーターおよび Period パラメーターで指定された標準の有効期限に ExSetTimer ルーチンに対応するようにします。 詳細については、「 高解像度タイマー」を参照してください。
EX_TIMER_NO_WAKE フラグ ビットが Attributes に設定されている場合、タイマーはプロセッサを低電力状態から不必要にウェイクすることを回避します。 詳細については、「 スリープ解除タイマーなし」を参照してください。
ExAllocateTimer は 、タイマー オブジェクトのストレージを割り当てます。 このオブジェクトが不要になった場合、呼び出し元は ExDeleteTimer ルーチンを呼び出してこのオブジェクトを解放する必要があります。
Callback パラメーターは省略可能です。 ExTimerCallback ルーチンを提供しないドライバーは、代わりにタイマー オブジェクトに対して待機操作を開始できます。 ドライバー スレッドは、 KeWaitForSingleObject や KeWaitForMultipleObjects などのルーチンを呼び出して、タイマーの有効期限が切れるのを待つことができます。 タイマーの有効期限が切れると、タイマー オブジェクトが通知されます。
詳細については、「 ExXxxTimer ルーチン」および「EX_TIMER オブジェクト」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 8.1 以降で使用できます。 |
対象プラットフォーム | ユニバーサル |
Header | wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |
Library | Ntoskrnl.lib |
IRQL | <= DISPATCH_LEVEL |