对于我在工作中写的小型实用应用程序,我有以下代码来确定当前用户帐户是本地或域管理员:
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是否从属于域名AMPINS组或BUILTINAdministrators
的用户帐户?
这不是安全问题,因为该应用程序实际上将无法执行任何有用的事情
在这种情况下,正确的解决方案是设置/MANIFESTUAC:level=requireAdministrator
链接器选项,或者如果您已经有清单,请如下所述添加requestedExecutionLevel
条目。
这样,Windows将拒绝在没有提高特权的情况下运行该程序,并且您无需在代码中执行任何操作。这也将使用户更容易,因为他们不必显式运行您的代码即可工作。Windows将在必要时提示它们。
但是,如果您确实想以编程方式进行操作,请查看CheckTokenMembership函数的文档,甚至具有示例代码,可以完全执行您要求的内容。: - )