Вот, изменил один пример под твои нужды, только не спрашивай меня как все это работает  засунь в DLL и используй на здоровье.
Код | #define _WIN32_DCOM #include <iostream> #include <comdef.h> #include <Wbemidl.h>
#pragma comment(lib, "wbemuuid.lib")
int main(int argc, char **argv) { CoInitialize(NULL); if(CoInitializeSecurity( NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_PKT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, 0) != S_OK) return 1;
IWbemLocator* pIWbemLocator = NULL; IWbemServices* pWbemServices = NULL; IEnumWbemClassObject* pEnumObject = NULL;
BSTR bstrNamespace = (L"root\\cimv2");
HRESULT hRes = CoCreateInstance( CLSID_WbemAdministrativeLocator, NULL, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, IID_IUnknown, (void**)&pIWbemLocator);
if (SUCCEEDED(hRes)) { hRes = pIWbemLocator->ConnectServer(bstrNamespace, NULL, NULL, NULL, 0, NULL, NULL, &pWbemServices); }
hRes = pWbemServices->ExecQuery(L"WQL", L"Select * from Win32_BaseBoard", WBEM_FLAG_RETURN_IMMEDIATELY,NULL,&pEnumObject); ULONG uCount = 1, uReturned; IWbemClassObject * pClassObject = NULL; hRes = pEnumObject->Reset(); hRes = pEnumObject->Next(WBEM_INFINITE,uCount, &pClassObject, &uReturned); VARIANT v; BSTR strClassProp = SysAllocString(L"SerialNumber"); hRes = pClassObject->Get(strClassProp, 0, &v, 0, 0); SysFreeString(strClassProp);
_bstr_t bstrPath = &v;
char* strPath=(char*)bstrPath; if (SUCCEEDED(hRes)) std::cout << strPath << std::endl; else std::cerr << "Error getting object" << std::endl; VariantClear( &v ); pIWbemLocator->Release(); pWbemServices->Release(); pEnumObject->Release(); pClassObject->Release(); CoUninitialize(); }
|
|