CHardwareMonitor::CHardwareMonitor() { m_stoprequested=false; m_bEnabled=true; HwdType = HTYPE_System; m_bOutputLog = false; Name = "Motherboard sensors"; #ifdef WIN32 InitWMI(); #endif }
/* Check vbox devices using WMI */ BOOL vbox_devices_wmi() { IWbemServices *pSvc = NULL; IWbemLocator *pLoc = NULL; TCHAR szQuery[] = _T("SELECT DeviceId FROM Win32_PnPEntity"); BOOL status1 = InitWMI(&pSvc, &pLoc); BOOL status = ExecWMIQuery(&pSvc, &pLoc, szQuery); return TRUE; }
/* Check VMWare bios using WMI */ BOOL vmware_wmi() { IWbemServices *pSvc = NULL; IWbemLocator *pLoc = NULL; TCHAR szQuery[] = _T("SELECT * FROM Win32_Bios"); BOOL status1 = InitWMI(&pSvc, &pLoc); BOOL status = ExecWMIQuery(&pSvc, &pLoc, szQuery); return TRUE; }
/* Check VMWare bios using WMI */ BOOL vmware_wmi() { IWbemServices *pSvc = NULL; IWbemLocator *pLoc = NULL; IEnumWbemClassObject* pEnumerator = NULL; BOOL bStatus = FALSE; HRESULT hr; // Init WMI bStatus = InitWMI(&pSvc, &pLoc); if (bStatus) { // If success, execute the desired query bStatus = ExecWMIQuery(&pSvc, &pLoc, &pEnumerator, _T("SELECT * FROM Win32_PnPEntity")); if (bStatus) { // Get the data from the query IWbemClassObject *pclsObj = NULL; ULONG uReturn = 0; VARIANT vtProp; while (pEnumerator) { hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn); if (0 == uReturn) break; // Get the value of the Name property hr = pclsObj->Get(_T("DeviceId"), 0, &vtProp, 0, 0); //_tprintf(_T("DeviceId : %s"), vtProp.bstrVal); // release the current result object VariantClear(&vtProp); pclsObj->Release(); } } } // Cleanup pSvc->Release(); pLoc->Release(); pEnumerator->Release(); CoUninitialize(); return TRUE; }
bool CHardwareMonitor::StartHardware() { #ifdef __APPLE__ //sorry apple not supported for now return false; #endif StopHardware(); #ifdef WIN32 InitWMI(); #endif m_stoprequested = false; m_lastquerytime = 0; m_thread = boost::shared_ptr<boost::thread>(new boost::thread(boost::bind(&CHardwareMonitor::Do_Work, this))); m_bIsStarted = true; sOnConnected(this); return true; }
PQRYRES WMIColumns(PGLOBAL g, char *nsp, char *cls, bool info) { static int buftyp[] = {TYPE_STRING, TYPE_SHORT, TYPE_STRING, TYPE_INT, TYPE_INT, TYPE_SHORT}; static XFLD fldtyp[] = {FLD_NAME, FLD_TYPE, FLD_TYPENAME, FLD_PREC, FLD_LENGTH, FLD_SCALE}; static unsigned int len, length[] = {0, 6, 8, 10, 10, 6}; int i = 0, n = 0, ncol = sizeof(buftyp) / sizeof(int); int lng, typ, prec; LONG low, upp; BSTR propname; VARIANT val; CIMTYPE type; HRESULT res; PWMIUT wp; SAFEARRAY *prnlist = NULL; PQRYRES qrp = NULL; PCOLRES crp; if (!info) { /*******************************************************************/ /* Initialize WMI if not done yet. */ /*******************************************************************/ if (!(wp = InitWMI(g, nsp, cls))) return NULL; /*******************************************************************/ /* Get the number of properties to return. */ /*******************************************************************/ res = wp->Cobj->Get(bstr_t("__Property_Count"), 0, &val, NULL, NULL); if (FAILED(res)) { sprintf(g->Message, "failed Get(__Property_Count) res=%d\n", res); goto err; } // endif res if (!(n = val.lVal)) { sprintf(g->Message, "Class %s in %s has no properties\n", cls, nsp); goto err; } // endif res /*******************************************************************/ /* Get max property name length. */ /*******************************************************************/ res = wp->Cobj->GetNames(NULL, WBEM_FLAG_ALWAYS | WBEM_FLAG_NONSYSTEM_ONLY, NULL, &prnlist); if (FAILED(res)) { sprintf(g->Message, "failed GetNames res=%d\n", res); goto err; } // endif res res = SafeArrayGetLBound(prnlist, 1, &low); res = SafeArrayGetUBound(prnlist, 1, &upp); for (long i = low; i <= upp; i++) { // Get this property name. res = SafeArrayGetElement(prnlist, &i, &propname); if (FAILED(res)) { sprintf(g->Message, "failed GetArrayElement res=%d\n", res); goto err; } // endif res len = (unsigned)SysStringLen(propname); length[0] = MY_MAX(length[0], len); } // enfor i res = SafeArrayDestroy(prnlist); } else length[0] = 128; /*********************************************************************/ /* Allocate the structures used to refer to the result set. */ /*********************************************************************/ qrp = PlgAllocResult(g, ncol, n, IDS_COLUMNS + 3, buftyp, fldtyp, length, false, true); if (info || !qrp) return qrp; /*********************************************************************/ /* Now get the results into blocks. */ /*********************************************************************/ res = wp->Cobj->BeginEnumeration(WBEM_FLAG_NONSYSTEM_ONLY); if (FAILED(res)) { sprintf(g->Message, "failed BeginEnumeration hr=%d\n", res); qrp = NULL; goto err; } // endif hr while (TRUE) { res = wp->Cobj->Next(0, &propname, &val, &type, NULL); if (FAILED(res)) { sprintf(g->Message, "failed getting Next hr=%d\n", res); qrp = NULL; goto err; } else if (res == WBEM_S_NO_MORE_DATA) { VariantClear(&val); break; } // endif res if (i >= n) break; // Should never happen else prec = 0; switch (type) { case CIM_STRING: typ = TYPE_STRING; lng = 255; prec = 1; // Case insensitive break; case CIM_SINT32: case CIM_UINT32: case CIM_BOOLEAN: typ = TYPE_INT; lng = 11; break; case CIM_SINT8: case CIM_UINT8: typ = TYPE_TINY; lng = 4; break; case CIM_SINT16: case CIM_UINT16: typ = TYPE_SHORT; lng = 6; break; case CIM_REAL64: case CIM_REAL32: prec = 2; typ = TYPE_DOUBLE; lng = 15; break; case CIM_SINT64: case CIM_UINT64: typ = TYPE_BIGINT; lng = 20; break; case CIM_DATETIME: typ = TYPE_DATE; lng = 19; break; case CIM_CHAR16: typ = TYPE_STRING; lng = 16; break; case CIM_EMPTY: typ = TYPE_STRING; lng = 24; // ??? break; default: qrp->BadLines++; goto suite; } // endswitch type crp = qrp->Colresp; // Column Name crp->Kdata->SetValue(_com_util::ConvertBSTRToString(propname), i); crp = crp->Next; // Data Type crp->Kdata->SetValue(typ, i); crp = crp->Next; // Type Name crp->Kdata->SetValue(GetTypeName(typ), i); crp = crp->Next; // Precision crp->Kdata->SetValue(lng, i); crp = crp->Next; // Length crp->Kdata->SetValue(lng, i); crp = crp->Next; // Scale (precision) crp->Kdata->SetValue(prec, i); i++; suite: SysFreeString(propname); VariantClear(&val); } // endfor i qrp->Nblin = i; err: // Cleanup wp->Cobj->Release(); wp->Svc->Release(); wp->Svc = NULL; // MUST be set to NULL (why?) CoUninitialize(); /*********************************************************************/ /* Return the result pointer for use by GetData routines. */ /*********************************************************************/ return qrp; } // end of WMIColumns