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

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

[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 接口。 请注意,尽管 pUnknownDrmForwardContentToInterface 接口中的所有方法都进行身份验证,但它不会调用除基 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