Визуальный Получение имени пользователя не удалось из SID в 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 root\CIMV2 WMI namespace
GetObject failed Error code = 0x8004103a
IDispatch error #3642

Не могли бы вы предложить мне правильный ввод в метод GetObject.

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.

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);

0

По вопросам рекламы [email protected]