winapi — c ++, WMI API возвращает VT_NULL, wmic возвращает VT_BSTR в Windows XP

Я использую следующий фрагмент в C ++ для запроса Win32_TCPIPPrinterPort с WQL:

[ cut WMI init part, initialize security and stuff ]

IWbemClassObject* clsObj = NULL;
int numElems;
while((hRes = pEnumerator->Next(WBEM_INFINITE, 1, &clsObj, (ULONG*)&numElems)) != WBEM_S_FALSE)
{

VARIANT vRet;
VariantInit(&vRet);

if(SUCCEEDED(clsObj->Get(LPCWSTR("HostAddress"), 0, &vRet, NULL, NULL)))
{
printf("HostAddress VT: %d", vRet.vt);
}

VariantClear(&vRet);

}

clsObj->Release();

[...]

(Проверки ошибок и инициализации были удалены для проводки)

Выше код работает в Windows 7 без каких-либо проблем и возвращает правильный VT_BSTR,
Но Windows XP дает VT_NULL вместо VT_BSTR за clsObj->Get(...

Если вы делаете

wmic -U user%pass //WINXPHOST "SELECT HostAddress FROM Win32_TCPIPPrinterPort"

вызов с другой (очевидно, Linux) машины в сети возвращает все значения просто отлично.

Я тоже пробовал cscript prnport.vbs -l -s WINXPHOST который сказал мне правильные значения.

[— РЕДАКТИРОВАТЬ —]

Интересно, я взял пример MSDN CMI WMI по умолчанию отсюда: Пример: получение данных WMI

Я изменил WQL на bstr_t("SELECT * FROM Win32_TCPIPPrinterPort"),
И в Step 7 в

// Get the value of the HostAddress property
hr = pclsObj->Get(L"HostAddress", 0, &vtProp, 0, 0);
wcout << " HostAddress : " << vtProp.bstrVal << endl;
VariantClear(&vtProp);

После компиляции он запускается и возвращает VT_BSTR на машинах с Windows 7, VT_NULL на машинах Windows XP.

Может быть ошибка?
Мысли?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

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