2013-01-07 15 views
7

私は、要求を発行したCPUにCompleteRequestの完了をアピールしようとしています。 FdoDeviceControlまたは他の方法で要求を発行したCPUを取得して、ディスパッチキューに入る前に要求がどこから来たのかを調べる方法はありますか?WDFREQUESTを作成したCPUを取得できますか?

+0

このディスパッチが発生した後にCPUを取得することは、もちろん簡単です。しかし、コールバック関数が問題と同じコアで動作することを保証していますか? –

答えて

6

DPCルーチンに入ると、リクエストの発信元を特定することができません。要求をDPCキューに入れる前に、KeGetCurrentProcessorNumberEx()を呼び出す必要があります。リクエストはIRPだと思います...?

+0

David、KMDFを使用して要求を処理しているので、IRPはWDFREQUEST構造体にラップされています。要求が現れた時点で、すでにI/Oキューを通過しています。 –

+0

KMDFを使用している場合は、WdfDeviceInitSetIoInCallerContextCallback()を呼び出す必要があります。これにより、I/Oリクエストがkmdf I/Oキューに置かれる前にI/Oリクエストを見ることができます。I/Oイニシエータのプロセスコンテキストで実行され、I/Oイニシエータのプロセスコンテキストで実行されます。 O.そこからKeGetCurrentProcessorNumberEx()を呼び出して結果を保存することができます。 –

+0

David David、ありがとうございました。関連するノートでは、EvtDeviceWdmIrpPreprocessもクライアントのコンテキストで呼び出されていると私は推測しています(私は保証された転送進行キューを使用していますので、常にSetIoInCallerContextCallbackのように見えるコールを必ず取得する必要があります) –

関連する問題