0

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_NULLVT_BSTRclsObj->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_BSTRWindows 7 マシンまたはVT_NULLWindows XP マシンで実行され、 a が返されます。

バグでしょうか?考え?

4

0 に答える 0