1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
#include <stdio.h>
#include <wbemidl.h>
#pragma comment (lib, "wbemuuid.lib")
int main(void)
{
if(CoInitialize(0) == S_OK)
{
if(CoInitializeSecurity(0, -1, 0, 0, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, 0, EOAC_NONE, 0) == S_OK)
{
IWbemLocator *pLoc;
if(CoCreateInstance(&CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, &IID_IWbemLocator, (void **)&pLoc) == S_OK)
{
IWbemServices *pServ;
BSTR space = SysAllocString(L"root\\cimv2");
if(pLoc->lpVtbl->ConnectServer(pLoc, space, 0, 0, 0, 0, 0, 0, &pServ) == S_OK)
{
IEnumWbemClassObject *pEnum;
BSTR lang = SysAllocString(L"wql");
BSTR query = SysAllocString(L"Select * From Win32_Product");
if(pServ->lpVtbl->ExecQuery(pServ, lang, query, WBEM_FLAG_BIDIRECTIONAL, 0, &pEnum) == S_OK)
{
VARIANT vt;
ULONG ulResult;
IWbemClassObject *pObj;
while(pEnum->lpVtbl->Next(pEnum, WBEM_INFINITE, 1, &pObj, &ulResult) == S_OK)
{
wprintf(L"%s\n", pObj->lpVtbl->Get(pObj, L"Name", 0, &vt, 0, 0) == S_OK ? vt.bstrVal : L"Echec !");
pObj->lpVtbl->Release(pObj);
}
pEnum->lpVtbl->Release(pEnum);
}
pServ->lpVtbl->Release(pServ);
SysFreeString(query);
SysFreeString(lang);
}
pLoc->lpVtbl->Release(pLoc);
SysFreeString(space);
}
}
CoUninitialize();
}
return 0;
} |
Partager