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 接口或内容处理程序进行通信,上游模块将改为调用 DrmForwardContentToInterface 或 DrmAddContentHandlers。)
调用方填充 DrmForward 参数指向的 DRMFORWARD 结构的 DeviceObject、FileObject 和 Context 成员。 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值。
DrmForwardContentToDeviceObject
将这些值复制到请求的属性值中。 DrmForwardContentToDeviceObject
返回后不再使用设备对象。
DrmForwardContentToDeviceObject
执行与 PcForwardContentToDeviceObject 和 IDrmPort2::ForwardContentToDeviceObject 相同的函数。 有关详细信息,请参阅 DRM 函数和接口。
KSPROPERTY_DRMAUDIOSTREAM_CONTENTID 属性将 DRM 内容 ID 和 DRM 内容权限分配给 KS 音频引脚。
使用情况摘要表
Get | Set | 目标 | 属性描述符类型 | 属性值类型 |
---|---|---|---|---|
否 | 是 | Pin |
操作数据) (属性值是一个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。
DrmForwardContentToDeviceObject 是 DRMK 系统驱动程序中的入口点,Drmk.sys。 DRMK 在 IRQL PASSIVE_LEVEL 发送KSPROPERTY_DRMAUDIOSTREAM_CONTENTID属性的IOCTL_KS_PROPERTY请求。
要求
要求 | 值 |
---|---|
目标平台 | 通用 |
标头 | drmk.h (包括 Drmk.h) |
Library | Drmk.lib |
IRQL | PASSIVE_LEVEL |
另请参阅
IDrmPort2::ForwardContentToDeviceObject