视觉对象 从 c++ 中的 SID 获取用户名失败
visual Getting user name failed from the SID in c++?
当我尝试使用以下代码获取用户名时,我已成功获取用户名:
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);
相关文章:
- 如何获取用户输入的算术表达式,如 5-8+7*4-8+9 或 1+5?
- C++如何使用表达式获取用户输入?
- 有没有办法获取用户操作系统的ANSI转义码?
- 当PSO细粒度策略对使用AdsGetObject MSDN API的Windows操作系统生效时,如何获取用户密码到期日
- C++ .我正在尝试通过使用开关内的数组来获取用户输入,但是当我运行代码时,它显示分段错误?
- 使用 Firebase 从C++获取用户的电话号码
- 从 R 控制台获取用户输入:Rcpp 和 std::cin
- 如何使用字符串获取用户控制台输入
- 循环以使用 cstring 数组 c++ 获取用户输入
- 尝试获取用户输入和cout消息期望,当我输入一个有效名称时,它将所有这些命名
- 获取用户输入以形成链表
- 尝试编写进程内存并获取用户定义的文字运算符未找到
- 如何使用 C++17 std::文件系统获取用户的主目录?
- C |获取用户输入而无需给出值
- 如何在消息文件中获取用户定义的字段
- 从Windows上的系统工作的服务中获取用户文档文件夹.C++
- 如何阻止 cin.getline() 导致控制台在找不到分隔符时重复获取用户输入?
- C++:获取用户通过cin输入的数据类型
- 如何在C 中使用我的服务来获取用户的SID和用户名
- 结构数组:无需致电并获取用户输入的匹配函数