3

グループ名とユーザーアカウントを指定すると、指定したユーザーが特定のグループに属しているかどうかを知りたいと思います。ユーザーはローカルユーザーまたはドメインユーザーで、グループはローカルグループまたはドメイングループであり、グループは他のグループ内にネストすることもできます。要するに、内部的に適切なWin32 APIを呼び出して検索を行うbool IsUserMemberOf(User, Group)のような関数を探しています。上記のクエリを作成するプロセスには、ローカルおよびADグループを照会するために必要な権限が必要です。私はエンタープライズ管理アカウントの下でプロセスを実行すると、フォレスト内の任意のDCを照会する作業を行う必要がありますが、ドメインの一部ではないマシンでは機能しない可能性があります。 LSAとADの両方を照会することができるように、この照会プロセスをどのアカウントで実行するべきかについての考え方はありますか?ユーザーアカウントがWindowsの特定のグループのメンバであるかどうかをプログラムで調べるにはどうすればよいですか?

答えて

1

GetTokenInformation(TOKEN_USER)、AllocateAndInitializeSidおよびCheckTokenMemberShipにお読みください。

+0

答えはOPは、私がいるよ同じような状況にあった可能性があるため、受け付けられませんでした:私は、トークンを持っていない、ただSID&名前をそれぞれアカウントとグループ用です。パスワードを知らずにトークンを取得する方法はありますか?または、SIDだけで実行するLSA関数がありますか?私はまだ狩りの後で立ち往生している。 –

+0

私は同じ位置にありますが、2つのマイクロソフトの公式の例はありません、どちらの仕事も、常にすべてのユーザーの管理者グループを返します。 – Owl

0

マグナスは右である、あなたはあなたが(私のフランス語を言い訳;)UnlockPolicy.c(full source hereをダウンロード)、機能ShouldUnlockForUserUsagerEstDansGroupeでサンプルを見つけることができます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; 
} 
+0

「ハンドル」とは何ですか?ユーザー名をハンドルに変換する方法はありますか? – Owl

+0

ハンドルは、(LogonUserのように)ユーザを認証するか、(WTSQueryUserTokenのような)現在のコンテキストから取得するメソッドによって返されます。どちらが使用するかは、コンテキストに大きく依存します...質問に答えて、SOコミュニティがより役立つ回答を提供します! – ixe013

+1

これは管理者にとっては役に立たないことに注意してください。管理者は、priveledgesがエスカレートされたときにのみ、グループに属します。 – Owl

関連する問題