创建服务提供商

服务提供商是充当应用程序和设备之间的中间人的组件。 Windows Media 设备管理器将请求从应用程序路由到服务提供商,服务提供商随后负责与设备通信或执行请求的操作。 服务提供商通常与驱动程序通信,以启用与设备的通信。 服务提供程序是实现 Windows Media 设备管理器调用的接口的 COM 组件。 服务提供程序对象的根接口是 IMDServiceProvider。 获取此接口后,Windows Media 设备管理器可以通过服务提供商实现各种方法获取其他接口。 服务提供程序必须实现的接口在 “必需”和“可选接口”中列出。 接口的层次结构显示在 服务提供程序的接口中。

注意

不应尝试创建 MTP 服务提供商;应改用 Microsoft 提供的 MTP 服务提供商和驱动程序。

 

在尝试创建服务提供商之前,应全面了解应用程序将对服务提供商进行哪些调用。 阅读创建 Windows Media 设备管理器 应用程序,了解应用程序在尝试与设备通信时将在服务提供商上执行的基本任务和调用。

以下列表显示了开发服务提供商的关键步骤:

  1. 包括 (,并选择性地编译) 项目所需的头文件和库文件。 有关所需文件的列表,请参阅 服务提供程序的必需库和标头
  2. 实现所有其他必需或可选服务提供程序接口 (请参阅 强制接口和可选接口) 。 通常,将按以下顺序调用接口:
  3. 请确保服务提供商或设备在安装过程中安装正确的注册表项。 这些密钥指定设备参数,将服务提供商注册为插件,并为设备到达和删除启用即插即用通知。 请参阅 设备参数注册服务提供商为设备启用 PnP
  4. 实例化类时,在构造函数中对服务提供程序进行身份验证。 为此,请创建 CSecureChannelServer 类并设置证书。 实现 IComponentAuthenticate 接口并调用之前实例化的 CSecureChannelServer 类的方法。 请参阅 对服务提供程序进行身份验证 ,了解如何实例化 CSecureChannelServer 类并实现 IComponentAuthenticate 方法。
  5. Windows Media 设备管理器将通过调用 IMDServiceProvider2::CreateDeviceIMDServiceProvider::EnumDevices 来查询服务提供商以获取连接的设备列表,具体取决于服务提供商是否处理即插即用设备。 服务提供商必须返回表示已连接设备的 IMDSPDevice 对象列表。 有关更多详细信息 ,请参阅枚举设备
  6. 在处理任何调用之前,请验证是否已建立安全通道。 在执行任何操作之前,请调用 CSecureChannelServer::fIsAuthenticated 。 如果此调用失败,则返回WMDM_E_NOTCERTIFIED。
  7. 你需要 Microsoft 颁发的证书/密钥对才能处理受 DRM 保护的材料。 有关详细信息 ,请参阅处理服务提供程序中的受保护内容
  8. 若要使设备自动与Windows 媒体播放器同步,它必须满足启用与Windows 媒体播放器同步中列出的要求。
  9. 若要使设备显示在 Windows 资源管理器中,必须执行一些特殊步骤,详见 要求便携式音频播放器在 Windows 资源管理器中显示

编程指南