я сделать запрос WMI SELECT * FROM __InstanceCreationEvent ТЕЧЕНИЕ 1 WHERE TargetInstance ISA '' Win32_ProcessWMI IWbemClassObject :: GetNames статус полной
hres = this->m_IWbemServicesComPtr->ExecNotificationQueryAsync(
_bstr_t("WQL"),
_bstr_t(query.c_str()),
WBEM_FLAG_SEND_STATUS,
0,
this->m_IWbemObjectStubSinkComPtr.GetInterfacePtr());
И всегда хорошо, прежде чем я называю метод GetNames на экземпляр COM-объекта IWbemClassObject (получен в моей реализации метода IWbemObjectSink :: Показать). Когда я вызываю 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
@RRUZ конечно :) Я обновил свой вопрос. – Edward83