/* static */ std::vector<CBugTraqProvider> CBugTraqAssociations::GetAvailableProviders() { std::vector<CBugTraqProvider> results; ICatInformation *pCatInformation = NULL; HRESULT hr; if (SUCCEEDED(hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr, NULL, CLSCTX_ALL, IID_ICatInformation, (void **)&pCatInformation))) { IEnumGUID *pEnum = NULL; if (SUCCEEDED(hr = pCatInformation->EnumClassesOfCategories(1, &CATID_BugTraqProvider, 0, NULL, &pEnum))) { HRESULT hrEnum; do { CLSID clsids[5]; ULONG cClsids; hrEnum = pEnum->Next(ARRAYSIZE(clsids), clsids, &cClsids); if (SUCCEEDED(hrEnum)) { for (ULONG i = 0; i < cClsids; ++i) { CBugTraqProvider provider; provider.clsid = clsids[i]; provider.name = LookupProviderName(clsids[i]); results.push_back(provider); } } } while (hrEnum == S_OK); } if (pEnum) pEnum->Release(); pEnum = NULL; } if (pCatInformation) pCatInformation->Release(); pCatInformation = NULL; return results; }
CDispAttrProps *GetDispAttrProps() { IEnumGUID *pEnumProp = NULL; CDispAttrProps *pProps = NULL; ITfCategoryMgr *pcat; HRESULT hr = E_FAIL; if (SUCCEEDED(hr = CoCreateInstance(CLSID_TF_CategoryMgr, NULL, CLSCTX_INPROC_SERVER, IID_ITfCategoryMgr, (void**)&pcat))) { hr = pcat->EnumItemsInCategory(GUID_TFCAT_DISPLAYATTRIBUTEPROPERTY, &pEnumProp); pcat->Release(); } // // make a database for Display Attribute Properties. // if (SUCCEEDED(hr) && pEnumProp) { GUID guidProp; pProps = new CDispAttrProps; // // add System Display Attribute first. // so no other Display Attribute property overwrite it. // pProps->Add(GUID_PROP_ATTRIBUTE); while(pEnumProp->Next(1, &guidProp, NULL) == S_OK) { if (!IsEqualGUID(guidProp, GUID_PROP_ATTRIBUTE)) pProps->Add(guidProp); } } if (pEnumProp) pEnumProp->Release(); return pProps; }