精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>驱动开发>>Windows NT 设备驱动程序开发基础(2)(转

主题:Windows NT 设备驱动程序开发基础(2)(转
发信人: black()
整理人: wenbobo(2002-12-06 23:11:22), 站内信件

发信人: netplayer (ERASER), 信区: Programming       
标  题:  Windows NT 设备驱动程序开发基础(2)
发信站: BBS 水木清华站 (Sat Oct 30 14:55:25 1999)

1.2 Windows NT下内核模式设备驱动程序的结构和运行

  一般来说,设备驱动程序的任务主要有二:第一,接受来自用户程序的读写请求,把
用户的数据传送给设备,或把从设备接收到的数据传送给用户;第二,轮询设备或处理
来自设备的中断请求,完成数据传输。

  1.2.1 驱动程序与用户程序的通信

  I/O管理器把每一个设备对上层都抽象成了文件,所以在Win32用户程序中只要通过以
下几条简单的文件操作API函数就可以实现与驱动程序中的某个设备通信(请注意,一个
驱动程序可以驱动多个设备):

  函数名        功能

  CreateFile 打开一个设备,准备进行数据传输。返回一个与设备相关的句柄。

  CloseHandle 关闭一个由CreateFile打开的设备。

  ReadFile 从设备读取数据。                  

  WriteFile 向设备写数据。

  DeviceIoControl 对设备进行一些自定义的操作,比如更改设置等。

  表一

  1.2.2 DriverEntry过程

  这是每一个设备驱动程序的入口,每次该程序启动时被系统自动调用。大部分的设备
初始化的工作都在这个过程中完成。包括设置响应各种用户请求的过程的入口,使I/O管
理器能知道当用户的打开、关闭、读写等请求到来时各应调用那些过程来处理。驱动程
序中只有本过程的名字"DriverEntry"是固定的,以下列出的所有过程都要由本过程向系
统注册。

  如果该驱动程序不响应任何请求的话,只要一个DriverEntry过程就可以构成一个能运
行的驱动程序。


  1.2.3 Unload和ShutDown过程

  Unload过程负责在驱动程序被停止前做一些必要的处理。比如释放资源,记录最终状  
  态等。ShutDown过程在系统即将关闭时被调用,与前者的区别在于不用释放任何资源。



  1.2.4 DispatchOpen和DispatchClose过程

  这两个过程在用户调用CreateFile和CloseHandle时被调用,为即将到来的读写操作做
备,或做一些读写完成后的必要处理。


  1.2.5 DispatchRead, DispatchWrite与StartIo过程

  这前两个过程在用户调用ReadFile和WriteFile时被调用。它们先做一些检验用户请求
合法性的工作,然后启动一个被称为StartIo的过程开始实际的与硬件间的数据传输。I
/O管理器还通过IRP为它们提供了一个指向用户缓冲区的指针,用于与用户程序交换数据
。详情请见1.3.2


  1.2.6 接受自定义的其他请求

  这两个过程在用户调用DeviceIoControl时被调用。它通过IRP获得用户的请求号,以
及一个指向用户缓冲区的指针,可以与用户程序进行通信。       


  1.2.7 中断处理过程(ISR)

  这些过程在中断发生时被系统调用。


  1.2.8 推迟过程(Deferred Procedure)

      这些过程用来在较低的运行级别完成较高运行级别过程(如中断处理过程)的一
些任务。详情请见1.3.3       

--
m4m※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.176.132]m

--
-------------------------------------------------------------------------------
孤客一身千里外,未知归日是何年
Email : [email protected]

※ 来源:.网易 BBS bbs.netease.com.[FROM: 202.103.173.20]

[关闭][返回]