IoTimer ルーチンの登録と有効化

Any driver can register an IoTimer を呼び出し て 1 つ以上のデバイス オブジェクトを作成した後、任意のドライバーで IoInitializeTimerルーチンを登録できます。 その後、ドライバーは IoStartTimerを呼び出してタイマーを開始できます。 次の図は、これらの呼び出しを示します。

diagram illustrating using an iotimer routine.

IoCreateDevice を呼び出してデバイス オブジェクトを作成した後、ドライバーはその IoInitializeTimer を呼び出すため IoTimer ルーチンのエントリー・ポイントと IoTimer ルーチンが使用するコンテキストを保持するコンテキスト・エリアを指定します。 I/O マネージャーは、デバイス オブジェクトをカーネル割り当てタイマー オブジェクトに関連付け、1 秒ごとにタイムアウトするようにタイマー オブジェクトを設定します。

ドライバーが IoStartTimerを呼び出した後、その IoTimer ルーチンは、ドライバーが IoStopTimerを呼び出すまで 1 秒に 1 回呼び出されます。 ドライバーは IoTimer ルーチンの呼び出しを IoStartTimerで再び有効にすることができます。 (多くの場合、ドライバーがIoStartTimer を呼び出すとき、ドライバーは現在の IRP の I/O スタック位置から取得したデバイス オブジェクト ポインターを提供します。

エントリ時に IoTimer ルーチンは、 IoInitializeTimer を呼び出したときにドライバーが指定したコンテキスト ポインターと共に、デバイス オブジェクト ポインターを渡されます。

ドライバーは IoStopTimerIoTimer ルーチン内から呼び出すことはできません。

I/O マネージャーは、指定したデバイス オブジェクトのタイマー ルーチンの登録を解除し、ドライバーが IoDeleteDevice を呼び出すときに関連付けられるコンテキストを解放します。