我正在尝试使用C ++在Windows上获取计算机的主域SID。我已经使用带有LsaQueryInformationPolicy
参数的PolicyPrimaryDomainInformation
来做到这一点。我按照以下方式为此操作打开了LSA策略:
auto lsaStatus = LsaOpenPolicy(Server, &ObjectAttributes, GENERIC_READ | POLICY_VIEW_LOCAL_INFORMATION, &PolicyHandle);
不幸的是,使用LSAOpenPolicy
requiers管理员权限来运行和我正在处理的项目,它不能,因为大多数用户都不会拥有它。我的问题是 - 有没有办法获得当前计算机的主域SID而不调用管理员权限?如果有,我应该如何使用Visual C ++ / MFC进行此操作?
答案 0 :(得分:1)
我找到了解决这个问题的方法。结果我在MSDN上根据不正确的API描述做出了错误的假设。
我们可以阅读here,LsaOpenPolicy
似乎需要管理员权限,有关Access Masks的文章没有说,也没有引导我到任何可以找到有关所需权限的信息的地方。但是,由于堆栈溢出用户TripShock和他对类似主题here的评论,我发现实际上只使用POLICY_VIEW_LOCAL_INFORMATION
访问标志不会调用管理员权限。在我的程序和虚拟机中测试它,结果证明是真的。