2016-07-08 19 views
1

Ich versuche, den Namen einer Gruppe in Bezug auf die SID der Gruppe zu erhalten. Die SID der lokalen Admin-Gruppe ist beispielsweise S-1-5-32-544. Ich verwende die Funktion ConvertStringSidToSid und LookupAccountSid den Namen der Gruppe Administrator zu erhalten, aber die Funktion Rückkehr 0.Name der LocalGroup Windows C++ mit SID

Jede Beratung zu diesem Thema?

#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); 
} 

bekomme ich folgende Fehlermeldung:

Fehlercode: 87 Der Parameter ist falsch.

+0

Wenn 'LookupAccountSid' fehlschlägt, was gibt' GetLastError' zurück? –

+0

Wie haben Sie die angeforderten Informationen erhalten? Sie übergeben keine Ausgabepuffer, aber vielversprechend, dass beide die Größe 1 haben. Die Dokumentation für [LookupAccountSid] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa379166.aspx) bittet, genauer gelesen zu werden. – IInspectable

+0

@Intspectable hum, ich bearbeite den Code – mpgn

Antwort

2

LookupAccountSid() erfordert ein PSID, kein Zeiger auf ein PSID, so &psid falsch ist.

+0

Die Hälfte dieser Antwort ist richtig. LookupAccountSid benötigt sicherlich eine 'PSID', aber ConvertStringSidToSid benötigt eine' PSID * '. Überprüfen Sie die Dokumentation. Es ist ein Zeiger auf einen Zeiger. –

+0

@CodyGray Ich habe die Dokumentation falsch gelesen, Sie sind richtig. – ncalmbeblpaicr0011