#include "stdafx.h" #include "WMI.h" #include #include #pragma comment(lib, "wbemuuid.lib") HRESULT QueryWMIProperty(BSTR query, BSTR property, VARIANT *value) { CComPtr locator; HRESULT hr = CoCreateInstance(CLSID_WbemLocator, NULL, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (void **)&locator); if (!SUCCEEDED(hr)) { return hr; } CComPtr services; hr = locator->ConnectServer(_bstr_t(L"ROOT\\CIMV2"), NULL, NULL, NULL, 0, NULL, NULL, &services); if (!SUCCEEDED(hr)) { return hr; } hr = CoSetProxyBlanket(services, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, NULL, RPC_C_AUTHN_LEVEL_CALL, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE); if (!SUCCEEDED(hr)) { return hr; } CComPtr enumerator; hr = services->ExecQuery(L"WQL", query, WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &enumerator); if (!SUCCEEDED(hr)) { return hr; } CComPtr object; ULONG uReturn = 0; hr = enumerator->Next(WBEM_INFINITE, 1, &object, &uReturn); if (!SUCCEEDED(hr)) { return hr; } hr = object->Get(property, 0, value, NULL, NULL); if (!SUCCEEDED(hr)) { return hr; } return S_OK; }