そんな時は、

うちの場合、必要最低限なインターフェース群を把握するため、かなり原始的な方法で対処しています。まずサンプルプログラムのソースを紙に印刷し、蛍光ペンを片手に以下の作業をしていきます。

  • I で始まるインターフェース名と、そこからメソッドを呼び出している部分を緑でマーク
  • サンプルプログラム内で定義されているユーティリティクラス名やユーティリティ関数名はオレンジでマーク

そして緑でマークしたインターフェース名を別紙に書き出していきます。そして個々のインターフェイスについて、ヘルプで確認していきます。今回の場合はこんな感じになりました。

  • COM 関係のインターフェース (IMoniker, IPropertyBag, IObjectWithSite)
  • ATL 関係のテンプレート (CComPtr, CComQIPtr)
  • DirectShow フィルタ・グラフ関係のインターフェース(ICreateDevEnum, IGraphBuilder, ICaptureGraphBuilder, IBaseFilter, ISampleGrabber, IFileSinkFilter, IPin, IEnumPins, IConfigAsfWriter, IMediaControl, IMediaSeeking, IMediaEvent, IMediaFilter, IConfigInterleaving, IVideoWindow)
  • DirectShow 編集サービス(DES)関係のインターフェース (IRenderEngine, IAMSetErrorLog, IAMStreamConfig, IAMTimeline, IAMTimelineComp, IAMTimelineGroup, IAMTimelineObj, IAMTimelineSrc, IAMTimelineTrack, IXml2Dex)

こうしておくと、サンプルプログラムに使われているインターフェースの数が最初に目眩がしたほどは多くない事がわかって安心でき、名前と呼び出しているメソッド名から、そのインターフェイスのだいたいの役割を想像できるようになります。
優秀な人ならソースをただボーっと見てるだけでも同じ事はできるはずなのでしょうが、うちはこうしないと無理っぽいです…。(ヘタレなりの知恵ということで、どうかご勘弁を…)