WMI IWbemClassObject::GetNames status complete



我让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);

最新更新