[注]routine:例行程序。

1、标准驱动例程简介:

每一个内核态驱动程序都是由一系列系统定义的,标准的驱动例程组成。内核态驱动在这些标准例程中通过调用系统提供的驱动支持函数处理I/O请求包。为了处理IRPs,所有的驱动,不管它们处于驱动链的哪一个层次,必须实现一些基本的标准例程。另一些标准驱动例程则是可选的,是否要实现它们取决于驱动在驱动链中的位置,简单地说是看它是一个Function Driver还是一个Filter Driver。比起高层的驱动而言,那些直接控制物理设备的底层驱动需要实现更多的标准驱动例程。

基于以上的讨论,标准驱动例程可以被分为两个组别:那些每一个内核驱动都必须实现的和那些可选的、是否实现取决于驱动类别及在设备栈(Device Stack)中的位置的。

1.1、必选标准驱动例程:

下面这些驱动例程是每一个内核驱动程序都必须要实现的:

1.1.1、DriverEntry:

1.1.2、AddDevice:

所有支持pnp的内核态驱动都必须提供一个AddDevice例程。AddDevice例程负责在pnp管理器枚举设备时创建功能设备对象(FDO)或滤波器设备对象(Filter DO)。一个驱动的AddDevice例程必须命名为xxxAddDevice,xxx是一个驱动特定的前缀。驱动的DriverEntry例程必须把AddDevice例程地址存储在DriverObject -> DriverExtension ->AddDevice变量中。

AddDevice例程的主要任务是调用IoCreateDevice函数去创建一个设备对象,然后调用IoAttachDeviceToDeviceStack函数把设备对象绑定到设备堆栈上去。AddDevice例程运行在系统线程上下文中当IRQL等于PASSIVE_LEVEL时。

1.1.3、Dispatch Routines:

1.1.4、Unload:

1.2、可选标准驱动例程:

暂略

[windows驱动]标准驱动例程的更多相关文章

  1. Windows 文件过滤驱动经验总结

    Windows 文件过滤驱动经验总结作者:sinister 本文转载自驱动开发网 看了 ChuKuangRen 的第二版<文件过滤驱动开发教程>后,颇有感触.我想,交流都是建立在平等的基础 ...

  2. Linux与Windows的设备驱动模型对比

    Linux与Windows的设备驱动模型对比 名词缩写: API 应用程序接口(Application Program Interface ) ABI 应用系统二进制接口(Application Bi ...

  3. 2013-6-2 [转载自CSDN]如何入门Windows系统下驱动开发

    [序言]很多人都对驱动开发有兴趣,但往往找不到正确的学习方式.当然这跟驱动开发的本土化资料少有关系.大多学的驱动开发资料都以英文为主,这样让很多驱动初学者很头疼.本人从事驱动开发时间不长也不短,大概 ...

  4. 连接LilyPad之Windows平台的驱动

    连接LilyPad之Windows平台的驱动 LilyPad和其他的Arduino控制板的不同之处是它是为电子织物和可穿戴设计的.那么,它的大小就必须要紧凑.所以,它并没有板载其他大多数板子都具有的U ...

  5. 如何正确入门Windows系统下驱动开发领域?

    [作者]猪头三个人网站 :http://www.x86asm.com/ [序言]很多人都对驱动开发有兴趣,但往往找不到正确的学习方式.当然这跟驱动开发的本土化资料少有关系.大多学的驱动开发资料都以英文 ...

  6. 分享CCNTFS小工具,在 macOS 中完全读写、修改、访问Windows NTFS硬盘的文件,无须额外的驱动(原生驱动)更稳定,简单设置即可高速传输外接NTFS硬盘文件

    CCNTFS [ 下载 ] 在 macOS 中完全读写.修改.访问Windows NTFS硬盘的文件,无须额外的驱动(原生驱动)更稳定,安装后进行简单设置即可高速传输外接NTFS硬盘文件,可全程离线使 ...

  7. kvm安装windows使用virtio驱动

    Windows安装VirtIO驱动的两种方法 已经使用IDE方式来安装好系统 (1)安装完Windows后,创建一块临时的硬盘和网卡,将其驱动都设置为virtio模式添加到Windows中 (2) 添 ...

  8. 安装Windows操作系统的驱动程序(驱动精灵版) - 进阶者系列 - 学习者系列文章

    安装完操作系统之后,就需要安装对应的驱动程序了.下面就简要介绍下驱动程序的安装.以驱动精灵驱动安装软件为例. 1.  下载驱动精灵. 从http://www.drivergenius.com/网站下载 ...

  9. liunx驱动----USB驱动

    现象:把usb设备接入电脑 1.Windows发现设备 2.跳出一个对话框提示安装驱动程序 问1:既然没有驱动程序,为什么了够知道是什么驱动了?? 答1:Windows里面已经有了usb总线驱动程序, ...

随机推荐

  1. Linux下软件安装方法即路径设置

    Linux下软件安装方法即路径设置 http://www.cnblogs.com/edward259/archive/2010/07/02/1770066.html

  2. phalcon: crypt-encrypt/decrypt用法

    phalcon:crypt加密与解密 可以在入口文件index.php进行配置,也可以不配置: $di->set('crypt', function(){ $crypt = new \Phalc ...

  3. shell脚本基础知识

    虽然现在能在Linux系统下生存,但是自觉效率太低,和高手有很大的差距. 这就是关于Linux的知识太过匮乏,有很多事情知道该怎么做,但是就是没法在Linux下实现,为了提升工作效率,必须要接触Lin ...

  4. JSP HTML error code

    <html> <head> <title>Setting HTTP Status Code</title> </head> <body ...

  5. 设置DIV最小高度以及高度自适应随着内容的变化而变化

    <!--退租账单--> <div id="bilsli" onmouseover="showBill(this)"> #bilsli{ ...

  6. NKW

    JavaScript几种原生函数 - 博客频道 - CSDN.NEThttp://blog.csdn.net/h378588270/article/details/12948163 .json_百度搜 ...

  7. 最最最简单的轮播图(JQuery)

    html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  8. jmeter 实时搜索结果

    因为JMeter 2.13你可以得到实时搜索结果发送到后端通过 后端侦听器 使用潜在的任何后端(JDBC.JMS网络服务,€Š) 通过提供一个实现类 AbstractBackendListenerCl ...

  9. robotframework笔记19

    后处理输出 使用时自动测试 在测试执行报告和日志生成,并使用它 分别允许创建自定义报告和日志以及结合 和合并的结果. 使用Rebot 简介 rebot [options] robot_outputs ...

  10. 通配符+countif()解决大于15位数的计数问题

    excel的最大精度是15位,如果一个单元格中存储的数字超过15位,那么函数在计算的时候将会出现问题,它们会将15位之后的数字变成0. 在这种情况下,需要在函数中加入通配符,例如,统计A列中,A1出现 ...