从没有管理员权限的用户应用程序访问驱动程序IOControl
问题描述:
我写了一个Windows内核模式驱动程序来访问PCI Express板的内存空间,我可以使用CreateFile和DeviceIOControl函数与驱动程序的IO控制进行通信。除了用户应用程序需要以管理员权限运行这一事实以外,一切都看起来不错,因为需要对PCI设备进行读/写访问。这在我的应用程序中是一个挑战,因为我不能指望我的用户在运行应用程序时拥有管理员权限。为了解决这个问题,我到目前为止提出了如下想法:从没有管理员权限的用户应用程序访问驱动程序IOControl
1)在驱动程序中创建一个命名管道并在用户应用程序中访问它,但我不确定驱动程序是否可以访问Windows API以创建和访问一个命名管道。
2)创建一个以管理员权限运行并成为用户应用程序和驱动程序之间接口的Windows服务。虽然这是实用的,但这个解决方案似乎是矫枉过正的。
我很欣赏对上述解决方案的任何评论,也是与司机沟通的常见做法。
谢谢
答
您的驱动程序可以为它创建的设备对象分配适当的权限。默认设置仅允许管理员将I/O控制请求发送到设备,但您可以根据自己的喜好进行配置。
标题为Securing Device Objects的MSDN部分涵盖了此内容。
答
谢谢大家提供您的意见。我需要在我的KMDF中使用WdfDeviceInitAssignSddlString
。该API指定访问驱动程序的I/O控制器所需的权限。
使用DeviceIOControl()可以肯定是一个杀手锏,所以通常需要管理员访问权限。驱动程序安装程序确定安全密钥的值。例如,查看c:\ windows \ inf \ wvid.inf,[Vid_Device.NT.AddReg]部分。在安装之后以编程方式执行此操作[在此讨论](https://msdn.microsoft.com/en-us/library/windows/hardware/ff563755(v = vs.85).aspx)。 –