EXT_CALLBACK コールバック関数 (wdm.h)
ExTimerCallback コールバック ルーチンは、EX_TIMER タイマー オブジェクトの時間間隔の有効期限が切れた後に実行されます。
構文
EXT_CALLBACK ExtCallback;
void ExtCallback(
[in] PEX_TIMER Timer,
[in] PVOID Context
)
{...}
パラメーター
[in] Timer
EX_TIMER構造体へのポインター。 この構造体は、 ExAllocateTimer ルーチンによって以前に割り当てられたタイマー オブジェクトです。
[in] Context
ExAllocateTimer ルーチンの CallbackContext パラメーターとしてドライバーが以前に指定したコンテキスト値。
戻り値
なし
解説
オプションとして、ドライバーは ExAllocateTimer ルーチンに渡すコールバック パラメーターで ExTimerCallback ルーチンへのポインターを指定できます。 タイマーの有効期限が切れると、オペレーティング システムは ExTimerCallback ルーチンを呼び出します。
タイマー操作を開始するために、ドライバーは入力パラメーターとしてタイマー オブジェクトを ExSetTimer ルーチンに渡します。 タイマーの有効期限が切れると、オペレーティング システムは ExTimerCallback ルーチンの実行をスケジュールします。
タイマー オブジェクトは待機可能なオブジェクトです。 ドライバー スレッドは、 KeWaitForSingleObject や KeWaitForMultipleObjects などのルーチンを呼び出して、タイマーの有効期限が切れるのを待つことができます。 タイマーが期限切れになると、オペレーティング システムはタイマー オブジェクトに通知します。
有効期限が切れる前に、タイマーが取り消される場合があります。 ドライバーは、 ExCancelTimer ルーチンを呼び出して、タイマーを明示的に取り消すことができます。 このオブジェクトで以前に設定されたタイマーの有効期限が切れる前に、ドライバーが ExSetTimer ルーチンを呼び出してタイマー オブジェクトで新しいタイマーを開始した場合、この呼び出しでは、以前のタイマーが暗黙的に取り消され、新しいタイマーが開始されます。
ExTimerCallback ルーチンは、ExSetTimer や ExDeleteTimer などのルーチンを呼び出すことができます。 ExTimerCallback ルーチンが ExDeleteTimer を呼び出す場合、この呼び出しで指定される Wait パラメーターは FALSE である必要があります。 詳細については、「 System-Allocated タイマー オブジェクトの削除」を参照してください。
マルチプロセッサ システムでは、定期的なタイマーの 2 回連続する有効期限に対する ExTimerCallback コールバックが、2 つの異なるプロセッサで同時に実行される可能性があります。
詳細については、「 ExXxxTimer ルーチン」および「EX_TIMER オブジェクト」を参照してください。
例
ExTimerCallback コールバック ルーチンを定義するには、まず、定義するコールバック ルーチンの種類を識別する関数宣言を指定する必要があります。 Windows には、ドライバーのコールバック関数の種類のセットが用意されています。 コールバック関数の種類を使用して関数を宣言すると、 ドライバーのコード分析、 静的ドライバー検証ツール (SDV)、およびその他の検証ツールでエラーが検出され、Windows オペレーティング システム用のドライバーを記述するための要件になります。
たとえば、 という名前MyExTimerCallback
の ExTimerCallback コールバック ルーチンを定義するには、次のコード例に示すように、EXT_CALLBACK関数型を使用します。
EXT_CALLBACK MyExTimerCallback;
次に、コールバック ルーチンを次のように実装します。
_Use_decl_annotations_
VOID
MyExTimerCallback(
PEX_TIMER Timer,
PVOID Context
)
{...}
EXT_CALLBACK関数型は Wdm.h ヘッダー ファイルで定義されます。 コード分析ツールを実行するときにエラーをより正確に識別するには、必ず注釈を _Use_decl_annotations_
関数定義に追加してください。 注釈により _Use_decl_annotations_
、ヘッダー ファイル内のEXT_CALLBACK関数型に適用される注釈が確実に使用されます。 関数宣言の要件の詳細については、「 WDM ドライバーの関数ロール型を使用して関数を宣言する」を参照してください。 の詳細については _Use_decl_annotations_
、「 関数の動作に注釈を付ける」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 8.1以降で使用できます。 |
対象プラットフォーム | デスクトップ |
Header | wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |
IRQL | DISPATCH_LEVELで呼び出されます。 |