第一章
内核流纵览
内核流Kernel Streaming(KS)驱动模型支持多媒体设备,例如声卡和电视调谐器卡。本章描述了内核流的一般的概念。
1.1
内核流概念概要
多媒体设备可以支持多种多样的技术。为了更好地支持这些设备的更大的范围,微软引入了内核流驱动模型。支持内核流模型的驱动可以向操作系统报告它们的性能。编写在内核流模型上面运行的客户端可以确定它运行的平台的多媒体的性能。内核流是窗口驱动模型(WDM)的一部分。
KS驱动可以过滤器和功能驱动。操作系统可以装载过滤器驱动来透明地扩展平台的多媒体性能。
1.1.1
内核流客户端接口
内核流驱动提供给客户端的接口由一组文件对象组成。每个文件对象表现了驱动的不同的性能。客户端向文件对象发出I/O和请求来控制驱动的不同方面。
内核流驱动的文件对象有几种不同的族:
l 过滤器(Filters)
KS过滤器封装了设备的功能单元。驱动可以支持同一个过滤器的多个实例。多功能设备的驱动可以支持几种不同类型的KS过滤器。不要把KS过滤器和过滤器驱动搞混 - KS驱动的每一种类型,要么功能要么过滤器,都有它创建一个或多个KS过滤器文件对象。
l
Pins
pin表示了设备上的一个I/O途径。客户端可以连接到pins,然后连接pins到其它的pins。客户端也可以向一个pin查询它支持的数据类型。
l
时钟(Clocks
)
支持主板上的时钟的驱动把时钟作为一个文件对象暴露出来。客户端可以查询时钟时间,也可以请求当时钟到达某时间时被通知。
l
分配器(Allocators
)
支持自定义内存管理接口的驱动,例如,设备主板内存的管理,把接口作为一个文件暴露出来。客户端可以使用文件对象来分配和释放内存。
KS文件对象是按层次组织起来的 - 客户端用IRP_MJ_CREATE来实例化驱动上的KS过滤器,然后轮流用IRP_MJ_CREATE来实例化过滤器上的pins,时钟和pins上的分配器。
内核流体系结构为驱动和客户端的交互提供了一个可扩展的机制。KS对象支持几种不同的语义概念:
l
属性
KS对象支持属性。客户端可以询问对象来确定它支持的属性类型,然后它可以取得或者设置这些属性。例如,音频驱动pins可以支持允许客户端取得或设置设备音量的属性。