#define _WIN32_DCOM
#include <comdef.h>
#include <Wbemidl.h>
#pragma comment(lib, "wbemuuid.lib")
int main(int argc, char **argv)
{
CoInitialize(0);
if(CoInitializeSecurity(0, -1, 0, 0, RPC_C_AUTHN_LEVEL_PKT, RPC_C_IMP_LEVEL_IMPERSONATE, 0, EOAC_NONE, 0) != S_OK)
{
return 0;
}
IWbemLocator * pIWbemLocator = 0;
IWbemServices * pWbemServices = 0;
IEnumWbemClassObject * pEnumObject = 0;
BSTR bstrNamespace = (L"root\\cimv2");
HRESULT hRes = CoCreateInstance (CLSID_WbemAdministrativeLocator, 0, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, IID_IUnknown, (void**) &pIWbemLocator);
if (SUCCEEDED(hRes))
{
hRes = pIWbemLocator->ConnectServer(bstrNamespace, 0, 0, 0, 0, 0, 0, &pWbemServices);
}
BSTR strQuery = (L"Select * from Win32_BaseBoard");
BSTR strQL = (L"WQL");
hRes = pWbemServices->ExecQuery(strQL, strQuery, WBEM_FLAG_RETURN_IMMEDIATELY,0,&pEnumObject);
ULONG uCount = 1, uReturned;
IWbemClassObject * pClassObject = 0;
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))
{
MessageBox(0, strPath, "Motherboard Serial ID", 0);
}
else
{
MessageBox(0, "Error obteniendo", "Motherboard Serial ID", 0);
}
VariantClear(&v);
pIWbemLocator->Release();
pWbemServices->Release();
pEnumObject->Release();
pClassObject->Release();
CoUninitialize();
return 0;
}