Windows 驱动开发1:重要概念

转载:http://blog.csdn.net/bigbat/article/details/2344838

概念(一):系统模式和应用模式。
系统模式是指工作在一个管理级别的状态。这个状态具有没有约束的权利。所以这样的代码如果工作不正常就会给系统带来灾难!驱动程序通常工作在系统级。应用模式(或称用户模式)。这一模式受到操作系统的管理。一个应用程序崩溃通常不回给整个系统带来灾难。要正确理解模式的概念。我的经验是看一看unix原理的书。可以较好的理解这一含义。
概念(二):多任务。
Windows是一个多任务的操作系统。CPU的使用是影响系统性能的重要因素。任务之间要同时进行就必须要有很好的CPU调度策略。Windows的任务调度给驱动程序的编写带来了一些麻烦。一个驱动程序不能长时间的独占CPU时间。通常把驱动程序划分成可以被中断的和不可以被中断的。必须要独占CPU的就是不能被中断的。反之,是可被中断的。在WINDOWS的系统中通过中断级别(IRQL)来标记一段代码是否可以被中断。如果引入中断就有可能带来重入问题。这个问题会带来资源的调度问题。这个我不多说了。可以参考操作系统的书籍。
概念(三):驱动程序的调用。
驱动程序的代码是为应用服务的。所以,他的调用通常都是被动的。因为,你不知道用户什么时间使用哪个功能。所以,驱动程序的代码多数是些片段(通常就是完成某个功能的函数)。不象应用程序一样自己知道下一步该干啥了。就会没有整体感。只要,函数完成一个规定的功能就可以了。不用管他什么时间被调用。既然是被调用。就要让系统知道你的函数在哪里。这就需要告诉系统你的函数的指针。这就需要注册你的函数指针。怎么样注册呢?一种方法是写个固定名称的函数。就像C中的main一样。不能瞎起名字。第二种就是指针登记。这需要填写DriverObject这个数据结构的相应功能的项目。如:
DriverObject->MajorFunction[IRP_MJ_PNP]=CharSamplePnpDispatch;
这个代码就完成了CharSamplePnpDispatch这个函数的注册了。
概念(四):IRP
IRP是一个不好理解的概念。IRP就是I/O请求包的称为。I/O请求包是什么呢?上面说了驱动是一些等待被调用的独立函数。用户请求读一个设备时,通常需要多个步骤来完成。这就要有一个完成该功能的一个函数的调用列表。这个任务列表就是IRP结构的一部分内容。当用户发出一个请求时,系统就根据请求产生一个IRP。然或系统就依照这个IRP的指示去调用相应的函数功能。

1. 子系统调用NT的IO系统服务打开命名文件。
2. NT的IO管理器调用对象管理器,查询命名文件,并且帮助解决文件对象的符号连接。同时调用安全参照监视器,检查子系统是否具备打开文件句柄的正确权限。
3. 如果NT文件系统不认识文件对象,IO管理器挂起请求。调用多个文件系统直到识别出文件对象才继续请求。
4. IO管理器负责为打开的请求分配内存和初始化IRP。对于NT驱动,打开请求等同于创建请求。
5. IO管理器调用文件系统驱动,将IRP传递给它们。文件系统存取它们的IRP中本地IO栈,决定必须进行哪一种操作。检查参数,确定请求文件是否在缓存中。如果不是,设置下一个IRP中驱动的IO栈。
6. 无论是驱动处理IRP还是完成IO请求操作。都调用IO管理器和其它NT元素提供的核心态例程。
7. 驱动设置返回给IO管理器的IRP中的IO状态块表示请求操作是成功还是失败。
8. IO管理器通过获取IRP中的IO状态,将信息同过保护子系统返回给原始调用者。
9. IO管理器释放已完成的IRP。
10. 如果打开操作成功,IO管理器返回文件句柄给子系统。反之返回错误状态。

概念(五):过滤驱动(过滤层、过滤函数)
Windows的WDM模型采用了分层的设计方法。这样的设计可以实现灵活的任务组织。上面说了驱动是一些等待被调用的独立功能函数。一段功能代码只完成有限的功能。在调用时在进行任务的组合。过滤函数是一些主要功能任务的补充功能。在一个主要功能前调用的是上层调用。在主要功能后调用的是下层调用。而且,可以是多层的。如我们写了一个读U盘的驱动。这个U盘有一个特殊的功能是对数据进行加密。我们就可以在读写物理设备前后加入一个过滤驱动完成这个操作。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值