确定当前用户帐户属于哪个组?

时间:2016-12-05 20:10:48

标签: c winapi user-accounts usergroups

对于我正在编写的小型实用程序应用程序,我有以下代码来确定当前用户帐户是本地用户还是域管理员:

    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

这在我们的案例中现在适用于:

  1. 我们拥有的域管理员帐户是内置管理员帐户
  2. 我们没有任何其他域名管理员帐户。
  3. 但是,我意识到这是一个糟糕的解决方案,因为将来我们可能会添加其他域管理员帐户。有没有办法确定使用Windows API,运行该进程的用户帐户是属于Domain Admins组还是属于BUILTIN\Administrators

    这不是一个安全问题,因为除非以管理员身份运行,否则应用实际上无法做任何有用的事情,这只是为了提高稳定性。

1 个答案:

答案 0 :(得分:3)

在这种情况下,正确的解决方案是设置/MANIFESTUAC:level=requireAdministrator链接器选项,或者如果您已有清单,请添加requestedExecutionLevel条目as described here

这样,Windows将拒绝在没有提升权限的情况下运行程序,并且您不需要在代码中执行任何操作。这也将使用户更容易,因为他们不必显式运行您提升的代码以使其工作; Windows会根据需要提示他们。

但是,如果确实希望以编程方式执行此操作,see the documentation for the CheckTokenMembership function,它甚至具有完全符合您要求的示例代码。 : - )

相关问题