グループ名とユーザーアカウントを指定すると、指定したユーザーが特定のグループに属しているかどうかを知りたいと思います。ユーザーはローカルユーザーまたはドメインユーザーで、グループはローカルグループまたはドメイングループであり、グループは他のグループ内にネストすることもできます。要するに、内部的に適切なWin32 APIを呼び出して検索を行うbool IsUserMemberOf(User, Group)
のような関数を探しています。上記のクエリを作成するプロセスには、ローカルおよびADグループを照会するために必要な権限が必要です。私はエンタープライズ管理アカウントの下でプロセスを実行すると、フォレスト内の任意のDCを照会する作業を行う必要がありますが、ドメインの一部ではないマシンでは機能しない可能性があります。 LSAとADの両方を照会することができるように、この照会プロセスをどのアカウントで実行するべきかについての考え方はありますか?ユーザーアカウントがWindowsの特定のグループのメンバであるかどうかをプログラムで調べるにはどうすればよいですか?
3
A
答えて
1
GetTokenInformation(TOKEN_USER)、AllocateAndInitializeSidおよびCheckTokenMemberShipにお読みください。
1
UserPrincipal.IsMemberOf(GroupPrincipal) "プリンシパルが指定されたグループのメンバであるかどうかを指定するブール値を返します"。
0
マグナスは右である、あなたはあなたが(私のフランス語を言い訳;)UnlockPolicy.c(full source hereをダウンロード)、機能ShouldUnlockForUser
とUsagerEstDansGroupe
でサンプルを見つけることができますCheckTokenMembership
を使用する必要があります。ここで
はそれの根性です:
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. 特定のデータを調べるにはどうすればいいですか
- 2. 特定の要素に特定のクラスがあるかどうかを調べるにはどうすればよいですか?
- 3. Flash 9:ストリーミングトラックがモノであるかどうかを調べるにはどうすればよいですか?
- 4. コントロールがタブコントロール上にあるかどうかを調べるにはどうすればよいですか?
- 5. JavaScriptで特定の配列変数が空であるかどうかを調べるにはどうすればよいですか?
- 6. xpageの特定のツリーノードをプログラムで強調表示するにはどうすればよいですか?
- 7. クラスにDataContract属性があるかどうかを調べるにはどうすればいいですか?
- 8. WPFアプリケーションでフォーカスがどこにあるのかを調べるにはどうすればいいですか?
- 9. 特定の桁の配列が配列内にあるかどうかを調べるにはどうすればよいですか
- 10. msiがタイムスタンプされているかどうかを調べるにはどうすればよいですか?
- 11. 文字列に特定のURLが含まれているかどうかをPHPで調べるにはどうすればよいですか?
- 12. Okta APIを使用してユーザーがグループのメンバーであるかどうかを効率的に調べるにはどうすればよいですか?
- 13. セル配列内のセルにMATLABの特定の値が含まれているかどうかを調べるにはどうすればよいですか?
- 14. CでLinux上の特定のファイルのマウントパスを調べるにはどうすればよいですか?
- 15. アセットから特定のファイルの絶対パスを調べるにはどうすればよいですか?
- 16. 配列に特定の値があるかどうかを調べるにはどうすればよいですか?
- 17. 特定のAppがAndroidにインストールされているかどうかをXamarinから調べるにはどうすればよいですか?
- 18. z3_astが節に対応するかどうかを調べるにはどうすればよいですか?
- 19. 配列にJavaScript/jQueryの特定の値が含まれているかどうかを調べるにはどうすればよいですか?
- 20. NSSetに特定のコントロールの接触が含まれているかどうかを調べるにはどうすればよいですか?
- 21. 要素がテキストかどうかをPDFで調べるにはどうすればよいですか?
- 22. 特定の日付が現在の週に属しているかどうかを調べるにはどうすればよいでしょうか?
- 23. クラスが特定の型であるかどうかを調べる
- 24. Windowsトークン内のグループのグループスコープを特定するにはどうすればよいですか?
- 25. 特定のJavaScriptコードが実際に使用されているかどうかを調べるにはどうすればよいですか?
- 26. 特定のユーザーのすべてのLDAPグループを取得するにはどうすればよいですか?
- 27. argvがcharで終わるかどうかを調べるにはどうすればいいですか?
- 28. 特定のユーザーアカウントでサーバー構築タスクを実行するにはどうすればよいですか?
- 29. キャッシュ内の特定のRDDのサイズを調べるにはどうすればよいですか?
- 30. typeメンバーが列挙型かどうかを調べるにはどうすればよいですか?
答えはOPは、私がいるよ同じような状況にあった可能性があるため、受け付けられませんでした:私は、トークンを持っていない、ただSID&名前をそれぞれアカウントとグループ用です。パスワードを知らずにトークンを取得する方法はありますか?または、SIDだけで実行するLSA関数がありますか?私はまだ狩りの後で立ち往生している。 –
私は同じ位置にありますが、2つのマイクロソフトの公式の例はありません、どちらの仕事も、常にすべてのユーザーの管理者グループを返します。 – Owl