POC
This commit is contained in:
parent
e8ccbd1009
commit
4baad8c5a2
@ -1,10 +1,14 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
#include <Wbemidl.h>
|
#include <Wbemidl.h>
|
||||||
|
#pragma comment(lib, "wbemuuid.lib")
|
||||||
|
#include "query.cpp"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
int main(int argc, char** argv) {
|
int main(int argc, char** argv) {
|
||||||
|
|
||||||
std::cout << "test" << std::endl;
|
cout << GetVideoCardDriverVersion() << endl;
|
||||||
|
|
||||||
return 0;
|
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