drmForwardContentToInterface 函数 (drmk.h)

函数 DrmForwardContentToInterface 接受指向对象的 COM 接口的指针,调用方打算将受保护内容转发到该对象。 函数对对象进行身份验证,并向对象发送系统分配给受保护内容的内容 ID 和 DRM 权限。

语法

NTSTATUS DrmForwardContentToInterface(
  [in] ULONG    ContentId,
  [in] PUNKNOWN pUnknown,
  [in] ULONG    NumMethods
);

参数

[in] ContentId

指定 DRM 内容 ID。 此参数标识受保护的 KS 音频流。

[in] pUnknown

指向 COM 接口的指针,该接口直接接收 KS 音频筛选器的 KS 音频流数据。

[in] NumMethods

指定 pUnknown 指向的 COM 接口中方法的总数,包括其基接口中的所有方法。

返回值

DrmForwardContentToInterface 如果调用成功,则返回STATUS_SUCCESS。 否则,该方法将返回相应的错误代码。 下表显示了一些可能的返回状态代码。

返回代码 说明
STATUS_NOT_IMPLEMENTED
指示与 pUnknown 关联的 KS 音频流不支持分配给 ContentId 的 DRM 内容权限。

注解

在允许受保护的内容流经数据路径之前,系统会验证数据路径是否安全。 为此,系统会对数据路径中的每个模块进行身份验证,从数据路径的上游端开始,然后向下游移动。 当每个模块都经过身份验证时,该模块会提供有关数据路径中下一个模块的系统信息,以便也可以对其进行身份验证。 若要成功进行身份验证,模块的二进制文件必须签名为符合 DRM。

如果数据路径中的两个相邻模块通过下游模块的 COM 接口相互通信,则上游模块调用 DrmForwardContentToInterface 函数,为系统提供指向 COM 接口的指针。 (如果两个模块通过 IoCallDriver 函数或下游模块的内容处理程序进行通信,上游模块将改为调用 DrmForwardContentToDeviceObjectDrmAddContentHandlers。)

DrmForwardContentToInterface 对实现 pUnknown 指向的 COM 接口中方法的模块进行身份验证。 (如果方法分布在多个模块之间,则函数会对所有这些模块进行身份验证。) 调用接口的模块和实现接口的模块都必须理解供应商定义的接口。 DrmForwardContentToInterface 除了此接口派生自 IUnknown 之外,不对此接口做出任何假设。

如果 DrmForwardContentToInterface 成功对驱动程序或库进行身份验证,它将执行以下操作:

  • 查询 pUnknown 接口以获取其 IDrmAudioStream 接口。 请注意,尽管 对 DrmForwardContentToInterfacepUnknown 接口中的所有方法进行身份验证,但它不会调用 除基本 IUnknown 方法以外的 pUnknown 接口中的任何方法。
  • 调用 IDrmAudioStream::SetContentId 以设置音频流的 DRM 内容 ID 和 DRM 内容权限。 在返回之前, DrmForwardContentToInterface 释放 IDrmAudioStream 接口。
pUnknown 参数遵循 COM 对象的引用计数约定

DrmForwardContentToInterface 执行与 PcForwardContentToInterfaceIDrmPort::ForwardContentToInterface 相同的功能。 有关详细信息,请参阅 DRM 函数和接口

要求

要求
目标平台 通用
标头 drmk.h (包括 Drmk.h)
Library Drmk.lib
IRQL PASSIVE_LEVEL

另请参阅

DrmAddContentHandlers

DrmForwardContentToDeviceObject

IDrmAudioStream

IDrmAudioStream::SetContentId

IDrmPort::ForwardContentToInterface

IoCallDriver

PcForwardContentToInterface