当我尝试使用以下代码获取用户名时,我已成功获取用户名:
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 root\CIMV2 WMI namespace
GetObject failed Error code = 0x8004103a
IDispatch error #3642
你能否在GetObject方法中建议我正确的输入。
答案 0 :(得分:0)
我相信你正在寻找这个:
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。
答案 1 :(得分:0)
在行中
hres = pSvc->GetObject(L"Win32_SID.SID=SID", 0, NULL, &pclsObj, NULL);
你要求输入字符串“SID”的用户名。那不行。
您需要连接“Win32_DID.SID =”和您的SID-String。此外,您需要将其作为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);