DrmForwardContentToDeviceObject 函数 (drmk.h)

函数 DrmForwardContentToDeviceObject 接受表示调用方打算将受保护内容转发到的设备的设备对象。 函数对设备进行身份验证,并向设备发送系统分配给受保护内容的内容 ID 和 DRM 权限。

语法

NTSTATUS DrmForwardContentToDeviceObject(
  [in]           ULONG        ContentId,
  [in, optional] PVOID        Reserved,
  [in]           PCDRMFORWARD DrmForward
);

参数

[in] ContentId

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

[in, optional] Reserved

保留供将来使用。 设置为 NULL。

[in] DrmForward

指向 DRMFORWARD 结构的指针,该结构指定设备对象和文件对象,用于分别标识目标设备和该设备上的 KS 音频引脚。 结构还包含 KSPROPERTY_DRMAUDIOSTREAM_CONTENTIDset-property 请求传递给设备的上下文值。

返回值

DrmForwardContentToDeviceObject 如果调用成功,则返回STATUS_SUCCESS。 否则,它将返回相应的错误代码。

注解

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

数据路径中的两个相邻模块可以通过多种方式之一相互通信。 如果上游模块通过 IoCallDriver 调用下游模块,则下游模块是 WDM 驱动程序的一部分。 在这种情况下,上游模块调用 DrmForwardContentToDeviceObject 函数,为系统提供表示下游模块的设备对象。 (如果两个模块通过下游模块的 COM 接口或内容处理程序进行通信,上游模块将改为调用 DrmForwardContentToInterfaceDrmAddContentHandlers。)

调用方填充 DrmForward 参数指向的 DRMFORWARD 结构的 DeviceObjectFileObjectContext 成员。 DrmForwardContentToDeviceObject 使用这些值,如下所示:

  • DeviceObject 指定表示 (下游模块) 驱动程序的设备对象。 DrmForwardContentToDeviceObject 使用设备对象对驱动程序进行身份验证。 如果成功,函数通过向设备上的 KS 引脚发送 set-property 请求来设置设备上的 KSPROPERTY_DRMAUDIOSTREAM_CONTENTID 属性。
  • FileObject 指定将属性请求发送到的 DrmForwardContentToDeviceObject KS 引脚。
  • Context 指定调用方通过属性请求传递给驱动程序的上下文值。 DrmForwardContentToDeviceObject 将上下文值复制到请求的属性描述符中。 上下文值通常是指向缓冲区的指针,其中包含调用方和驱动程序都理解的自定义格式的数据。 按照约定,如果下游模块是 KS 筛选器, 则 Context 成员指向一个文件对象,该对象指定函数向其发送属性请求的 DrmForwardContentToDeviceObject KS 引脚。 换句话说, Context 成员指向与 FileObject 成员相同的文件对象。 USB 音频驱动程序必须将 Context 参数设置为USBD_PIPE_HANDLE值。
属性请求还包含参数 ContentId 中的 DRM 内容 ID 和属于该内容 ID 的 DRM 内容权限。 DrmForwardContentToDeviceObject 将这些值复制到请求的属性值中。 DrmForwardContentToDeviceObject 返回后不再使用设备对象。

DrmForwardContentToDeviceObject 执行与 PcForwardContentToDeviceObjectIDrmPort2::ForwardContentToDeviceObject 相同的函数。 有关详细信息,请参阅 DRM 函数和接口

KSPROPERTY_DRMAUDIOSTREAM_CONTENTID 属性将 DRM 内容 ID 和 DRM 内容权限分配给 KS 音频引脚。

使用情况摘要表

Get Set 目标 属性描述符类型 属性值类型
Pin

KSP_DRMAUDIOSTREAM_CONTENTID

KSDRMAUDIOSTREAM_CONTENTID

 

操作数据) (属性值是一个KSDRMAUDIOSTREAM_CONTENTID结构,用于指定流的 DRM 内容 ID 和 DRM 内容权限。

返回值

KSPROPERTY_DRMAUDIOSTREAM_CONTENTID属性请求返回一个状态代码,指示 KS 筛选器是否可以强制实施指定的 DRM 内容权限,如下表所示。
状态代码 含义
STATUS_SUCCESS KS 音频筛选器强制实施指定的 DRM 内容权限。
STATUS_NOT_IMPLEMENTED KS 筛选器无法强制实施指定的 DRM 内容权限。
 

DrmForwardContentToDeviceObject 函数使用此属性设置音频流上的 DRM 内容 ID 和内容权限,该流进入 KS 引脚是属性请求的目标。

KS 音频筛选器同步处理此属性请求。 如果请求返回STATUS_SUCCESS,则所有下游 KS 音频节点 (请参阅 音频拓扑节点) 目标 KS 音频引脚也已成功配置指定的 DRM 内容 ID 和 DRM 内容权限。 (请注意,下游节点是流经音频引脚的音频内容的直接或间接接收器。)

DRM 系统可以在表示 KS 音频引脚的文件对象的生存期内随时设置此属性。 如果请求不成功,以前设置的 DRM 内容 ID 和 DRM 内容权限在 KS 音频流上仍然有效。

KSPROPERTY_DRMAUDIOSTREAM_CONTENTID 属性的处理程序必须验证属性请求 IRP 是否源自内核模式 (即,确认 IRP 的 RequestorMode 字段等于 KernelMode) 。 如果 IRP 源自用户模式,则处理程序必须使 IRP 失败,并返回状态代码INVALID_DEVICE_REQUEST。

DrmForwardContentToDeviceObjectDRMK 系统驱动程序中的入口点,Drmk.sys。 DRMK 在 IRQL PASSIVE_LEVEL 发送KSPROPERTY_DRMAUDIOSTREAM_CONTENTID属性的IOCTL_KS_PROPERTY请求。

要求

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

另请参阅

DRMFORWARD

DrmAddContentHandlers

DrmForwardContentToInterface

IDrmPort2::ForwardContentToDeviceObject

IoCallDriver

KSPROPERTY_DRMAUDIOSTREAM_CONTENTID

PcForwardContentToDeviceObject