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

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

返回值

如果调用成功,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)
Drmk.lib
IRQL PASSIVE_LEVEL

另请参阅

DrmAddContentHandlers

DrmForwardContentToDeviceObject

IDrmAudioStream

IDrmAudioStream::SetContentId

IDrmPort::ForwardContentToInterface

IoCallDriver

PcForwardContentToInterface