内容 ID 和内容权限

内容 ID(标识符)是 DRMK 系统驱动程序在运行时生成的 ULONG 值,用于标识音频数据流中馈送到特定引脚的受 DRM 保护内容。

内容权限是内容提供商向用户授予的权限的数字表示形式,用于播放和复制受 DRM 保护的内容。 内容权限以 DRMK 传递给音频驱动程序的 DRMRIGHTS 结构的形式指定。

DRMRIGHTS 包含两个标志:DigitalOutputDisableCopyProtect。 如果设置了 DigitalOutputDisable 标志,驱动程序必须禁用连接到外部设备的所有数字输出(例如,通过 S/PDIF 连接器)。 如果设置了 CopyProtect 标志,驱动程序必须禁用可能允许将安全内容的永久副本保存到磁盘或任何其他形式的非易失性存储的功能。 例如,典型的音频硬件允许通过捕获声道路由播放信号。 如果此信号采用数字形式,则捕获的信号可能是输入信号的完美数字副本。 如果播放组合包含任何设置了 CopyProtect 标志的流中的数据,驱动程序必须将播放-捕获路径静音。

符合 DRM 的音频驱动程序必须在其 WaveCyclic 和 WavePci 微型端口驱动程序对象上支持 IDrmAudioStream 接口,以公开用于呈现音频数据的接收器引脚。 为了从驱动程序获取对 IDrmAudioStream 对象的引用,DRMK 会在引脚上调用 QueryInterface 方法。 该引脚具有 IMiniportWaveCyclicStreamIMiniportWavePciStream 类型的接口。 IDrmAudioStream 接口仅支持一种方法,即 IDrmAudioStream::SetContentId(除了三个 IUnknown 方法)。 当 DRMK 调用 SetContentId 时,它会传入内容 ID 和内容权限,驱动程序会将该 ID 和内容权限与引脚的数据流相关联。

WaveCyclic 或 WavePci 微型端口驱动程序可以通过 IDrmPort2 接口(IDrmPort2 派生自基类 IDrmPort)来访问 DRM 函数,而不是直接调用 Drmk.sys 中的 DRM 函数。 在 Microsoft Windows XP 及更高版本中,WaveCyclic 和 WavePci 端口驱动程序支持 IDrmPort2。 微型端口驱动程序通过使用 REFIID IID_IDrmPort2 调用端口对象的 QueryInterface 方法来获取对端口驱动程序的 IDrmPort2 接口的引用。

某些音频驱动程序支持硬件混合,并且可以同时处理多个输入数据流。 这种类型的驱动程序必须跟踪各个流的内容 ID 和所有流的复合内容权限。 驱动程序调用 IDrmPort::CreateContentMixed 来确定混合流的复合权限,并创建内容 ID 来标识该流。 驱动程序使用完内容 ID 后,必须调用 IDrmPort::DestroyContent 来删除内容 ID。

每次向混音器添加或从中移除输入流时,驱动程序都必须删除旧混合的内容 ID,并为新混合创建新的内容 ID。 在删除旧内容 ID 之前,驱动程序必须先将新内容 ID 成功转发到以前将旧内容 ID 转发到的所有流。 有关详细信息,请参阅转发 DRM 内容 ID