給定一個組名和一個用戶帳戶,我想知道提供的用戶是否屬於一個特定的組。用戶可以是本地用戶或域用戶,並且該組可以是本地組或域組,並且該組也可以嵌套在其他組內。總之,我正在尋找一個像bool IsUserMemberOf(User, Group)
這樣的函數,它將在內部調用相應的Win32 API來執行搜索。我想進行上述查詢的過程應具有查詢本地和AD組所需的權限。我猜想運行企業管理員帳戶下的流程應該可以查詢森林中的任何DC,但可能不適用於不屬於域的機器。關於這個查詢過程應該運行什麼帳戶的任何想法,以便它可以查詢LSA以及AD?如何以編程方式確定用戶帳戶是否是Windows中特定組的成員?
3
A
回答
1
您需要詳細瞭解GetTokenInformation(TOKEN_USER),AllocateAndInitializeSid和CheckTokenMemberShip。
1
UserPrincipal.IsMemberOf(GroupPrincipal)「返回一個布爾值,它指定委託人是否是指定組的成員」。
0
馬格努斯是正確的,你必須使用CheckTokenMembership
你可以找到UnlockPolicy.c樣本(下載full source here),功能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, 0, &dwSidSize, szDomain, &dwSize, &snu) == 0)
&& (ERROR_INSUFFICIENT_BUFFER == GetLastError()))
{
SID* pSid = (SID*)malloc(dwSidSize);
if (LookupAccountNameW(NULL, groupe, pSid, &dwSidSize, szDomain, &dwSize, &snu))
{
BOOL b;
if (CheckTokenMembership(user, pSid, &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;
}
相關問題
- 1. asp.net會員 - 如何以編程方式確定用戶是否在角色
- 2. 如何通過編程確定帳戶是否屬於管理員組?
- 3. 如何以編程方式確定ASP.Net工作進程帳戶
- 4. 檢查用戶是否是特定Facebook羣組的成員
- 5. NTLM:如何確定機器帳戶是否爲安全組的成員
- 6. 是否有可能以編程方式設置Windows服務的用戶帳戶?
- 7. 如何以編程方式確定Windows是否正在關機?
- 8. 如何確定Windows安裝程序是否以編程方式完成
- 9. 快速確定用戶帳戶是否爲AD組的成員的最佳方法?
- 10. Magento:如何確定客戶是否中止結帳過程
- 11. 如何確定用戶帳戶是啓用還是禁用
- 12. 如何檢查給定用戶是否是內置管理員組的成員?
- 13. 如何以編程方式確定特定進程是32位還是64位
- 14. 確定帳戶是否已過期PHP
- 15. 如何以編程方式確定提交是否在當前結帳
- 16. 如何以編程方式確定ehcache是否正在運行?
- 17. 如何以編程方式添加用戶帳戶策略?
- 18. 如何以編程方式將用戶帳戶添加到openDS?
- 19. 檢測特定的用戶帳戶是否存在在安裝過程中
- 20. 市場 - 應用是否與特定的Google帳戶綁定?
- 21. 確定當前用戶是否在Administrators組中(Windows/Python)
- 22. 運行Windows應用程序使用特定的用戶帳戶
- 23. 如何編輯特定帳戶的帳戶和同步設置
- 24. 如何檢查用戶是否來自Powershell中特定OU的特定組中
- 25. 在安裝我的Windows服務時,如何以編程方式使其使用特定的域帳戶
- 26. 如何檢查現有的用戶帳戶是否在管理員組中?
- 27. ejabberd:有沒有一種方法可以確定用戶是否是管理員?
- 28. 如何確定特定用戶(不是current_user)是否在restful_authentication中聯機?
- 29. 如何確定我的Android Google帳戶憑據是否有效?
- 30. 確定是否一個目錄的用戶的帳戶已禁用帳戶使用PrincipalContext方法
答案是從來沒有接受,可能是因爲OP是在同樣的情況我在:我沒有道理,只是一個SID和名稱每個帳戶和組。有沒有辦法在不知道密碼的情況下獲取令牌?或者,是否有一個LSA函數只用SID來完成?狩獵後我仍然陷入困境。 – 2012-12-19 11:22:27
我處於相同的位置,有兩個微軟官方示例,既不工作,也總是爲每個用戶返回管理員組。 – Owl 2017-12-01 10:50:43