WDKでKbFilterの例を使用しており、KbFilter_ServiceCallbackによって呼び出され、DISPATCH_LEVELで実行される関数でIOCTLを送信しようとしています。この関数は、IOCTLを送信して戻るだけでよく、出力バッファーがいっぱいになるのを待たずに、非同期で起動して忘れることができます。
現在、WDF関数WdfIoTargetFormatRequestForIoctlとWdfRequestSendを使用して、DISPATCH_LEVELで送信を試みても、何も取得していません。WdfRequestSendの呼び出しは成功していますが、IOCTLが受信されていないようです。
WdfIoTargetSendIoctlSynchronouslyまたはWDMパターンIoBuildDeviceIoControlRequest()とIoCallDriver()のいずれかを使用するには、 PASSIVE_LEVELが必要です。これらをPASSIVE_LEVELで呼び出す唯一の方法は、PASSIVE_LEVELで実行される別のスレッドを作成し、バッファーまたはキューを介して同期された命令を渡すことです。スピンロックとセマフォ付き。
フィルタの下のドライバーにIOCTLを渡す簡単な方法があるかどうか、またはより高いIRQLで処理する必要がある場合に、スレッド/キューが通常のパターンに近づくかどうかを誰かに教えてもらえますか?どのような状況でKeRaiseIrqlを使用できますか?これは私が使用する必要があるものですか?ありがとう。