2017-02-11 40 views
0

我寫了一個Windows內核模式驅動程序來訪問PCI Express板的內存空間,我可以使用CreateFile和DeviceIOControl函數與驅動程序的IO控制進行通信。除了用戶應用程序需要以管理員權限運行這一事實以外,一切都看起來不錯,因爲需要對PCI設備進行讀/寫訪問。這在我的應用程序中是一個挑戰,因爲我不能指望我的用戶在運行應用程序時擁有管理員權限。爲了解決這個問題,我到目前爲止提出瞭如下想法:從沒有管理員權限的用戶應用程序訪問驅動程序IOControl

1)在驅動程序中創建一個命名管道並在用戶應用程序中訪問它,但我不確定驅動程序是否可以訪問Windows API以創建和訪問一個命名管道。

2)創建一個以管理員權限運行併成爲用戶應用程序和驅動程序之間接口的Windows服務。雖然這是實用的,但這個解決方案似乎是矯枉過正的。

我很欣賞對上述解決方案的任何評論,也是與司機溝通的常見做法。

謝謝

+0

使用DeviceIOControl()可以肯定是一個殺手鐗,所以通常需要管理員訪問權限。驅動程序安裝程序確定安全密鑰的值。例如,查看c:\ windows \ inf \ wvid.inf,[Vid_Device.NT.AddReg]部分。在安裝之後以編程方式執行此操作[在此討論](https://msdn.microsoft.com/en-us/library/windows/hardware/ff563755(v = vs.85).aspx)。 –

回答

2

您的驅動程序可以爲它創建的設備對象分配適當的權限。默認設置僅允許管理員將I/O控制請求發送到設備,但您可以根據自己的喜好進行配置。

標題爲Securing Device Objects的MSDN部分涵蓋了此內容。

1

謝謝大家提供您的意見。我需要在我的KMDF中使用WdfDeviceInitAssignSddlString。該API指定訪問驅動程序的I/O控制器所需的權限。

相關問題