注册表项的布局

[与此页面关联的功能(DirectShow)是一项旧功能。 它已被 MediaPlayerIMFMediaEngine取代,并在媒体基金会 音频/视频捕获。 这些功能已针对 Windows 10 和 Windows 11 进行了优化。 Microsoft强烈建议新代码尽可能使用 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获,而不是 DirectShow。 Microsoft建议重写使用旧 API 的现有代码,以尽可能使用新 API。]

DirectShow 筛选器在两个位置注册:

  • 包含筛选器的 DLL 注册为筛选器的 COM 服务器。 当应用程序调用 CoCreateInstance 来创建筛选器时,Microsoft Windows COM 库使用此注册表项来查找 DLL。
  • 有关筛选器的其他信息可以在筛选器类别中注册。 此信息使 系统设备枚举器筛选器映射器 找到筛选器。

不需要筛选器来注册其他筛选器信息。 只要 DLL 注册为 COM 服务器,应用程序就可以创建筛选器并将其添加到筛选器图。 但是,如果希望系统设备枚举器或筛选器映射器能够发现筛选器,则必须注册其他信息。

DLL 的注册表项具有以下键:

HKEY_CLASSES_ROOT
    CLSID
        Filter CLSID 
            REG_SZ: (Default) = Friendly name

            InprocServer32
                REG_SZ: (Default) = File name of the DLL
                REG_SZ: ThreadingModel = Both

筛选器信息的注册表项具有以下键:

HKEY_CLASSES_ROOT
    CLSID
        Category
            Instance
                Filter CLSID
                    REG_SZ: CLSID = Filter CLSID
                    REG_BINARY: FilterData = Filter information
                    REG_SZ: FriendlyName = Friendly name
Category

是筛选器类别的 GUID。 (请参阅 筛选类别。)筛选器信息打包为二进制格式。 IFilterMapper2 接口在注册表中搜索筛选器时解压缩此数据。

所有筛选器类别 GUID 都列在注册表中的以下项下:

HKEY_CLASSES_ROOT\CLSID\{DA4E3DA0-D07D-11d0-BD50-00A0C911CE86}\Instance