给定一个组名和一个用户帐户,我想知道提供的用户是否属于一个特定的组。 用户可以是本地用户或域用户,并且该组可以是本地组或域组,并且该组也可以嵌套在其他组内。 简而言之,我正在寻找一个像bool IsUserMemberOf(User,Group)这样的函数,它将在内部调用相应的Win32 API来执行search。 我想进行上述查询的过程应具有查询本地和AD组所需的权限。 我想运行企业pipe理员帐户下的进程应该做的查询任何森林区议会,但可能不适用于不属于域的机器。 关于这个查询过程应该运行什么帐户的任何想法,以便它可以查询LSA以及AD?
为什么Apache需要SSLCertificateKeyFile?
如何testing主机名称是否指本地机器
在没有完全信任的情况下devise基于Linux的系统来实现所有权/pipe理权的可转移性
Nginx auth_basic发送密码明文吗?
用于在服务器上存储Openssl密码的安全选项(Linux,Python,CherryPy)
您需要阅读GetTokeninformation (TOKEN_USER), AllocateAndInitializeSid和CheckTokenMemberShip 。
UserPrincipal.IsMemberOf(GroupPrincipal) “返回一个布尔值,指定主体是否是指定组的成员”。
Magnus是对的,你必须使用CheckTokenMembership
你可以在UnlockPolicy.c中找到一个示例(下载完整的源码 ),函数ShouldUnlockForUser和UsagerEstDansGroupe (原谅我的法语;)。
这是它的胆量:
HRESULT IsUserInGroup(HANDLE user,const wchar_t* groupe) { HRESULT result = E_FAIL; SID_NAME_USE snu; WCHAR szDomain[256]; DWORD dwSidSize = 0; DWORD dwSize = sizeof szDomain / sizeof * szDomain; if ((LookupAccountNameW(NULL,groupe,&dwSidSize,szDomain,&dwSize,&snu) == 0) && (ERROR_INSUFFICIENT_BUFFER == GetLastError())) { SID* pSid = (SID*)malloc(dwSidSize); if (LookupAccountNameW(NULL,pSid,&snu)) { BOOL b; if (CheckTokenMembership(user,&b)) { if (b == TRUE) { result = S_OK; } } else { result = S_FALSE; } } //Si tout vas bien (la presque totalitée des cas),on delete notre pointeur //avec le bon operateur. free(pSid); } return result; }