Получить имя LocalGroup Windows C++ с помощью SID

Я пытаюсь получить имя группы относительно SID группы. SID локальной группы администраторов, например, S-1-5-32-544. Я использую функцию ConvertStringSidToSid и LookupAccountSid, чтобы получить имя группы Administrator, но функция возвращает 0.

Любой совет по этому поводу?

#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 Неверный параметр.


person mpgn    schedule 08.07.2016    source источник
comment
Когда LookupAccountSid терпит неудачу, что возвращает GetLastError?   -  person Cody Gray    schedule 08.07.2016
comment
Как вы ожидали получить запрошенную информацию? Вы не передаете никаких выходных буферов, но обещаете, что оба имеют размер 1. Документация для LookupAccountSid требует более внимательного прочтения.   -  person IInspectable    schedule 08.07.2016
comment
@IInspectable гул, я редактирую код   -  person mpgn    schedule 08.07.2016
comment
&psid неверно.   -  person ncalmbeblpaicr0011    schedule 08.07.2016
comment
правильный ответ! вы можете опубликовать это, я приму это @ncalmbeblpaicr0011   -  person mpgn    schedule 08.07.2016


Ответы (1)


LookupAccountSid() требует PSID, а не указателя на PSID, поэтому &psid неверно.

person ncalmbeblpaicr0011    schedule 08.07.2016
comment
Половина этого ответа верна. LookupAccountSid, безусловно, требует PSID, но ConvertStringSidToSid принимает PSID*. Проверьте документацию. Это указатель на указатель. - person Cody Gray; 08.07.2016