C++ で次のスニペットを使用して、WQL でWin32_TCPIPPrinterPortをクエリしています。
[ 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 は for の代わりVT_NULL
にVT_BSTR
clsObj->Get(...
あなたがする場合
wmic -U user%pass //WINXPHOST "SELECT HostAddress FROM Win32_TCPIPPrinterPort"
ネットワーク上の別の(明らかにLinux)マシンから呼び出すと、すべての値が正常に返されます。
cscript prnport.vbs -l -s WINXPHOST
また、正しい値を教えてくれたものも試しました。
[ - - 編集 - -]
興味深いことに、ここからデフォルトの C++ WMI MSDN の例を取り上げました:例: 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 マシンで実行され、 a が返されます。
バグでしょうか?考え?