102 lines
2.6 KiB
C++
102 lines
2.6 KiB
C++
// Promene pro vysledek
|
|
std::vector<std::string> arr;
|
|
ULONG arrcount;
|
|
|
|
// Funkce pro vynulovani promenych pro vysledek, proc nepouzivm objekty hhahahahhah pomoc
|
|
int EmptyRtVars(void) {
|
|
arr.clear();
|
|
arrcount = 0;
|
|
|
|
return 0;
|
|
}
|
|
|
|
// https://learn.microsoft.com/en-us/windows/win32/api/wbemcli/nn-wbemcli-ienumwbemclassobject
|
|
int GetHWIDs(std::string table, LPCWSTR column) {
|
|
std::string retvalue = "";
|
|
|
|
HRESULT hr;
|
|
hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
|
|
if (FAILED(hr)) {
|
|
return 1;
|
|
}
|
|
|
|
IWbemLocator* pIWbemLocator = NULL;
|
|
hr = CoCreateInstance(__uuidof(WbemLocator), NULL, CLSCTX_INPROC_SERVER,
|
|
__uuidof(IWbemLocator), (LPVOID*)&pIWbemLocator);
|
|
if (FAILED(hr)) {
|
|
CoUninitialize();
|
|
return 1;
|
|
}
|
|
|
|
BSTR bstrServer = SysAllocString(L"\\\\.\\root\\cimv2");
|
|
IWbemServices* pIWbemServices;
|
|
hr = pIWbemLocator->ConnectServer(bstrServer, NULL, NULL, 0L, 0L, NULL, NULL, &pIWbemServices);
|
|
if (FAILED(hr)) {
|
|
pIWbemLocator->Release();
|
|
SysFreeString(bstrServer);
|
|
CoUninitialize();
|
|
return 1;
|
|
}
|
|
|
|
hr = CoSetProxyBlanket(pIWbemServices, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE,
|
|
NULL, RPC_C_AUTHN_LEVEL_CALL, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_DEFAULT);
|
|
|
|
BSTR bstrWQL = SysAllocString(L"WQL");
|
|
|
|
// Poskladani WQL Query z parametru funkce a prevod datatypu
|
|
std::string wqlquery = "select * from " + table;
|
|
std::wstring wide_string = std::wstring(wqlquery.begin(), wqlquery.end());
|
|
const wchar_t* result = wide_string.c_str();
|
|
|
|
BSTR bstrPath = SysAllocString(result);
|
|
IEnumWbemClassObject* pEnum;
|
|
hr = pIWbemServices->ExecQuery(bstrWQL, bstrPath, WBEM_FLAG_FORWARD_ONLY, NULL, &pEnum);
|
|
|
|
// Enumerace objektu/radku
|
|
ULONG uReturned;
|
|
VARIANT var;
|
|
IWbemClassObject* pObj[100];
|
|
if (!FAILED(hr)) {
|
|
hr = pEnum->Next(WBEM_INFINITE, 100, pObj, &uReturned);
|
|
}
|
|
|
|
// Ziskani hodnot vlastnosti/sloupce
|
|
if (!FAILED(hr) && uReturned) {
|
|
for (ULONG n = 0; n < uReturned; n++) {
|
|
hr = pObj[n]->Get(column, 0, &var, NULL, NULL);
|
|
if (SUCCEEDED(hr)) {
|
|
char str[MAX_PATH];
|
|
WideCharToMultiByte(CP_ACP, 0, var.bstrVal, -1, str, sizeof(str), NULL, NULL);
|
|
retvalue = str;
|
|
|
|
if (V_VT(&var) == VT_BSTR) {
|
|
arr.push_back(retvalue);
|
|
pObj[n]->Release();
|
|
//return uReturned;
|
|
}
|
|
else {
|
|
arr.push_back("Empty");
|
|
pObj[n]->Release();
|
|
//return uReturned;
|
|
}
|
|
}
|
|
else {
|
|
return 1; // Nepodarilo se ziskat hodnoty
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
return 1; // Nepodarilo se enumerovat objekty/radky
|
|
}
|
|
|
|
arrcount = uReturned;
|
|
|
|
//pEnum->Release();
|
|
//SysFreeString(bstrPath);
|
|
//SysFreeString(bstrWQL);
|
|
//pIWbemServices->Release();
|
|
//pIWbemLocator->Release();
|
|
//SysFreeString(bstrServer);
|
|
//CoUninitialize();
|
|
return 0;
|
|
} |