注册表项的布局

[与此页面关联的功能 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