KS 引脚

微型驱动程序为要实例化的每种引脚类型提供 KSPIN_DESCRIPTOR 结构。 引脚描述符结构称为引脚工厂。 每个引脚工厂都可以实例化特定类型的一个或多个引脚实例。 引脚工厂包含多个数组,这些数组描述此描述符实例化的引脚类型。

微型驱动程序指定此描述符创建的图钉属于KSPIN_DESCRIPTOR的 Categories 成员中的一个或多个 KS 类别 。 KS 在生成筛选器图时使用类别来连接固定实例。 KSPROPERTY_TOPOLOGY_CATEGORIES 属性查询驱动程序支持的功能类别数组。

微型驱动程序提供一个 INF 文件,用于注册一个或多个固定设备名称。 安装时,操作系统会将名称和相应的类别加载到系统注册表中。 然后,客户端可以使用这些设备名称进行创建文件调用,以实例化引脚。

用户模式客户端使用设备名称调用 Win32 函数 CreateFile 。 例如,“\\.\filters\audio\default 呈现器”可以是已配置为默认输出的音频设备的链接。 内核模式客户端从内核模式调用 ZwCreateFile 。 创建文件例程返回文件句柄后,KS 客户端通过 KS 属性与固定实例通信。

在引脚描述符结构中,微型驱动程序布局 KSPIN_INTERFACE 结构和 KSPIN_MEDIUM 结构数组,这些结构指定该引脚工厂支持的 接口介质KSPIN_DESCRIPTOR 也是微型驱动程序指定该工厂创建的引脚的有效数据范围的位置。 它通过提供指向 KSDATARANGE 结构数组的指针来执行此操作。 微型驱动程序还指定此引脚工厂创建的新引脚的数据和通信流方向。

微型驱动程序通过支持 KSPROPSETID_Pin 属性集,允许在运行时发现引脚工厂。

若要创建固定连接,请调用 KsCreatePin 例程。 在此调用中,微型驱动程序将指针传递到描述所请求连接 KSPIN_CONNECT 类型的结构。 创建图钉时,筛选器会将新图钉视为从属于该筛选器的文件对象的文件对象。

微型驱动程序使用生成的IRP_MJ_CREATE中提供的描述符结构调用 KsValidateConnectRequest 。 此例程验证这些结构,并返回指向连接结构和根文件对象的指针。

微型驱动程序使用 KSPIN_DESCRIPTOR 结构的 DataFlowCommunication 成员来定义以下引脚细节:

  • IRP 源引脚与 IRP 接收器引脚

    IRP 源引脚问题 IRP;IRP 接收器引脚接收它们。 用户模式客户端通过相关文件句柄将 I/O 请求直接发送到 IRP 接收器引脚。 客户端使用KSPROPERTY_PIN_COMMUNICATION检查数据是流入还是流出引脚类型。

  • 数据源引脚与数据接收器引脚

    数据源引脚是筛选器上的输出引脚;数据接收器引脚是输入引脚。 作为数据源或接收器的属性独立于 IRP 源或接收器。 例如,客户端可以将数据源、IRP 接收器引脚连接到数据接收器、IRP 源引脚。 客户端使用KSPROPERTY_PIN_DATAFLOW检查数据是流入还是流出引脚类型。

终止连接时,必须先关闭源引脚的句柄,然后才能销毁基础文件对象。 如果源引脚依赖于接收器引脚提供的资源,则接收器引脚负责在连接终止时通知源。

客户端通过调用使用 IRP_MJ_DEVICE_CONTROL Microsoft Windows SDK 文档) 中所述的 DeviceIoControl 例程 (与内核流式处理引脚进行交互。 调用方通过 I/O 控制代码标识其请求,该代码放置在 I/O 堆栈位置结构中的 Parameters.DeviceIoControl.IoControlCode 中。

为了支持请求,微型驱动程序在调用 KsAllocateObjectHeader 时提供指向KSDISPATCH_TABLE结构的指针。

写入请求包含指向 KSSTREAM_HEADER 结构的数组的指针,这些结构又包含流式传输数据的指针。 读取请求包含指向应返回读取数据的空标头结构数组的指针。