我进行WMI查询 SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA'Win32_Process'
hres = this->m_IWbemServicesComPtr->ExecNotificationQueryAsync(
_bstr_t("WQL"),
_bstr_t(query.c_str()),
WBEM_FLAG_SEND_STATUS,
0,
this->m_IWbemObjectStubSinkComPtr.GetInterfacePtr());
在我在COM对象 IWbemClassObject 的实例上调用方法 GetNames 之前总是好的(在我的方法 IWbemObjectSink :: Indicate 的实现中检索) 。当我调用 IWbemClassObject :: GetNames 时,某些WMI机制使用标志 WBEM_STATUS_COMPLETE 调用我的IWbemObjectSink :: SetStatus,并且没有任何新事件发生!我没有调用任何取消异步方法。
我做错了什么?如何防止停止WMI事件?如何安全地调用GetNames?在调用 IWbemClassObject :: GetNames 之后,我还想订阅新事件。
UDPATE:我如何调用 GetNames :
HRESULT EnumInstPropNameWMI( IN IWbemClassObject* piappObj,
OUT LPSAFEARRAY* ppsarProp )
{
if (0 == ppsarProp || 0 == piappObj)
return E_INVALIDARG;
HRESULT hres;
hres = piappObj->GetNames( 0,
0,//WBEM_FLAG_ALWAYS | WBEM_FLAG_NONSYSTEM_ONLY,
0,
ppsarProp);
return hres;
}
piappObj 是通过in this answer显示的方式抓取的对象
答案 0 :(得分:1)
这是一个过时的问题,所以可能为时已晚,但尝试拨打这样的电话:
HRESULT hres;
long unsigned result;
hres = piappObj->GetNames(
WBEM_INFINITE,
1,
& piappObj,
& result);