2010-08-17 32 views
1

我該如何去查詢當前登錄用戶屬於哪個活動目錄組?我假設它將通過LDAP,但我已經能夠找到很多關於如何獲得這些特定信息。查找當前用戶活動目錄組C++

我已經把一些代碼,但即時通訊不能肯定什麼,我需要在下一個

// 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; 
} 

回答

2

在您的特定情況下,我認爲你可以沒有任何LDAP調用事要做。這裏有一個建議:

  • 使用GetCurrentProcessIdOpenProcess得到一個句柄到當前進程
  • 呼叫OpenProcessToken上手柄以打開當前進程
  • 對訪問令牌的呼叫GetTokenInformation相關聯的訪問令牌,令牌信息類別爲TokenGroups
  • 結果TOKEN_GROUPS結構包含一個列表,其中包含訪問令牌中所有組的SID和屬性
  • c所有LookupAccountSid在列表中的每個組的SID上獲取其名稱

MSDN應提供有關上述調用的更多詳細信息。

+0

我開始拼湊一些代碼,但我不知道我需要做什麼在最後一步使用LookupAccountSid – thecaptain0220 2010-08-19 14:17:05

+0

假設對'GetTokenInformation'的調用是成功的;你現在應該有一個指向'TOKEN_GROUPS'結構的指針,'ptokengroups'。對於每個「ptokengroups-> GroupCount」組,在'ptokengroups-> Groups [idx] .Sid'上調用'LookupAccountSid'。 – 2010-08-20 07:38:34

+0

我看到你已經編輯了這個問題,並添加了代碼,它使用具有TokenUser而不是TokenGroups的'GetTokenInformation',儘管你最初說你想檢索當前用戶所屬的組。無論如何,給定代碼,您現在可以通過調用'LookupAccountSid'來獲取用戶的名稱和域名,這是第一次使用NULL輸出緩衝區來檢索它們的大小,然後使用有效的:'LookupAccountSid(NULL,(pTokenUser->用戶).Sid,name,&namesize,domainname,&domainnamesize,&use)','SID_NAME_USE use = SidTypeUnknown'。對於組進行類似的處理。 – 2010-08-23 07:16:23

相關問題