c++ - 使用 SID 获取 LocalGroup Windows C++ 的名称

标签 c++ windows winapi sid

我正在尝试根据组的 SID 获取组名。例如,本地管理员组的 SID 是 S-1-5-32-544。我使用函数 ConvertStringSidToSidLookupAccountSid 获取组管理员的名称,但函数返回 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);
}

我收到以下错误:

Error code: 87 The parameter is incorrect.

最佳答案

LookupAccountSid() 需要一个 PSID,而不是指向 PSID 的指针,因此 &psid 不正确。

关于c++ - 使用 SID 获取 LocalGroup Windows C++ 的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38268917/

相关文章:

c++ - 如何在 OS X 上获取 C++ 手册页?

c++ - 您可以在 Windows 7 上编写 Windows 95 代码吗?

c++ - 更改 LOCALE_USER_DEFAULT 的 LOCALE_SISO639LANGNAME

c++ - 在 std::pair 中使用 `std::make_pair`:C++ STL

c++ - vector 异常处理程序和 Microsoft C 运行时错误处理

windows - 如何构建 Docker 镜像自己的镜像

c++ - 调用未记录的函数

c - 是否可以利用另一个进程创建的 HWND?

c++ - VDS(虚拟磁盘服务)COM 接口(interface)通知 - 回调(接收器)仅在注销期间调用(不建议)

c++ - 访问 cv::Mat_16UC1 的单个元素