【发布时间】:2016-12-05 20:10:48
【问题描述】:
对于我在工作中编写的一个小型实用程序应用程序,我有以下代码来确定当前用户帐户是本地管理员还是域管理员:
WCHAR wszUser[UNLEN];
GetEnvironmentVariableW(L"username", wszUser, UNLEN);
#ifndef _DEBUG
if (StrCmpIW(wszUser, L"Administrator") != 0)
{
MessageBoxW(0, L"This program can only be run as Administrator.", L"Error", MB_OK | MB_ICONSTOP);
return 0;
}
#endif
这适用于我们的案例,因为:
- 我们拥有的域管理员帐户是内置管理员帐户
- 我们没有任何其他域管理员帐户。
但是,我意识到这是一个糟糕的解决方案,因为将来我们可能会添加其他域管理员帐户。有没有办法使用 Windows API 确定运行进程的用户帐户是否属于 Domain Admins 组或BUILTIN\Administrators?
这不是安全问题,因为除非以管理员身份运行,否则该应用实际上无法执行任何有用的操作,这只是为了稳健性。
【问题讨论】:
-
在这种情况下,正确的解决方案是使用
/MANIFESTUAC:level=requireAdministrator链接器选项,或者如果您已经有一个清单,添加一个带有level="requireAdministrator"as described here 的requestedExecutionLevel条目。 -
如果您出于其他原因需要检索组信息,请查看stackoverflow.com/questions/10450998/…。但在这种情况下,我同意@HarryJohnston。
标签: c winapi user-accounts usergroups