Did you try debugging with GraphEdit?
You can use the following code to "add to rot":
Code:
HRESULT AddToRot(IUnknown* pGraph, DWORD /*dwName*/, DWORD* pdwRegister)
{
IMoniker* pMoniker = NULL;
IRunningObjectTable* pROT = NULL;
if (FAILED( GetRunningObjectTable(0, &pROT) )) return E_FAIL;
const size_t STRING_LENGTH = 256;
WCHAR wsz[STRING_LENGTH];
StringCchPrintfW(wsz, STRING_LENGTH, L"FilterGraph %08x pid %08x", (DWORD*)pGraph, GetCurrentProcessId());
HRESULT hr = CreateItemMoniker(L"!", wsz, &pMoniker);
if (SUCCEEDED(hr))
{
hr = pROT->Register(ROTFLAGS_REGISTRATIONKEEPSALIVE, pGraph, pMoniker, pdwRegister);
pMoniker->Release();
}
pROT->Release();
return hr;
}
void RemoveFromRot(DWORD dwRegister)
{
IRunningObjectTable *pROT;
if (SUCCEEDED( GetRunningObjectTable(0, &pROT) ))
{
pROT->Revoke(dwRegister);
pROT->Release();
}
}