【发布时间】:2019-12-26 20:05:57
【问题描述】:
我正在尝试使用 C++ 调用某个 WMI 方法:Msvm_VirtualSystemManagementService::GetVirtualSystemThumbnailImage (https://docs.microsoft.com/en-us/previous-versions/windows/desktop/virtual/getvirtualsystemthumbnailimage-msvm-virtualsystemmanagementservice)。
该方法本身需要三个参数:一个对 CIM_VirtualSystemSettingData 实例的引用和两个 uint16。
在 C++ 中,调用 WMI 方法首先需要通过 IWbemClassObject::GetMethod 和 SpawnInstance 获取方法的参数;此时,您可以开始使用IWbemClassObject::Put方法开始填写参数,即:
CComVariant varCommand2;
varCommand2.vt = VT_BSTR;
varCommand2.bstrVal = _bstr_t("32");
hres = pClassInstance->Put(L"WidthPixels", 0, &varCommand2, CIM_UINT16);
这很好用。但是,我找不到任何关于传递 CIM 类实例的文档。 IWbemClassObject::Put 上的文档说明:
如果 pVal 要包含嵌入的 IWbemClassObject,则调用者必须为 IID_IUnknown 调用 IWbemClassObject::QueryInterface,并使用 VT_UNKNOWN 类型将结果指针放在 VARIANT 中。
因此,这就是我想要做的:
CComVariant varCommand;
varCommand.vt = VT_UNKNOWN;
vVirtualSystemSettingData[0].getClassInstance()->QueryInterface(IID_IUnknown, (void**)&varCommand); //getClassInstance returns a reference to the CComPtr that contains the VirtualSystemSettingData I want to use
hres = pClassInstance->Put(L"TargetSystem", 0, &varCommand, 0);
不幸的是,我只是得到一个不匹配错误,所以我知道我没有正确执行此操作。 Ergo,有谁知道如何将 CIM 对象的引用传递给 IWbemClassObject::Put 方法?
亲切的问候!
【问题讨论】:
-
你有没有让这个工作?我有同样的问题。谢谢!