#pragma comment(lib, "wbemuuid.lib")
ZBX_VECTOR_DECL(wmi_prop, zbx_wmi_prop_t)
ZBX_VECTOR_IMPL(wmi_prop, zbx_wmi_prop_t)
ZBX_PTR_VECTOR_DECL(wmi_instance, zbx_vector_wmi_prop_t *)
ZBX_PTR_VECTOR_IMPL(wmi_instance, zbx_vector_wmi_prop_t *)
extern "C" static void wmi_prop_clear(zbx_wmi_prop_t *prop)
SysFreeString(prop->name);
VariantClear(prop->value);
extern "C" static void wmi_instance_clear(zbx_vector_wmi_prop_t *wmi_inst_value)
for (int i = 0; i < wmi_inst_value->values_num; i++)
wmi_prop_clear(&wmi_inst_value->values[i]);
zbx_vector_wmi_prop_destroy(wmi_inst_value);
zbx_free(wmi_inst_value);
typedef int (*zbx_parse_wmi_t)(IEnumWbemClassObject *pEnumerator, double timeout,
zbx_vector_wmi_instance_t *wmi_values, char **error);
extern "C" int put_variant_json(const char *prop_json, const char *prop_err, VARIANT *vtProp, struct zbx_json *jdoc,
static ZBX_THREAD_LOCAL int com_initialized = 0;
extern "C" int zbx_co_initialize()
if (0 == com_initialized)
hres = CoInitializeEx(0, COINIT_MULTITHREADED);
zabbix_log(LOG_LEVEL_DEBUG, "cannot initialized COM library");
hres = CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT,
RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL);
if (FAILED(hres) && RPC_E_TOO_LATE != hres)
zabbix_log(LOG_LEVEL_DEBUG, "cannot set default security levels for COM library");