我进行 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 机制调用我的 IWbemObjectSink::SetStatus 并带有标志WBEM_STATUS_COMPLETE并且没有任何新事件发生!!!我不调用任何取消异步方法。
我做错了什么?如何防止停止 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是通过此答案中显示的方式抓取的对象