1

私はドライバー開発の初心者です。基本的な質問があります。

WDM デバイス ドライバーの記述では、IoBuildDeviceIoControlRequest / IoBuildSynchronousFsdRequestを呼び出して、別のターゲット ドライバーに渡す同期 IRP を割り当てることができます。基本的な要件の 1 つは、これらの関数を呼び出す前に イベントオブジェクトを割り当てる必要があることです。また、ターゲット ドライバーが IRP を完了するまでに、このイベント オブジェクトがまだ使用可能であることを確認する必要があります

IoBuildDeviceIoControlRequest/ IoBuildSynchronousFsdRequestを呼び出す関数のローカル スコープからそのイベント オブジェクトを本当に割り当てることができるでしょうか。つまり、非ページ プールからではなく、カーネル スタックからです。サンプル コードの多くは、イベント オブジェクトをローカル スコープ、つまりカーネル スタックから割り当てるだけです。しかし、ターゲット ドライバーがまだ IRP を処理している間に、呼び出し元のドライバーがページ アウトされた場合、実際に問題が発生するでしょうか?

4

1 に答える 1

1

それで、私がこれを正しく理解している場合、あなたはあなたのイベントを(スタックから)割り当て、IRPを構築し、それを発行し、そしてイベントを待つ、すべて1つの関数で?

スタックがページアウトされるかどうかは、KeWaitForSingleObject()に渡すwait-mode引数によって異なります。UserModeは、スタックがページングされることに満足していることを意味します。KernelModeは、スタックのページングが許可されていないことを意味します。

IRP完了ルーチンはDISPATCH_LEVELで実行されることを思い出します。そのため、イベントがページインされることを保証する必要があります。これらのルーチンはイベントを設定するため、IRPが完了したことがわかりますが、DISPATCH_LEVELではページングされます。 -アウトページは発生しません(NTカーネル設計の結果)。代わりにブルースクリーン。

于 2011-04-22T09:38:39.803 に答える