Re: очень нужны сэмплы с использованием WMI
От: Аноним  
Дата: 26.04.04 09:08
Оценка:
Здравствуйте, 3pac, Вы писали:

3>чтобы они что нибудь детектили, желательно, какую нить виндовскую инфу. Курсовик(что то типа SYSINFO), и надо запостить сабж- удивить препода. Разбираться времени нет. Дайте плиз, если есть.


HRESULT hRes;
IWbemLocator *pLoc = 0;
IWbemServices *pSvc = 0;
IWbemClassObject *obj = 0;





hRes = CoInitializeEx(0, COINIT_MULTITHREADED);

if(FAILED(hRes))
{
return -1;
}

hRes = CoInitializeSecurity(NULL,-1,NULL,NULL,
RPC_C_AUTHN_LEVEL_DEFAULT,
RPC_C_IMP_LEVEL_IMPERSONATE,
NULL,
EOAC_NONE,
NULL);
if(FAILED(hRes))
{
CoUninitialize();
return -1;
}


hRes = CoCreateInstance(CLSID_WbemLocator,
0,
CLSCTX_INPROC_SERVER,
IID_IWbemLocator,
(LPVOID *) &pLoc);

if(FAILED(hRes))
{
CoUninitialize();
return -1;
}


BSTR serverPath = SysAllocString(L"root\\CIMV2");

// Connectingn to the WMI
hRes = pLoc->ConnectServer( serverPath,
NULL,
NULL,
0,
NULL,
0,
0,
&pSvc);

SysFreeString(serverPath);

if(FAILED(hRes))
{
CoUninitialize();
return -1;
}



hRes = CoSetProxyBlanket(pSvc,
RPC_C_AUTHN_WINNT,
RPC_C_AUTHZ_NONE,
NULL,
RPC_C_AUTHN_LEVEL_CALL,
RPC_C_IMP_LEVEL_IMPERSONATE,
NULL,
EOAC_NONE );

if(FAILED(hRes))
{
pSvc->Release();
pLoc->Release();
CoUninitialize();
return -1;
}



BSTR query = SysAllocString(L"SELECT * FROM Win32_VideoController");
BSTR query_lang = SysAllocString(L"WQL");

IEnumWbemClassObject *pEnum;
IWbemClassObject *pObj;
ULONG ret_obj_count;
BSTR propName;
VARIANT propValue;

hRes = pSvc->ExecQuery( query_lang,
query,
WBEM_FLAG_USE_AMENDED_QUALIFIERS,
NULL,
&pEnum);

SysFreeString(query);
SysFreeString(query_lang);

if(FAILED(hRes))
{
TRACE("Failed to execute query!\n");
pSvc->Release();
pLoc->Release();
CoUninitialize();
return -1;
}

pEnum->Reset();

hRes = pEnum->Next( WBEM_INFINITE,
1,
&pObj,
&ret_obj_count );


if(FAILED(hRes) || 0 == ret_obj_count)
{
TRACE("Failed to execute query!\n");
pSvc->Release();
pLoc->Release();
CoUninitialize();
return -1;
}

hRes = pObj->BeginEnumeration(0);

if(FAILED(hRes))
{
pSvc->Release();
pLoc->Release();
CoUninitialize();
return -1;
}

hRes = 0;

while( !FAILED(hRes) && WBEM_S_NO_MORE_DATA != hRes )
{
hRes = pObj->Next( 0,
&propName,
&propValue,
0,
0 );
}

pObj->EndEnumeration();



pObj->Release();

pEnum->Release();


pSvc->Release();

pLoc->Release();
CoUninitialize();
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.