2016-07-08 11 views
1

グループのSIDに関するグループの名前を取得しようとしています。ローカル管理グループのSIDは、たとえばS-1-5-32-544です。私はConvertStringSidToSidは、グループ管理者の名前を取得するにはをのLookupAccountSid関数が、関数の戻り値は0SIDを使用してLocalGroup Windows C++の名前を取得

この上の任意のアドバイスを使うのか?

#ifndef UNICODE 
#define UNICODE 
#endif 

#include <windows.h> 
#include <lmcons.h> 
#include <lmaccess.h> 
#include <lmerr.h> 
#include <lmapibuf.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <Sddl.h> 
#include <string> 

#pragma comment(lib, "netapi32.lib") 
#pragma comment(lib, "Advapi32.lib") 

static const DWORD MAX_BUFF_SIZE = 256; 

std::wstring userNameFromSid() 
{ 

    PSID psid; 

    BOOL bSucceeded = ConvertStringSidToSid(TEXT("S-1-5-11"), &psid); 
    if (bSucceeded == FALSE) { 
     printf("Error Converting SID to String"); 
    } 

    wchar_t buffName[MAX_BUFF_SIZE]; 
    DWORD buffNameSize = MAX_BUFF_SIZE; 
    wchar_t buffDomain[MAX_BUFF_SIZE]; 
    DWORD buffDomainSize = MAX_BUFF_SIZE; 
    SID_NAME_USE SidType = SidTypeGroup; 

    if (LookupAccountSid(NULL, &psid, buffName, &buffNameSize, NULL, &buffDomainSize, &SidType)) 
    { 
     printf("group name %ws\n", buffName); 
     return buffName; 
    } 
    printf("Error code: %d", GetLastError()); 


    LocalFree(psid); 

    /*Here some code to print error in a Message box*/ 
    return L""; 
} 
int main() 
{ 
    NET_API_STATUS err = 0; 
    userNameFromSid(); 

    return(0); 
} 

私は次のエラーを取得する:

エラーコード:87 パラメータが正しくありません。

+0

'LookupAccountSid'が失敗したとき、' GetLastError'は何を返しますか? –

+0

リクエストされた情報をどのように受け取ることを期待しましたか? [LookupAccountSid](https://msdn.microsoft.com/en-us/library/windows/desktop/aa379166.aspx)のドキュメントは、サイズが1の出力バッファを渡すのではなく、有望です。より徹底的に読まれることを望みます。 – IInspectable

+0

@IInspectableハム、私はコードを編集します – mpgn

答えて

2

LookupAccountSid()PSIDへのポインタではなく、PSIDが必要なので、&psidが正しくありません。

+0

この答えの半分は正しいです。 LookupAccountSidは確かに 'PSID'を必要としますが、ConvertStringSidToSidは' PSID * 'をとります。ドキュメントを確認してください。ポインタへのポインタです。 –

+0

@CodyGray私はドキュメントを間違って読んだ、あなたは正しい。 – ncalmbeblpaicr0011

関連する問題