IoTimer コンテキスト情報の提供
Context ポインターは IoInitializeTimer に渡されますが、これにより他のドライバールーチンや IoTimer ルーチン自体が、時間指定された操作に関する状態を維持管理できるコンテキスト領域を識別します。 The I/O マネージャーは Context ポインターを渡しますが、これは IoTimer ルーチンを呼び出す度に実施されます。
IoTimer ルーチンは IRQL = DISPATCH_LEVEL で実行されるため、そのコンテキスト領域は常駐システム空間メモリ内にある必要があります。 IoTimer ルーチンがあるほとんどのドライバーは、関連付けられているデバイス オブジェクトのデバイス拡張機能を Context アクセス可能な領域として使用しますが、コンテキストは、ドライバーがコントローラー オブジェクトを使用している場合はコントローラー拡張機能で、またはドライバーによって割り当てられた非ページ プール内で使用できます。
IoTimerroutine のコンテキスト領域については、次のガイドラインに従ってください。
IoTimer ルーチンがそのコンテキスト領域をドライバーの ISR と共有する場合は、KeSynchronizeExecution を使用して、マルチプロセッサ セーフな方法でコンテキスト領域にアクセスする SynchCritSection ルーチンを呼び出す必要があります。 詳細については、「クリティカル セクションの使用」を参照してください。
IoTimer ルーチンがそのコンテキスト領域を ISR と共有せず、別のドライバー ルーチンと共有する場合、ドライバーは、マルチプロセッサ セーフな方法でコンテキスト情報にアクセスするために、初期化されたエグゼクティブ スピン ロックで共有コンテキスト領域を保護する必要があります。 詳細については、「スピン ロック」を参照してください。