1

我正在尝试使用 C++ 在 Windows 上获取计算机的主域 SID。LsaQueryInformationPolicy我已经设法使用withPolicyPrimaryDomainInformation参数来做到这一点。我已经为此操作打开了 LSA 策略,如下所示:

auto lsaStatus = LsaOpenPolicy(Server, &ObjectAttributes, GENERIC_READ | POLICY_VIEW_LOCAL_INFORMATION, &PolicyHandle);

不幸的是,使用LSAOpenPolicy需要管理员权限来运行和我正在处理的项目,它不能,因为大多数用户不会拥有它。我的问题是 - 有什么方法可以在不调用管理员权限的情况下获取当前计算机的主域 SID?如果有,我应该如何使用 Visual C++/MFC 来做到这一点?

4

1 回答 1

1

我找到了解决这个问题的方法。原来我基于 MSDN 上不正确的 API 描述做出了错误的假设。正如我们在这里所读到的,LsaOpenPolicy似乎需要管理员权限,关于访问掩码的文章并没有说,也没有引导我到任何可以找到所需权限信息的地方。然而,由于堆栈溢出用户TripShock和他对类似主题的评论,发现实际上仅使用POLICY_VIEW_LOCAL_INFORMATION访问标志不会调用管理员权限。在我的程序和虚拟机中对其进行了测试,结果证明是正确的。

于 2015-07-28T11:23:42.760 回答