2013-01-07 48 views
7

我正試圖將最初發出請求的CPU完成請求完成。有沒有辦法在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.從那裏你可以調用KeGetCurrentProcessorNumberEx()並保存結果。 –

+0

列爲答案大衛,謝謝。在一個相關的說明,我是guarateed是EvtDeviceWdmIrpPreprocess也被稱爲客戶端的情況下(我使用的保證轉發進度隊列,所以我需要確保我總是得到調用,它看起來像SetIoInCallerContextCallback沒有做) –