流微型驱动开发指南(一)

原创 2004年06月15日 15:44:00

流微型驱动开发指南

——翻译:codewarrior@HS5@HS5

注意:本节详述了已经过时的Stream.sys类驱动。随着Microsoft Windows XP的正式发布,Microsoft建议硬件制造商考虑使用下一代Class模型——AVStream——来开发新的,非音频多媒体驱动程序。相关细节可参看《AVStream Overview》一章。Microsoft现在只对Stream.sys提供基本的支持。如果你要开发一个音频Minidriver,请参看《Audio Miniport Drivers》一章。

很多种设备都通过提供流式Minidriver来得到(操作系统的)支持。尤其是视频捕捉设备,譬如数码相机和DVD播放机,它们都是通过提供流式Minidriver来获得支持的,类似的还有外部音频设备。更多介绍可参考《Video Capture Minidriver Design Guide和《Vendor-Supplied DVD Drivers

Minidriver支持内核流。在此我假定本文的读者已经熟悉了内核流的相关基本概念。如果你不明白,请先阅读《Kernel Streaming Overview

设计Stream Class Driver的目的,就是通过处理许多和操作系统进行交互的细节,来使流式设备驱动的开发更加简单。

MinidriverStream Class Driver代表它处理同步问题。举个例子,Stream Class Driver可以为Minidriver随意地串行化I/O请求。通过让Class Driver为它处理同步问题,Minidriver可以做到多处理器平台安全,但是代码却是不可重入的。这样很适合后端(low-end)到中端(medium-end)的硬件。

Class Driver会自动对文件操作进行同步。例如,通过互斥体(Mutex)、信号量(Semaphores)或者事件(Event),打开流和打开设备的操作可以被正确地串行化,无需Minidriver的参与。

Class DriverMinidriver中抽象了内核流的具体实现细节。

Class Driver处理所有和PnP管理器之间的交互动作。例如:

Class Driver代表Minidriver创建功能性设备对象(Functional device object)。

Class Driver管理资源设置(如翻译端口地址,翻译并映射内存范围,连接中断)

Class Driver处理PnP IRP包。比如IRP_MN_START_DEVICE, or IRP_MN_STOP_DEVICE

所有的低级缓冲区管理也是由Class Driver完成的。

如果必要的话,分配DMA适配器对象。

映射缓冲区,并为DMA创建scatter/gather列表。

DMAPIO正确锁定并回写(Locking and flushing)缓冲区

所有的IO控制码的正确性验证也是由Class Driver完成的。

Class Driver通过看门狗定时器为所有的请求打上时间戳。

Minidriver自己并不创建设备对象,它在必要的时候可以分享Class Driver的设备对象。这样可以节约对系统资源占用。

每个适配器只创建一个设备对象。而适配器所支持的Mulitiple SubDevice(称为流,Stream)则用WDM Streaming Pins来描述。

一、Class Driver Minidriver 的定义

 

Class Driver是由微软提供的一种中间驱动(或称媒介驱动),用来在硬件厂商提供的Minidriver和操作系统之间提供一个简单的接口。Minidriver是一个硬件相关的DLL,它通过函数调用的方式,使用微软提供的Class Driver来完成大部分动作,它只提供和设备紧密相关的控制。

WDM模型中,MinidriverClass Driver注册所有和它相关联的硬件适配器(Hardware Adapter),然后Class Driver会创建一个文件对象(File Object)来描述向它注册的每个适配器。Minidriver使用Class Driver的设备对象(Device Object)来进行系统调用。用户态的客户代码可通过WDM流(WDM Streaming)访问Class Driver

Class DriverMinidriver之间的交互包括:

·   Minidriver并不创建它自己的设备对象(Device Object),而是在必要的时候共享Class Driver的设备对象,这样可以节约系统资源。

·  每个适配器(Adapter)只能创建一个设备对象。而适配器所支持的Mulitiple SubDevice(称为流,Stream)则用WDM Streaming Pins来描述。

Minidriver的初始化过程

当操作系统初次初始化Stream Class Minidrivers的时候会调用Minidriver的DriverEntry例程。Minidriver必须调用StreamClassRegisterMi...
  • zijida
  • zijida
  • 2006年01月14日 10:20
  • 1234

Spring Cloud Stream(消息驱动)

1、什么是Spring Cloud Stream Spring Cloud Stream 是一个用来为微服务应用构建消息驱动能力的框架。它可以基于Spring Boot 来创建独立的,可用于生产...
  • jack281706
  • jack281706
  • 2017年06月26日 17:59
  • 2852

流微型驱动开发指南(五)

PORT_CONFIGURATION_INFORMATION各成员解释如下:·SizeOfThisPacket  设定本结构的大小,由Class Driver负责填写该域。·HwDeviceExten...
  • codewarrior
  • codewarrior
  • 2004年06月15日 15:43
  • 1526

流微型驱动开发指南(六)

六、Minidriver的控制流程 下面要介绍的这几步,一般都和Minidriver的初始化、调用和卸载密切相关。将要用到的命令和结构在DDK的其他章节均有详细描述。 Minidriver的初始化、调...
  • codewarrior
  • codewarrior
  • 2005年11月23日 10:21
  • 1261

python+webdriver学习笔记

控制浏览器 设置浏览器大小:像素点 set_window_size(width,height) maximize_window() 浏览器全屏显示,不带参数 控制浏览器前进、后退: driver.fo...
  • JOJOY_tester
  • JOJOY_tester
  • 2016年12月21日 16:51
  • 10229

Kernel Streaming Driver

1.1 Summary of Kernel Streaming Concepts 1.1.1 Kernel Streaming Client Interface: Ks以一系列file object向...
  • daichanglin
  • daichanglin
  • 2006年12月08日 14:37
  • 3995

流微型驱动开发指南(二)

二、Stream Class和 Minidriver之间的接口流类接口(Stream Class Interface)主要由介于Class Driver和Minidriver之间的一系列的函数调用组成...
  • codewarrior
  • codewarrior
  • 2004年06月15日 15:44
  • 1637

流微型驱动开发指南(三)

三、开始着手编写Stream Minidriver设计Stream Class Driver的主要目标,就是处理两个工作,一是处理操作系统,操作系统包含了对复杂的对多处理器的支持,二就是对内核流进行支...
  • codewarrior
  • codewarrior
  • 2004年06月15日 15:44
  • 1191

getClass().getResourceAsStream() .获取配置文件的方法 .

import ClassLoader.getResourceAsStream(name);路径问题 InputStream in = getClass().getResourceAsS...
  • gao454917848
  • gao454917848
  • 2014年08月13日 19:46
  • 2166

StreamSets 安装JDBC驱动指北

如果新安装的StreamSet首先要配置环境变量: 这里是配置你外部包引入的路径, 如果此路径不存在,执行以下命令: mkdir sdc-extras chown -R s...
  • u012551524
  • u012551524
  • 2017年11月09日 19:28
  • 235
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:流微型驱动开发指南(一)
举报原因:
原因补充:

(最多只允许输入30个字)