CustomTimerDpc コンテキスト情報の提供
KeInitializeDpc に渡される DeferredContext ポインターは、他のドライバー ルーチンと CustomTimerDpc ルーチン自体で状態を維持管理できるコンテキスト領域を指します。 カーネルは、DPC ルーチンを呼び出すたびに DeferredContext ポインターを渡します。
IoTimer ルーチンとは異なり、CustomTimerDpc には、ドライバーによって作成されたデバイス オブジェクトとの特定の関連付けはありません。 ただし、ドライバーは、そのコンテキスト領域にデバイス オブジェクトへのポインターを含めることで、CustomTimerDpc ルーチンをドライバーによって作成されたデバイス オブジェクトに関連付けることができます。
コンテキスト領域は、ドライバーによって割り当てられた常駐メモリ内にある必要があります。 通常、このコンテキスト領域はデバイス拡張機能内にありますが、非ページ プール内に存在する場合もあります。 ドライバーがコントローラー オブジェクトを使用している場合は、コントローラー拡張機能に含めることができます。 コンテキスト領域のコンテンツはドライバー定義です。
CustomTimerDpc ルーチンがドライバーの ISR とコンテキスト情報を共有する場合、CustomTimerDpc ルーチンは KeSynchronizeExecution を使用して、共有コンテキストにアクセスする SynchCritSection ルーチンを呼び出す必要があります。 詳細については、「クリティカル セクションの使用」を参照してください。
CustomTimerDpc が他の ISR 以外のドライバー ルーチンとコンテキスト情報を共有する場合は、DeferredContext の領域をエグゼクティブ スピン ロックで保護する必要があります。 詳細については、「スピン ロック」を参照してください。