IoCreateDeviceSecure函数拒绝管理员

时间:2015-06-16 14:47:50

标签: c windows security driver

大家。我正在为在Windows 7和8上运行的驱动程序(WinPcap' NDIS 6过滤器驱动程序)添加访问控制。我们只想让管理员(管理员组中的用户)使用该驱动程序。所以我使用了新的 IoCreateDeviceSecure 函数,而不是原来的 IoCreateDevice 调用。

我的代码如下:

UNICODE_STRING sddl = RTL_CONSTANT_STRING(L"D:P(A;;GA;;;SY)(A;;GA;;;BA)");
const GUID guidClassNPF = { 0x26e0d1e0L, 0x8189, 0x12e0, { 0x99, 0x14, 0x08, 0x00, 0x22, 0x30, 0x19, 0x04 } };
status = IoCreateDeviceSecure(adriverObjectP, sizeof(DEVICE_EXTENSION), &deviceName, FILE_DEVICE_TRANSPORT,
FILE_DEVICE_SECURE_OPEN, FALSE, &sddl, (LPCGUID) &guidClassNPF, &devObjP);

我的SDDL字符串是" D:P(A ;; GA ;;; SY)(A ;; GA ;;; BA)" 表示&#34 ; 允许内核,系统和管理员完全控制设备。没有其他用户可以访问该设备。"在https://msdn.microsoft.com/en-us/library/windows/hardware/ff563667(v=vs.85).aspx。但SDDL字符串中的 GA 表示" 计算机上的内置管理员组 "通过引用同一网页。因此,我不知道这是否是微软的错误,因为管理员用户管理员组之间仍存在差异。

我的测试平台是Windows 8.1 x64。我创建了一个名为 test 的用户,将其添加到管理员组。我使用 runas 命令运行一个程序,以用户测试的方式调用驱动程序,如下所示:

失败:

runas /savecred /user:test "C:\Program Files (x86)\Nmap\nmap.exe -v -A 192.168.0.1"

命令无法打开驱动程序设备,我尝试将命令作为内置管理员用户,并且驱动程序设备打开成功。如下:

成功:

runas /savecred /user:administrator "C:\Program Files (x86)\Nmap\nmap.exe -v -A 192.168.0.1"

此测试确认" D:P(A ;; GA ;;; SY)(A ;; GA ;;; BA)" 仅允许访问确切的管理员用户,而非管理员组

我希望有人可以指出它是否是Windows中的错误,以及如何允许管理员组使用我的驱动程序?感谢。

这似乎是UAC的问题。

此外,一般来说,我认为我们的应用场景并没有实际使用"管理员"特权。我们只想打开Administrators组作为标准组的访问权限,而不是要求管理员'特权。我认为必须有一些更优雅的方法来解决这个UAC问题。

并且,我想" BA"在SDDL中应该表示Administrators组中的所有帐户,与Administrators组中的帐户是否具有" full"访问令牌。作为目前的情况(默认政策),如果" BA"仅表示内置管理员帐户,我们只能提供管理员帐户的SID,而不是使用" BA"。所以预定义的“BA"字符串没用。

0 个答案:

没有答案