2


0

カーネルモードタイマー

ドライバーで指定された関数がWindows XP以降で約1秒ごとに呼び出されるように、カーネルモードでタイマーを設定するにはどうすればよいですか? 関数内のすべての関数(特にZwQuerySystemInformation)を使用できるはずです。 高解像度のタイマーやミリ秒の精度などは必要ありません。カーネルモードで1秒に1回実行されるように関数をスケジュールする方法が必要なだけで、32ビットシステムのすべてのWindows XP以降で動作する必要があります。

3 Answer


5


KeInitializeTimerを介してカーネルタイマーを作成します。 +タイマーをhttp://msdn.microsoft.com/en-us/library/ff553292%28VS.85%29.aspx[KeSetTimerEx]で設定し、1秒の期間を使用します。 +ドライバーにスレッドを作成します。 +スレッドで、http://msdn.microsoft.com/en-us/library/ff553350%28VS.85%29.aspx [KeWaitForSingleObject]を呼び出してタイマーを待機し、戻り時に関数を呼び出します。 繰り返す。


2


スレッド内のループ内でhttp://msdn.microsoft.com/en-us/library/ff551986%28VS.85%29.aspx[KeDelayExecutionThread]を使用できます。


2


スレッドを浪費する代わりに、dpcオブジェクトを使用して、タイマーが切れたときにディスパッチレベルでコールバックを取得することもできます。 KeSetTimerExのdpc引数として渡すだけです。