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

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

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

使用情况摘要表

获取 设置 目标 属性描述符类型 属性值类型
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 内容权限。 (请注意,下游节点是流经音频 pin.) 的音频内容的直接或间接接收器

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