我让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之前总是ok的(在我的方法IWbemObjectSink::指示的实现中检索)。当我调用IWbemClassObject::GetNames一些WMI机制调用我的IWbemObjectSink::SetStatus与标志WBEM_STATUS_COMPLETE和没有新的事件发生!!我不调用任何cancel async方法。
我做错了什么?如何防止停止WMI事件?如何安全地调用GetNames?调用IWbemClassObject::GetNames后,我想仍然订阅新的事件。
UDPATE: 我叫 getname :
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是按此答案中显示的方式抓取的对象
这是一个过时的问题,所以可能太晚了,但是试着像这样打电话:
HRESULT hres;
long unsigned result;
hres = piappObj->GetNames(
WBEM_INFINITE,
1,
& piappObj,
& result);