///////////////////////////////////////////////////////////////////////// // RunningObjectTable.cpp - display contents of ROT, accessed via // // ver 1.0 monikers // // // // Eddon and Eddon, Inside Distributed COM, Microsoft Press, 1998 // // // // Modifed by Jim Fawcett, Syracuse University, jfawcett@twcny.rr.com // // CSE791 - Distributed Objects, Spring 2002 // ///////////////////////////////////////////////////////////////////////// #define _WIN32_DCOM #include #include using namespace std; void main() { cout << "\n Contents of the Running Object Table (ROT) " << "\n ============================================\n"; CoInitialize(NULL); IRunningObjectTable* pRunningObjectTable; GetRunningObjectTable(NULL, &pRunningObjectTable); IEnumMoniker* pEnumMoniker; pRunningObjectTable->EnumRunning(&pEnumMoniker); IMoniker* pMoniker; IBindCtx* pBindCtx; OLECHAR* moniker_name; while(pEnumMoniker->Next(1, &pMoniker, NULL) == S_OK) { CreateBindCtx(0, &pBindCtx); DWORD mkSys; pMoniker->IsSystemMoniker(&mkSys); switch(mkSys) { case MKSYS_NONE: cout << "Custom moniker:\t"; break; case MKSYS_GENERICCOMPOSITE: cout << "Composite moniker:\t"; break; case MKSYS_FILEMONIKER: cout << "File moniker:\t"; break; case MKSYS_ANTIMONIKER: cout << "Anti moniker:\t"; break; case MKSYS_ITEMMONIKER: cout << "Item moniker:\t"; break; case MKSYS_POINTERMONIKER: cout << "Pointer moniker:\t"; break; case MKSYS_CLASSMONIKER: cout << "Class moniker:\t"; break; default: cout << "Unknown system moniker:\t"; } pMoniker->GetDisplayName(pBindCtx, NULL, &moniker_name); wcout << moniker_name << L"\n"; CoTaskMemFree(moniker_name); pMoniker->Release(); pBindCtx->Release(); } pRunningObjectTable->Release(); pEnumMoniker->Release(); CoUninitialize(); }