如何通过用户name/domain检查用户是否是管理员组的成员

How to check if a user is a member of the Administrator's group by user name/domain

如果我拥有的唯一信息是用户名(如果相关,还有域),我怎么知道用户是否是管理员组的成员?

我知道如何为当前用户获取这些信息。 但是,就我而言,我需要为尚未登录的用户获取此信息(我正在使用 Credential Provider)。因此,我只能使用用户名和域。

此问题仅与 Windows 台机器相关。

我正在使用 C#/C++。

我知道 C# WindowsPrincipal class 如下所示:WindowsPrincipal

我也知道 IsUserAnAdmin() Windows API。 但是,我不能使用这些方法,因为我正在处理尚未登录的用户(我的代码在用户实际进入 Windows 机器之前执行)

如果 "almost always right" 足够好,您将需要递归枚举用户的组成员身份以查看是否找到 Administrators 组。这不是微不足道的,但也不是不合理的困难。没有内置库可以为您完成。

第一个问题是,这假设您对 Active Directory 有足够的访问权限来读取所有相关组。默认情况下,本地系统帐户可以执行此操作,但您需要禁止系统管理员以域计算机无法读取组成员身份的方式更改组的安全权限。

此外,我不确定凭据提供程序 运行 在什么安全上下文中,因此您可能需要一个单独的服务 运行 代表您枚举域成员资格。

第二个问题是,这不会包括特殊的安全主体,例如 Everyone、INTERACTIVE 等,但您可以忽略这些 - 如果他们中的任何一个成为 Administrators 组的成员,那将是极其不寻常的.如果您认为有必要,您可以尝试包含它们,或者您可以明确禁止系统管理员这样做。

可能根据需要重新构建更明智,这样您就不需要在获得用户密码之前做出此决定。