【问题标题】:WMI IWbemClassObject::GetNames status completeWMI IWbemClassObject::GetNames 状态完成
【发布时间】: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


【解决方案1】:

这是一个过时的问题,所以可能为时已晚,但尝试像这样拨打电话:

HRESULT hres;
long unsigned result;

hres = piappObj->GetNames(   
                     WBEM_INFINITE,
                     1,
                     & piappObj,
                     & result);

【讨论】:

    猜你喜欢
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 2019-02-05
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 2021-12-09
    相关资源
    最近更新 更多