在没有管理员权限的情况下获取主域 SID

Getting primary domain SID without admin privileges

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

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

不幸的是,使用 LSAOpenPolicy 需要 运行 的管理员权限,而对于我正在处理的项目,它不能,因为大多数用户不会拥有它。我的问题是 - 有没有办法在不调用管理员权限的情况下获取当前计算机的主域 SID?如果有,我应该如何使用 Visual C++/MFC 来实现?

我已经找到解决这个问题的方法。事实证明我根据 MSDN 上不正确的 API 描述做出了错误的假设。 正如我们可以阅读 here, LsaOpenPolicy seems to require administrator privileges and article about Access Masks did not say nor did it lead me anywhere where I could find any information about needed privileges. However thanks to stack overflow user TripShock and his comment on similar topic here 我发现实际上只使用 POLICY_VIEW_LOCAL_INFORMATION 访问标志不会调用管理员权限。在我的程序和虚拟机上测试了一下,结果是真的。