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

调用方填充 DeviceObjectFileObject,以及参数 DrmForward 指向的 DRMFORWARD 结构的 上下文 成员。 DrmForwardContentToDeviceObject 使用以下值:

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

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

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

使用情况摘要表

获取 设置 目标 属性描述符类型 属性值类型
是的

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)
Drmk.lib
IRQL PASSIVE_LEVEL

另请参阅

DRMFORWARD

DrmAddContentHandlers

DrmForwardContentToInterface

IDrmPort2::ForwardContentToDeviceObject

IoCallDriver

KSPROPERTY_DRMAUDIOSTREAM_CONTENTID

PcForwardContentToDeviceObject