POC
This commit is contained in:
parent
e8ccbd1009
commit
4baad8c5a2
@ -1,10 +1,14 @@
|
||||
#include <iostream>
|
||||
#include <Windows.h>
|
||||
#include <Wbemidl.h>
|
||||
#pragma comment(lib, "wbemuuid.lib")
|
||||
#include "query.cpp"
|
||||
|
||||
using namespace std;
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
|
||||
std::cout << "test" << std::endl;
|
||||
cout << GetVideoCardDriverVersion() << endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
60
IWbemClassObject/query.cpp
Normal file
60
IWbemClassObject/query.cpp
Normal file
@ -0,0 +1,60 @@
|
||||
std::string GetVideoCardDriverVersion() {
|
||||
std::string retvalue = "";
|
||||
|
||||
HRESULT hr;
|
||||
hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
|
||||
if (FAILED(hr)) {
|
||||
return retvalue;
|
||||
}
|
||||
|
||||
IWbemLocator* pIWbemLocator = NULL;
|
||||
hr = CoCreateInstance(__uuidof(WbemLocator), NULL, CLSCTX_INPROC_SERVER,
|
||||
__uuidof(IWbemLocator), (LPVOID*)&pIWbemLocator);
|
||||
if (FAILED(hr)) {
|
||||
CoUninitialize();
|
||||
return retvalue;
|
||||
}
|
||||
|
||||
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 retvalue;
|
||||
}
|
||||
|
||||
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");
|
||||
BSTR bstrPath = SysAllocString(L"select * from Win32_VideoController");
|
||||
IEnumWbemClassObject* pEnum;
|
||||
hr = pIWbemServices->ExecQuery(bstrWQL, bstrPath, WBEM_FLAG_FORWARD_ONLY, NULL, &pEnum);
|
||||
|
||||
ULONG uReturned;
|
||||
VARIANT var;
|
||||
IWbemClassObject* pObj = NULL;
|
||||
if (!FAILED(hr)) {
|
||||
hr = pEnum->Next(WBEM_INFINITE, 1, &pObj, &uReturned);
|
||||
}
|
||||
|
||||
if (!FAILED(hr) && uReturned) {
|
||||
hr = pObj->Get(L"DriverVersion", 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;
|
||||
}
|
||||
}
|
||||
|
||||
pEnum->Release();
|
||||
SysFreeString(bstrPath);
|
||||
SysFreeString(bstrWQL);
|
||||
pIWbemServices->Release();
|
||||
pIWbemLocator->Release();
|
||||
SysFreeString(bstrServer);
|
||||
CoUninitialize();
|
||||
return retvalue;
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user