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



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

    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. 我们没有任何其他域管理帐户。

但是,我意识到这是一个不好的解决方案,因为将来我们可能会添加其他域管理员帐户。是否有一种方法可以确定使用Windows API是否从属于域名AMPINS组或BUILTINAdministrators的用户帐户?

这不是安全问题,因为该应用程序实际上将无法执行任何有用的事情

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

这样,Windows将拒绝在没有提高特权的情况下运行该程序,并且您无需在代码中执行任何操作。这也将使用户更容易,因为他们不必显式运行您的代码即可工作。Windows将在必要时提示它们。

但是,如果您确实想以编程方式进行操作,请查看CheckTokenMembership函数的文档,甚至具有示例代码,可以完全执行您要求的内容。: - )

相关内容

  • 没有找到相关文章

最新更新