Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

126 lines
2.0 KiB

#include <windows.h>
#include <ole2.h>
#include <stdio.h>
void _cdecl main(int argc, char *argv[])
{
IRunningObjectTable *prot = NULL;
HRESULT hr;
IBindCtx *pbc = NULL;
IEnumMoniker * penumMoniker = NULL;
IMoniker *alpMonikers[100];
DWORD dwReturned;
DWORD dwTotalCount = 0;
BOOL fFlushROT = FALSE;
hr = CoInitialize(NULL);
if (FAILED(hr))
{
printf("CoInitialize fails %x\n",hr);
exit(-1);
}
if ((argc == 2) && strcmp(argv[1],"-f"))
{
printf("Valid flags are -f for flush\n");
goto exitNow;
}
if( argc == 2)
{
fFlushROT = TRUE;
printf("Flushing ROT as we go!\n");
}
hr = GetRunningObjectTable(0,&prot);
if (FAILED(hr))
{
printf("Get ROT failed! %x\n",hr);
goto exitNow;
}
hr = prot->EnumRunning(&penumMoniker);
if (FAILED(hr))
{
printf("Enum ROT has failed %x\n",hr);
goto exitNow;
}
hr = CreateBindCtx(0,&pbc);
if(FAILED(hr))
{
printf("CreateBindContext returned %x\n",hr);
goto exitNow;
}
do
{
hr = penumMoniker->Next(100,alpMonikers,&dwReturned);
if(FAILED(hr))
{
printf("penumMoniker->Next failed %x\n",hr);
goto exitNow;
}
for (DWORD i = 0 ; i < dwReturned ; i++)
{
LPWSTR pwcName;
if(alpMonikers[i] == NULL) continue;
hr = alpMonikers[i]->GetDisplayName(pbc,NULL,&pwcName);
if(FAILED(hr))
{
printf("** MONIKER %x RETURNED ERRORCODE %x",i,hr);
}
else
{
printf("%S",pwcName);
CoTaskMemFree(pwcName);
}
if(fFlushROT)
{
IUnknown *punk;
hr = prot->GetObject(alpMonikers[i],&punk);
if(FAILED(hr))
{
printf(" Flushed (hr=0x%x)",hr);
}
else
{
printf(" Connected. Releasing connection");
}
}
printf("\n");
alpMonikers[i]->Release();
}
dwTotalCount += dwReturned;
} while(dwReturned == 100);
printf("** Total number of entries is %u\n",dwTotalCount);
exitNow:
if(prot != NULL)
{
prot->Release();
}
if(penumMoniker != NULL)
{
penumMoniker->Release();
}
if(pbc != NULL)
{
pbc->Release();
}
CoUninitialize();
}