视觉对象 从 c++ 中的 SID 获取用户名失败

visual Getting user name failed from the SID in c++?

本文关键字:获取 用户 失败 SID 中的 对象 c++ 视觉      更新时间:2023-10-16

当我尝试使用以下代码获取用户名时,我已成功获取用户名:

hres = pSvc->GetObject(L"Win32_SID.SID='S-1-5-82-1036420768-1044797643-1061213386-2937092688-4282445334'",  0, NULL, &pclsObj, NULL);

但是当将 SID 分配给变量时,如下所示

std::string SID = "S-1-5-82-1036420768-1044797643-1061213386-2937092688-4282445334";
hres = pSvc->GetObject(L"Win32_SID.SID=SID",  0, NULL, &pclsObj, NULL);

然后我得到以下错误:

Connected to rootCIMV2 WMI namespace
GetObject failed Error code = 0x8004103a
IDispatch error #3642

您能否建议我在 GetObject 方法中的正确输入。

我相信

你正在寻找这个:

std::wstring SID = L"S-1-5-82-1036420768-1044797643-1061213386-2937092688-4282445334";
hres = pSvc->GetObject((L"Win32_SID.SID='" + SID + L"'").c_str(),  0, NULL, &pclsObj, NULL);

如果上面的代码(注意我添加了一个忘记的调用c_str()(对你不起作用,你可以试试这个:

#include <sstream>
std::wstring SID = L"S-1-5-82-1036420768-1044797643-1061213386-2937092688-4282445334";
std::wostringstream s;
s << L"Win32_SID.SID='" << SID << L"'";
hres = pSvc->GetObject(s.str().c_str(),  0, NULL, &pclsObj, NULL);

如果这仍然不起作用,我会开始怀疑编译器有问题。


您在评论中提到您正在使用古老的VC++ 6.0,所以我将尝试一些非常基本的东西(我假设您的目标是SID成为一个变量(:

#include <cwchar>
std::wstring SID = L"S-1-5-82-1036420768-1044797643-1061213386-2937092688-4282445334";
const wchar_t *prefix = L"Win32_SID.SID='";
wchar_t *arg = new wchar_t[wcslen(prefix) + SID.size() + 2]; //2 = terminating ' and NUL
wcscpy(arg, prefix);
wcscat(arg, SDI.c_str());
wcscat(arg, L"'");
hres = pSvc->GetObject(arg,  0, NULL, &pclsObj, NULL);
delete[] arg;

请注意,这不是测试它 - 我无法访问VC++ 6.0。

在行
hres = pSvc->GetObject(L"Win32_SID.SID=SID", 0, NULL, &pclsObj, NULL);
您要求属于字符串"SID"的用户名。这是行不通的。需要连接"Win32_DID.SID="和 SID 字符串。另外,您需要将其作为 WSTRING 提供:
std::wstring SID = L"S-1-5-82-1036420768-1044797643-1061213386-2937092688-4282445334"; std::wstring query = "Win32_DID.SID='" + SID + "'"; hres = pSvc->GetObject(query, 0, NULL, &pclsObj, NULL);