C++ 获取本地组的域用户成员资格

C++ 获取本地组的域用户成员资格,c++,c,windows,active-directory,group-membership,C++,C,Windows,Active Directory,Group Membership,我的计算机上有一个本地组Grp1,我想检查域用户的成员资格。我已经为此使用了NetUserGetLocalGroups。但我遇到的问题是,域用户不是组Grp1的直接成员。例如,假设有两个域组,分别是DomainGrp1和DomainGrp2。现在,我的用户DomainUser1是组DomainGrp2的一部分,DomainGrp2是组DomainGrp1的一部分,组DomainGrp1是本地组Grp1的一部分。如果在上述场景中使用此NetUserGetLocalGroups,则API不会为Dom

我的计算机上有一个本地组
Grp1
,我想检查域用户的成员资格。我已经为此使用了
NetUserGetLocalGroups
。但我遇到的问题是,域用户不是组
Grp1
的直接成员。例如,假设有两个域组,分别是
DomainGrp1
DomainGrp2
。现在,我的用户
DomainUser1
是组
DomainGrp2
的一部分,
DomainGrp2
是组
DomainGrp1
的一部分,组
DomainGrp1
是本地组
Grp1
的一部分。如果在上述场景中使用此
NetUserGetLocalGroups
,则API不会为
DomainUser1
枚举
Grp1
,但实际上
DomainUser1
Grp1
的一部分

另外请注意,如果
DomainUser1
DomainGrp1
的直接成员,而不是
DomainGrp2
(其中
DomainGrp1
Grp1
的成员)。API完美地枚举了
Grp1
。有人能帮我解决这个问题吗

我已尝试使用
LogonUser
API进行模拟。但我遇到的问题是,用户在下次登录时被标记为更改密码。然后API返回false,因此我无法获取模拟令牌

PS:我不想使用任何目录服务API


我可以在MSDN上找到类似的问题

您只需自己迭代组成员身份即可。显然,您需要访问域(即,您不能在本地用户帐户的上下文中运行)才能这样做。这是一种方式,前提是我愿意与域进行交互。但不幸的是,我不愿意这样做,因为我不能确保我将在客户机上拥有领域的知识。因此,我不想使用目录服务API。显然,如果不与域进行交互,您就无法做到这一点-您需要的信息存储在域中。但是您不一定需要使用DS API,例如,请参阅NetLocalGroupGetMembers和NetGroupGetUsers。请再次查看问题。我已经使用了NetUserGetLocalGroups。NetLocalGroupGetMembers的工作方式类似。我也试过了。NetLocalGroupGetMembers应该为您提供属于感兴趣的本地组的域组,NetGroupGetUsers应该能够枚举这些域组中的用户。但是,您必须进行试验,看看是否能够以这种方式处理嵌套域组,我对此不确定。如果没有,你只需要使用目录服务API——微软甚至有这样的API,可以满足你的需要,所以我不明白你为什么这么不愿意使用它。你只需要自己迭代组成员身份。显然,您需要访问域(即,您不能在本地用户帐户的上下文中运行)才能这样做。这是一种方式,前提是我愿意与域进行交互。但不幸的是,我不愿意这样做,因为我不能确保我将在客户机上拥有领域的知识。因此,我不想使用目录服务API。显然,如果不与域进行交互,您就无法做到这一点-您需要的信息存储在域中。但是您不一定需要使用DS API,例如,请参阅NetLocalGroupGetMembers和NetGroupGetUsers。请再次查看问题。我已经使用了NetUserGetLocalGroups。NetLocalGroupGetMembers的工作方式类似。我也试过了。NetLocalGroupGetMembers应该为您提供属于感兴趣的本地组的域组,NetGroupGetUsers应该能够枚举这些域组中的用户。但是,您必须进行试验,看看是否能够以这种方式处理嵌套域组,我对此不确定。如果没有,你只需要使用目录服务API——微软甚至有这样的API,它完全满足你的需要,所以我不明白你为什么不愿意使用它。