DRM 函数和接口

系统驱动程序组件 Drmk.sysPortcls.sys 会实现一个 DRM 函数和接口集合,驱动程序使用这些函数和接口来管理内核流式处理音频内容的数字权限。 Drmk.sys 组件会实现许多 DrmXxx 函数,Portcls.sys 会实现一组特定于 DRM 的 PcXxx 函数,以及 IDrmPortIDrmPort2 接口。

可用的 DRM 函数包括:

DrmAddContentHandlers

为系统提供一个驱动程序接口,其中包含用于处理受保护内容的函数列表。 DrmCreateContentMixed

创建一个 DRM 内容 ID,用于标识包含来自多个输入流的混合内容的 KS 音频流。 DrmDestroyContent

删除 DRM 内容 ID。 DrmForwardContentToDeviceObject

对驱动程序进行身份验证,并向其发送系统已分配给包含受保护内容的流的 DRM 内容 ID 和内容权限。 DrmForwardContentToFileObject

已过时的函数。 DrmForwardContentToInterface

对驱动程序对象进行身份验证,并向其发送系统已分配给包含受保护内容的流的 DRM 内容 ID 和内容权限。 DrmGetContentRights

检索系统已分配给 DRM 内容 ID 的 DRM 内容权限。 此列表中的函数在头文件 Drmk.h 中声明。 内核模式 DRMK 系统驱动程序 Drmk.sys 会导出这些函数的入口点。

在 Windows XP 及更高版本中,PortCls 系统驱动程序 Portcls.sys 会导出同一组 DRM 函数的不同组入口点。 PortCls 函数的名称类似于上一列表中的名称,只不过它们使用前缀 Pc 而非 Drm:

PcAddContentHandlers

PcCreateContentMixed

PcDestroyContent

PcForwardContentToDeviceObject

PcForwardContentToFileObject

PcForwardContentToInterface

PcGetContentRights

这些函数名称在头文件 Portcls.h 中声明。 Portcls.sys 中的入口点只调用 Drmk.sys 中的相应函数,而不执行任何其他操作。 为方便起见提供了 PortCls 入口点,这样已连接到 Portcls.sys 的音频驱动程序就不需要显式加载 Drmk.sys。

在 Windows XP 及更高版本中,同一组函数也作为 IDrmPortIDrmPort2 接口中的方法公开:

IDrmPort2::AddContentHandlers

IDrmPort::CreateContentMixed

IDrmPort::DestroyContent

IDrmPort2::ForwardContentToDeviceObject

IDrmPort::ForwardContentToFileObject

IDrmPort::ForwardContentToInterface

IDrmPort::GetContentRights

IDrmPortIDrmPort2 接口在头文件 Portcls.h 中声明,并在 Portcls.sys 中实现。 这些方法只调用 Drmk.sys 中的相应函数,而不执行任何其他操作。 微型端口驱动程序通过查询此接口的端口驱动程序来获取对 IDrmPortx 接口的引用。 使用 IDrmPortx 接口而非相应的 DrmXxx 或 PcXxx 函数的优点是,驱动程序可以使用此查询来确定操作系统版本是否支持 DRM。 这简化了编写单个驱动程序的任务,该驱动程序可在支持 DRM 的较新版本和不支持 DRM 的较旧版本中运行。 IDrmPort2 派生自 IDrmPort,并提供另外两个方法。

如果相应微型端口驱动程序支持,WaveCyclic 和 WavePci 端口驱动程序将使用 IDrmAudioStream 接口。 端口驱动程序会调用 IDrmAudioStream::SetContentId 方法,将 DRM 保护分配给音频流中的数字内容。

在头文件 Drmk.h 中定义的 DEFINE_DRMRIGHTS_DEFAULT 宏会将 DRMRIGHTS 结构的成员初始化为其默认值。