验证和初始化

[与此页面关联的功能 Windows Media Format 11 SDK 是一项旧功能。 它已被源读取器和接收器编写器取代。 源读取器和接收器编写器已针对Windows 10和Windows 11进行了优化。 如果可能,Microsoft 强烈建议新代码使用源读取器和接收器编写器,而不是 Windows Media 格式 11 SDK。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

应执行以下步骤来验证是否允许转加密,并初始化将解密内容的对象:

  1. 如果已有内容的密钥 ID,请跳到步骤 5。
  2. 调用 WMCreateEditor 函数以创建元数据编辑器对象并获取该对象的 IWMMetadataEditor 接口的实例。
  3. 调用 IWMMetadataEditor::QueryInterface 以获取 IWMDRMEditor 接口的实例。
  4. 调用 IWMDRMEditor::GetDRMProperty 以获取 DRM_DRMHeader_KeyID 属性。
  5. 通过调用 WMDRMStartup 函数初始化 Windows Media DRM 客户端扩展 API。
  6. 调用 WMDRMCreateProtectedProvider 函数以创建安全提供程序对象并获取该对象的 IWMDRMProvider 接口的实例。
  7. 调用 IWMDRMProvider::CreateObject 以创建许可证管理对象并获取其 IWMDRMLicenseManagement 接口的实例。
  8. 调用 IWMDRMLicenseManagement::CreateLicenseEnumeration,传入密钥 ID 和权限,用于控制在转译内容后对内容执行的操作。 此调用将检索 IWMDRMLicense 接口的实例,该实例可用于通过任何匹配的许可证进行枚举。
  9. 调用 IWMDRMLicense::GetInclusionList 以检索授权内容保护系统的列表, (许可证颁发者指定的 CPS) 。
  10. 分析包含列表以确认许可证是否允许输出 CPS 的 GUID。
  11. 如果所需的导出 GUID 不在包含列表中,请调用 IWMDRMLicense::GetNext 以获取下一个适用的许可证 (如果有任何) ,并重复步骤 9 和 10。 如果包含列表中没有许可证包含所需的 GUID,则无法执行导出。
  12. 调用 IWMDRMLicense::CreateSecureDecryptor 以创建解密器对象。 传入导出应用程序证书。 此调用将提供指向解密器对象的 IWMDRMDecrypt 接口实例和包含种子的二进制对象的指针。 目前仅支持将 Windows Media DRM_PROTECTION_TYPE_RC4 常量作为 dwFlags 参数的参数。
  13. 使用 RSA OAEP 加密方案解密初始化向量。
  14. 输入 Windows Media DRM 导出协议时,使用 Microsoft 提供的 ASF 分析库来查找每个有效负载的偏移量(以字节为单位)。

导出压缩的内容