获取没有管理员权限的主域SID

时间:2015-07-27 11:24:23

标签: c++ windows visual-c++ dns sid

我正在尝试使用C ++在Windows上获取计算机的主域SID。我已经使用带有LsaQueryInformationPolicy参数的PolicyPrimaryDomainInformation来做到这一点。我按照以下方式为此操作打开了LSA策略:

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

不幸的是,使用LSAOpenPolicy requiers管理员权限来运行和我正在处理的项目,它不能,因为大多数用户都不会拥有它。我的问题是 - 有没有办法获得当前计算机的主域SID而不调用管理员权限?如果有,我应该如何使用Visual C ++ / MFC进行此操作?

1 个答案:

答案 0 :(得分:1)

我找到了解决这个问题的方法。结果我在MSDN上根据不正确的API描述做出了错误的假设。 我们可以阅读hereLsaOpenPolicy似乎需要管理员权限,有关Access Masks的文章没有说,也没有引导我到任何可以找到有关所需权限的信息的地方。但是,由于堆栈溢出用户TripShock和他对类似主题here的评论,我发现实际上只使用POLICY_VIEW_LOCAL_INFORMATION访问标志不会调用管理员权限。在我的程序和虚拟机中测试它,结果证明是真的。