1

現在ログインしているユーザーが属している Active Directory グループを照会するにはどうすればよいですか? LDAP 経由であると想定していますが、この特定の情報を取得する方法についてはあまり見つけることができませんでした。

いくつかのコードをまとめましたが、次に何をする必要があるかよくわかりません

    // Open the access token associated with the calling process.
if (OpenProcessToken(GetCurrentProcess(),
                     TOKEN_QUERY,
                     &hToken) == FALSE)
{
    dwErrorCode = GetLastError();
    wprintf(L"OpenProcessToken failed. GetLastError returned: %d\n", dwErrorCode);
    return HRESULT_FROM_WIN32(dwErrorCode);
}

// Retrieve the token information in a TOKEN_USER structure.
GetTokenInformation(hToken,
                    TokenUser,      // Request for a TOKEN_USER structure.
                    NULL,
                    0,
                    &dwBufferSize);

pTokenUser = (PTOKEN_USER) new BYTE[dwBufferSize];
memset(pTokenUser, 0, dwBufferSize);
if (GetTokenInformation(hToken,
                        TokenUser,
                        pTokenUser,
                        dwBufferSize,
                        &dwBufferSize))
{
    CloseHandle(hToken);
}
else
{
    dwErrorCode = GetLastError();
    wprintf(L"GetTokenInformation failed. GetLastError returned: %d\n", dwErrorCode);
    return HRESULT_FROM_WIN32(dwErrorCode);
}

if (IsValidSid(pTokenUser->User.Sid) == FALSE)
{
    wprintf(L"The owner SID is invalid.\n");
    delete [] pTokenUser;
}
4

1 に答える 1

2

あなたの特定のケースでは、LDAP 呼び出しなしでできると思います。ここに提案があります:

  • GetCurrentProcessIdandを使用OpenProcessして、現在のプロセスへのハンドルを取得します
  • そのハンドルを呼び出しOpenProcessTokenて、現在のプロセスに関連付けられたアクセス トークンを開く
  • GetTokenInformationのトークン情報クラスを使用して、そのアクセス トークンを呼び出します。TokenGroups
  • 結果のTOKEN_GROUPS構造には、アクセス トークン内のすべてのグループの SID と属性を含むリストが含まれます。
  • LookupAccountSidリスト内の各グループの SID を呼び出して、その名前を取得します

MSDN は、上記の呼び出しに関するより詳細な情報を提供する必要があります。

于 2010-08-18T11:54:13.483 に答える