For complete code, refer to the CNVWM demo.
BOOL DisplaySystemProfiles() { // ATL Macro USES_CONVERSION; long count = 0; long streamCount = 0; long versionNum = 0; long lVersion; char data[10]; IltmmWMProfile *pProfile = NULL; IltmmWMProfileManager *pProfileManager = NULL; BSTR bstrString; // Create a profile manager HRESULT hr = CoCreateInstance(CLSID_ltmmWMProfileManager, NULL, CLSCTX_INPROC_SERVER, IID_IltmmWMProfileManager, (void**) &pProfileManager); if(FAILED(hr)) return TRUE; // show only system profiles for version ltmmWMT_VER_4_0 pProfileManager->get_SystemProfileVersion(&lVersion); if (lVersion != ltmmWMT_VER_4_0) { pProfileManager->Release(); return TRUE; } hr = pProfileManager->get_SystemProfileCount(&count); if (FAILED(hr)) { pProfileManager->Release(); return TRUE; } for (int i = 0; i < count; i++) { hr = pProfileManager->LoadSystemProfile(i, &pProfile); if(FAILED(hr)) { pProfileManager->Release(); return TRUE; } // Display the name... pProfile->get_Name(&bstrString); wprintf(TEXT("%s\n"), bstrString); SysFreeString(bstrString); // Add the description, version and the stream count pProfile->get_Description(&bstrString); wprintf(TEXT("%s\n"), bstrString); SysFreeString(bstrString); pProfile->get_Version(&versionNum); switch (versionNum) { case ltmmWMT_VER_4_0: wprintf(TEXT("ltmmWMT_VER_4_0\n")); break; case ltmmWMT_VER_7_0: wprintf(TEXT("ltmmWMT_VER_7_0\n")); break; case ltmmWMT_VER_8_0: wprintf(TEXT("ltmmWMT_VER_8_0\n")); break; case ltmmWMT_VER_9_0: wprintf(TEXT("ltmmWMT_VER_9_0\n")); break; default: wprintf(TEXT("UNKNOWN\n")); break; }; // Display the number of streams pProfile->get_StreamCount(&streamCount); wprintf(TEXT("%s\n"), ltoa(streamCount, data, 10)); pProfile->Release(); pProfile = NULL; } pProfileManager->Release(); pProfileManager = NULL; return TRUE; }