windows驱动程序框架

windows驱动程序框架

ID:14103904

大小:58.00 KB

页数:29页

时间:2018-07-26

windows驱动程序框架_第1页
windows驱动程序框架_第2页
windows驱动程序框架_第3页
windows驱动程序框架_第4页
windows驱动程序框架_第5页
资源描述:

《windows驱动程序框架》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、windows驱动程序框架windows驱动程序框架2007-06-1418:50:49

2、分类:好的技术

3、标签:我的技术

4、字号大中小订阅.windows驱动程序框架[2006-11-2317:15:00

5、By:赛伯]一、驱动程序框架介绍很多人都用过VC++等图形集成开发环境(IDE)开发过Windows应用程序,当用集成开发环境生成一个工程时,会自动生成一个预先定义好的命令行,这个命令行包含了编译器(compiler)和连接器(linker)某些缺省的配置。很多习惯于图形集成开发环境的人可能对此并不了解。你可能用IDE生成过GUI应用程序,也可能生成过console应用程序,

6、这是两种不同的子系统(subsystem)应用程序,如果你注意观察,可能会发现,console应用程序中是以main函数为入口函数,而GUI应用程序是以WinMain函数为入口函数。在工程设置上,console应用程序的设置是/SUBSYSTEM:CONSOLE,而GUI应用程序的设置是/SUBSYSTEM:WINDOWS。而驱动程序的设置是/SUBSYSTEM:NATIVE。虽然在工程设置里,你可以通过选项“-entry:DriverEntry”来设定驱动程序的入口函数名字,但驱动程序的入口函数一般都命名为DriverEntry,DriverEntry已经成为官方缺省的驱动

7、函数入口名称。连接器(linker)根据windows可执行文件PE头的设置,生成最后的二进制文件,PE文件头的设置还决定了这个可执行文件如何被加载的,例如是作为一个可执行文件被加载,还是作为一个动态链接库被加载,还是作为一个驱动程序被加载。加载器(loader)会根据这些设置来验证是否支持所设定的加载模式。我们只需设置好加载模式,加载器就会根据这个设置来加载我们的程序。一般的驱动程序设置如下:/SUBSYSTEM:NATIVE/DRIVER:WDM-entry:DriverEntry在开始写DriverEntry之前,我们先说一下驱动程序的一些特殊之处。我知道,很多人都想能

8、够尽快写一个驱动程序,想看看到底驱动程序是如何工作的。这在写windows应用程序时,经常是这样的,拿一个例子来,改动一下,编译通过后,运行测试。如果运行不正确,应用程序崩溃了,或者消失了,这对系统不会造成多大影响,但是在编写驱动程序时,出现错误会导致蓝屏,当面对蓝屏时,往往会不知所措,如果驱动程序是在系统启动时加载的,情况会更糟糕。这时只有重新启动系统,进入到安全模式,恢复到先前的硬件配置。首先应该知道的是,驱动程序是加载到系统内核中的,如果驱动程序编写不当,会影响到系统的完整性,驱动程序中的BUG可能会导致整个系统的崩溃。Windows采用虚拟内存机制,系统会将内存中某些

9、页面交换到外部磁盘上来,这对应用程序是透明的,影响不大,但是有时候驱动程序要求访问的内存是不能被交换到外部磁盘的,必须在内存中,否则可能会引起系统蓝屏。驱动程序中使用内存必须小心,在某些情况下,如果一个驱动占用了可交换的内存页面,系统会尽可能的将这些页面保持在内存中。如果关闭了应用程序,驱动仍旧占用内存,这bug是很难发现的,除非进行驱动验证(driververify)。(需深入理解)关于IRQL和IRP,微软的MSDN有很长的篇幅来描述,这里只是尽可能用比较简单的描述来解释它。IRQL(InerruptRequestLevel),中断请求级别,任何一个进程都是在线程中执行的

10、,而任何一个线程都运行于一定的IRQL,进程的IRQL决定了线程允许如何被中断。同一个处理器上线程只能被具有更高IRQL级别的线程所中断,低优先级或同等优先级的中断会被屏蔽,只有高级别的IRQL才会中断。在多处理器系统中,每个处理器都有自己独立的IRQL。系统共有四种级别的IRQL,分别是“Passive”“APC”“Dispatch”“DIRL”。IRQL级别越高,可调用的API函数就越少。MSDN的内核函数API文档中都会注明在哪个中断请求级别上调用。例如DriverEntry函数就是运行在PASSIVE_LEVEL。PASSIVE_LEVEL是最低级的IRQL,不会屏蔽

11、任何中断。用户态应用程序的线程就运行在这个级别上,可以使用可交换的内存。APC_LEVEL,异步调用就运行在这个级别,这时会屏蔽APC级别的中断。在这个级别仍可访问可交换内存。当一个APC中断发生时,处理器提升到APC级别,这时,就禁止了其他的APC中断。驱动程序自己提升到APC级别,以便处理同步操作。DISPATCH_LEVEL,运行于这个级别的处理器会屏蔽除DPC以外的中断,不能访问可交换内存,所以这个级别能调用的API函数大大减少。DIRQ,设备级中断,这是硬件设备的中断,一般高层的驱动程序不需要

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。