115 lines
3.3 KiB
C++
115 lines
3.3 KiB
C++
#include <tchar.h>
|
|
#include <windows.h>
|
|
#include <wbemcli.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
int main(int argc, char *argv)
|
|
{
|
|
LPTSTR lpszCommandLine = GetCommandLine();
|
|
LPWSTR * lppszCommandArgs = CommandLineToArgvW(lpszCommandLine, &argc);
|
|
|
|
|
|
lppszCommandArgs[++i];
|
|
|
|
HRESULT result;
|
|
if(SUCCEEDED(result = CoInitialize(NULL)))
|
|
{
|
|
IWbemLocator *pLocator = NULL;
|
|
if(SUCCEEDED(result = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID *) &pLocator)))
|
|
{
|
|
|
|
IWbemServices *pServices = NULL;
|
|
// Connect to the Root\Default namespace with current user
|
|
BSTR strNamespace = SysAllocString(pszNamespace);
|
|
if(SUCCEEDED(result = pLocator->ConnectServer(strNamespace, NULL, NULL, 0, NULL, 0, 0, &pServices)))
|
|
{
|
|
SysFreeString(strNamespace);
|
|
switch(op)
|
|
{
|
|
case GET_CLASS:
|
|
{
|
|
BSTR strClass = SysAllocString(pszClass);
|
|
IWbemClassObject *pClass = NULL;
|
|
for(DWORD j=0; j<dwMaxOuterIterations; j++)
|
|
{
|
|
for(DWORD i=0; i<dwMaxInnerIterations; i++)
|
|
{
|
|
|
|
if(SUCCEEDED(result = pServices->GetObject(strClass, 0, NULL, &pClass, NULL)))
|
|
{
|
|
_tprintf(__TEXT("GetClass succeeded for iteration (%d,%d) \n"), j, i);
|
|
pClass->Release();
|
|
pClass = NULL;
|
|
}
|
|
else
|
|
_tprintf(__TEXT("GetClass FAILED for iteration (%d, %d) with %x\n"), j, i, result);
|
|
|
|
}
|
|
_tprintf(__TEXT("Sleeping for %d seconds ...\n"), dwSleepSeconds);
|
|
Sleep(1000*dwSleepSeconds);
|
|
}
|
|
SysFreeString(strClass);
|
|
break;
|
|
}
|
|
case ENUM_CLASS:
|
|
{
|
|
BSTR strClass = SysAllocString(pszClass);
|
|
IEnumWbemClassObject *pClassEnum = NULL;
|
|
IWbemClassObject *pClass = NULL;
|
|
ULONG lCount;
|
|
ULONG lRetreivedCount;
|
|
for(DWORD j=0; j<dwMaxOuterIterations; j++)
|
|
{
|
|
for(DWORD i=0; i<dwMaxInnerIterations; i++)
|
|
{
|
|
|
|
if(SUCCEEDED(result = pServices->CreateClassEnum(strClass, lEnumerationType, NULL, &pClassEnum)))
|
|
{
|
|
lRetreivedCount = 0;
|
|
_tprintf(__TEXT("Enumerate Classes succeeded for iteration (%d, %d) \n"), j, i);
|
|
while(SUCCEEDED(pClassEnum->Next(WBEM_INFINITE, 1, &pClass, &lCount)) && lCount == 1)
|
|
{
|
|
lRetreivedCount ++;
|
|
pClass->Release();
|
|
pClass = NULL;
|
|
}
|
|
_tprintf(__TEXT("Enumerate Classes Retreived %d classes for iteration (%d, %d) \n"), lRetreivedCount, j, i);
|
|
pClassEnum->Release();
|
|
pClassEnum = NULL;
|
|
}
|
|
else
|
|
_tprintf(__TEXT("Enumerate Classes FAILED for iteration (%d, %d) with %x\n"), j, i, result);
|
|
|
|
}
|
|
_tprintf(__TEXT("Sleeping for %d seconds ...\n"), dwSleepSeconds);
|
|
Sleep(1000*dwSleepSeconds);
|
|
}
|
|
SysFreeString(strClass);
|
|
break;
|
|
}
|
|
|
|
case GET_INSTANCE:
|
|
case ENUM_INSTANCE:
|
|
_tprintf(__TEXT("These operations not implemented yet\n"));
|
|
break;
|
|
}
|
|
pServices->Release();
|
|
}
|
|
else
|
|
_tprintf(__TEXT("ConnectServer on locator failed %x\n"), result);
|
|
}
|
|
else
|
|
_tprintf(__TEXT("CoCreate on locator failed %x\n"), result);
|
|
}
|
|
else
|
|
_tprintf(__TEXT("CoIntialize failed %x\n"), result);
|
|
|
|
if(SUCCEEDED(result))
|
|
return 0;
|
|
else
|
|
return 1;
|
|
}
|
|
|