【发布时间】:2013-06-07 11:42:46
【问题描述】:
我进行 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 是通过in this answer显示的方式抓取的对象
【问题讨论】:
-
您发布的代码不完整。你能说明你是如何调用
GetNames函数的吗? -
@RRUZ 当然:) 我更新了我的问题。
标签: visual-c++ wmi wmi-service