2012-06-13 52 views
1

我從一個內核級驅動程序寫入到用戶空間緩衝(從功能的IOControl),我需要確保用戶土地方案/服務將不會覆蓋緩衝區或在驅動程序寫完之前讀取它。Windows內核級別全球臨界區

在Windows上的內核模式驅動程序中是否有一種方法(如果是,有什麼更好的方法)在Windows內核模式驅動程序中輸入一種'全局臨界區',允許驅動程序獲得系統範圍內的獨佔性短時間以便驅動程序可以保證獨佔訪問用戶空間中的緩衝區?

+0

你想實現什麼?在Windows內核中沒有(導出的)全局鎖。您可以輕鬆使用自旋鎖或互斥/等。在你的內核驅動程序中如果你想要的話。 – Christopher

+0

你能告訴我們你正試圖解決的實際問題嗎?硬件中是否有實時需求? –

+0

我正在寫驅動程序(從IOControl功能)保存在用戶空間中的緩衝區,並且我需要確保用戶程序/服務不會在驅動程序完成之前覆蓋它或讀取它寫信給它。 – Qix

回答

1

考慮到在意見回覆,實現的一個方法是保持關聯到每個系統處理器的內核模式線程,並在時間提高自己的IRQL到DPC當你寫緩衝區。在DPC IRQL中不允許線程調度,因此用戶模式應用程序將無法控制。

注:這是問題的答案,但基本上我的評論說,你不應該做的同意。您應該重新設計驅動程序,以便在用戶模式緩衝區隨時可能更改的假設下工作。

+0

這對多處理器系統沒有幫助。 IRQL是每個處理器,其他處理器仍然可以自由執行用戶模式代碼。 –

+0

由「內核模式線程affinitized到每個系統處理器」我的意思是有多少個線程的數量或處理器。所以每個處理器都很忙,沒有人可以運行用戶模式應用程序。 – glagolig

+0

有趣的做法。我同意這不是萬無一失的,但它確實是一種做法。 – Qix