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();
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить