我正试图在Windows上使用C ++获取计算机的主域SID。 我已经pipe理,使用PolicyPrimaryDomainInformation
参数使用LsaQueryInformationPolicy
。 我为此操作打开了LSA策略,如下所示:
auto lsaStatus = LsaOpenPolicy(Server, &ObjectAttributes, GENERIC_READ | POLICY_VIEW_LOCAL_INFORMATION, &PolicyHandle);
不幸的是,使用LSAOpenPolicy
请求者的pipe理员权限运行,对于我正在处理的项目,它不能,因为大多数用户不会拥有它。 我的问题是 – 有没有办法获得当前的计算机的主要域的SID,而不需要pipe理员权限? 如果有的话,我应该如何去做这个使用Visual C ++ / MFC?
我找到了解决这个问题的办法。 原来我根据MSDN上错误的API描述做了错误的假设。 正如我们在这里可以看到的, LsaOpenPolicy
似乎需要管理员权限,关于访问面具的文章没有提到,也没有引导我到哪里找到任何有关所需特权的信息。 但是,由于堆栈溢出用户TripShock和他在这里对类似主题的评论,我发现实际上只使用POLICY_VIEW_LOCAL_INFORMATION
访问标志将不会调用管理员权限。 在我的程序和虚拟机上测试,结果是真的。