使用 DRM 版本 7 或更高版本保护文件
[与此页面关联的功能 Windows Media Format 11 SDK 是旧版功能。 它已被源读取器和接收器编写器取代。 源读取器和接收器编写器已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用源读取器和接收器编写器,而不是 Windows Media Format 11 SDK。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
若要使用 Windows Media DRM 版本 7 或更高版本保护文件,请使用编写器的 IWMDRMWriter::SetDRMAttribute 方法来设置 DRM 属性。 由于 DRM 版本 7 及更高版本为每个受保护的文件或文件集启用唯一许可证, 因此 IWMDRMWriter 接口也有用于创建密钥的方法。 提供这些方法只是为了方便起见。
若要使用 DRM 版本 7 或更高版本保护 ASF 文件,请执行以下步骤:
链接到 WMStubDRM.lib,并在必要时取消链接 wmvcore.lib。
调用 WMCreateWriter 函数以创建 DRM 编写器。 第一个参数是保留的,必须设置为 NULL。
通过调用 IWMWriter::SetProfile 或 IWMWriter::SetProfileByID,为编写器设置要使用的配置文件。 在设置任何 DRM 属性之前,必须在编写器中设置配置文件。 DRM 仅支持使用 Windows Media Audio 或 Windows Media Video 编解码器的配置文件
获取编写器对象的 IWMDRMWriter 接口。
调用 IWMDRMWriter::SetDRMAttribute 并将 Use_Advanced_DRM 设置为 TRUE。
如果需要生成新的密钥种子,请调用 IWMDRMWriter::GenerateKeySeed。 在大多数情况下,你将重用以前生成的密钥种子。 此值必须保持机密;它不会写入文件。
调用 IWMDRMWriter::GenerateKeyID 来创建密钥 ID,这是用于创建实际密钥的第二个值。 与密钥种子不同,密钥 ID 是公共的,并且以明文形式写入 DRM 标头中的文件。 为创建的每个新文件创建新的密钥 ID。
如有必要,调用 IWMDRMWriter::GenerateSigningKeyPair 以生成用于对高级 DRM ASF 标头对象进行签名的公钥和私钥。 有关这些密钥的详细信息,请参阅 IWMDRMWriter::GenerateSigningKeyPair。
如有必要,请获取值以填充 DRM 标头的数字签名对象。 如果系统上未安装 Windows Media Rights Manager 的工作版本,则必须通过指定以下四个属性来配置 ASF 文件头的数字签名对象,所有这些属性都必须从 Microsoft 获取:
如果安装了 Windows Media Rights Manager,则无需在应用程序中设置这些属性。 DRM 组件将检索这些属性,并使用它们自动对标头进行签名。 如果你在另一台计算机上具有已激活版本的 Windows Media Rights Manager,并且希望重复使用这些数字签名对象值,则可以在注册表中找到它们。 许可证服务器证书存储在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WM Rights Manager\License Server\Certs:cert1 下,根证书存储在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WM Rights Manager\License Server\Certs:cert2 下。 使用 DRM 版本 7 保护文件时,必须使用这些注册表项中的值。 对于 DRM_LASignaturePrivKey 属性,请通过 Windows Media Rights Manager SDK) 使用 GenerateSigningKeysEx (,或者重复使用 Windows Media Rights Manager 在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WM Rights Manager\License Server:Info_Cert0 下安装的值。 对于 DRM_LASignatureCert 属性,请通过 Windows Media Rights Manager SDK) 使用 GenerateSigningKeysEx (,或者使用 Windows Media Rights Manager 在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WM Rights Manager\License Server\Certs:cert0 下安装的值。
根据需要多次调用 IWMDRMWriter::SetDRMAttribute 来配置编写器对象,这将根据需要设置所需的 DRM 标头属性。 这些属性在编写器对象的生存期内一直保留,直到使用新值重置它们为止。 无需为创建的每个新文件重置它们。
编写器对象需要以下属性:
以下属性是可选的:
此外,还可以直接使用 DRM_DRMHeader 基属性指定用户定义的 DRM 文件属性。 例如,可以添加所需的任何其他属性(例如“DRMHeader.RequireSAP”)作为一种通信许可证服务器在创建许可证时将使用的其他信息的方式。 许可证服务器必须事先知道添加的任何其他属性。 无法以编程方式发现未知属性。
使用 IWMWriter 接口方法编写文件,如本文档其他部分所述。 若要创建实时 DRM 流,只需写入网络接收器即可。 还可以写入推送接收器。
如有必要,请使用 Windows Media Rights Manager 为文件创建许可证。 此任务也可以由第三方许可证服务器执行。 对于实时 DRM 方案,最终用户需要在流开始之前或首次尝试连接到该许可证时获取许可证。
注意 此 SDK 的基于 x64 的版本不支持 DRM。
相关主题