一些关于window驱动的文章

来源:互联网 发布:泡泡堂因网络不稳定 编辑:程序博客网 时间:2024/04/29 17:32

http://blog.163.com/sun201201@126/blog/#m=0&t=1&c=fks_085067093085081065085085074066085094087071081094086

IRQL深入解析(3)--与IRQ比较

2007-08-03 23:13阅读545评论0

         IRQ:Interrupt ReQuest,中断请求,当中断发生后,发生中断的设备通过它使用的中断请求信号线象中断控制器报告中断。CPU可以通过IRQ号来识别中断。
         IRQL:Interrupt ReQuest Level,中断请求优先级,一个由windows虚拟出来的概念,划分在windows下中断的优先级,这里中断包括了硬中断和软中断,硬中断是由硬件产生,而软中断则是完全虚拟出来的。
假中断:Spurious Interrupt,当中断发生时中断控制器相关在服务位并未置位。windows也把IRQL低于当前IRQL的中断当作假中断来处理。

阅读全文>>

分类:驱动开发|阅读(545)|评论(0)

IRQL深入解析(2)--驱动级别

2007-08-03 23:05阅读378评论0

      今天来看看驱动中常见的几种IRQL。每个NDIS API函数,在DDK文档中都描述了它的IRQL.

      PASSIVE_LEVEL:

      IRQL最低级别,没有被屏蔽的中断(即中断所有IRQL的中断),在这个级别上,线程执行用户模式,可以访问分页内存。DriverEntry(), AddDevice()和大部分IRP Dispatch函数都运行在PASSIVE_LEVEL。

      APC_LEVEL:
      在这个级别上,只有APC级别的中断被屏蔽(即中断除了IRQL=APC_LEVEL的中断),,可以访问分页内存。当有APC发生时,处理器提升到APC级别,这样,就屏蔽掉其它APC,为了和APC执行一些同步,驱动程序可以手动提升到这个级别。比如,如果提升到这个级别,APC就不能调用。在这个级别,APC被禁止了,导致禁止一些I/O

阅读全文>>

分类:驱动开发|阅读(378)|评论(0)

IRQL深入解析(1)--IRQL级别

2007-08-03 22:25阅读434评论0

        IRQL = Interrupt Request Level.即中断执行的优先级。一个由windows虚拟出来的概念,划分在windows下中断的优先级,这里中断包括了硬中断和软中断,硬中断是由硬件产生,而软中断则是完全虚拟出来的。
        IRQL = Interrupt Request.中断请求,当中断发生后,发生中断的设备通过它使用的中断请求信号线象中断控制器报告中断。CPU可以通过IRQ号来识别中断。

        如果某个Interrupt产生了,且IRQL <= 目前Processor的IRQL Se

阅读全文>>

分类:驱动开发|阅读(434)|评论(0)

IRP处理----驱动程序基础概念(三)

2007-07-18 22:36阅读187评论0

 
阅读全文>>

分类:驱动开发|阅读(187)|评论(0)

IRP结构----驱动程序基础概念(二)

2007-07-18 20:30阅读417评论0

        WIN2000以上的系统I/O都是包驱动的,系统采用一种称为"I/O请求包"的数据格式与内核模式下的驱动程序通信。所谓的"I/O请求包",就是IRP。

        一、IRP 简介

        IRP是I/O Request Pcaket 的缩写,即I/O请求包。驱动与驱动之间通过 IRP 进行通信。而使用驱动的应用层调用的 CreatFile,ReadFile,WriteFile,DeviceIoControl 等函数,说到底也是使用 IRP 和驱动进行通信。IRP由I/O管理器根据用户态程序提出的请求创建并传给相应的驱动程序。在分层的驱动程序中,这个过程很复杂,一个IRP常常要穿越几层驱动程序。

阅读全文>>

分类:驱动开发|阅读(417)|评论(0)

<转载> 键盘驱动系列---JIURL键盘驱动 5

2007-07-18 16:25阅读403评论0

7 键盘驱动的运作

7.1 输入数据队列简介

i8042prt 和 kbdclass 各有一个输入数据队列,他们是循环使用的缓冲区。他们的每个单元是一个 KEYBOARD_INPUT_DATA 结构。

i8042prt 的自定义的设备扩展中,保存着一些指针和计数值,用来使用它的那个输入数据队列。

PKEYBOARD_INPUT_DATA 类型的 InputData , DataIn , DataOut , DataEnd。ULONG 类型的 InputCount。KEYBOARD_INPUT_DATA 类型的 CurrentInput 。

阅读全文>>

分类:驱动开发|阅读(403)|评论(0)

<转载> 键盘驱动系列---JIURL键盘驱动 4

2007-07-18 16:24阅读241评论0

6.2 初始化与注册表

在驱动的初始化中,注册表起着非常重要的作用。

6.2.1 重要认识

    每台计算机的硬件配置可能是不同的,系统是如何知道需要为哪些硬件载入驱动?系统是如何知道要载入的驱动文件是哪个文件?答案是通过注册表,注册表中保存着这些信息。那么注册表中的这些信息是哪里来的?答案是在安装驱动的时候,安装程序放到注册表中的。

6.2.2 确定驱动载入顺序的基本知识

    在系统初始化的时候,决定驱动程序在什么时候被载入的信息保存在注册表中。最早的一批驱动是由ntldr载入内存的(仅仅是载入),第二批是由IO管理器载入内存的,第三批是由 SCM(Service Control Manager) 载入的。一个驱动在第几批中被载入是由 HKLM\SYSTEM\CurrentControlSet\Services\驱动名\Start 的值

阅读全文>>

分类:驱动开发|阅读(241)|评论(0)

<转载> 键盘驱动系列---JIURL键盘驱动 3

2007-07-17 23:31阅读120评论0

4 编译与调试环境简介

4.1 源码

    ps/2键盘驱动的设备栈有3层,最底层设备对象的驱动是 acpi,中间层设备对象的驱动是 i8042prt,最高层设备对象的驱动是 kbdclass。

    DDK 所附的源码中有 i8042prt 和 kbdclass 的源码,分别位于 ...\NTDDK\src\input\pnpi8042 ,...\NTDDK\src\input\kbdclass 。

    注意,在目前DDK所附的源码中没有 acpi 的源码,不过 acpi 对于键盘驱动几乎没有起什么作用。在DDK中可以找到一个叫acpi的目录,但那个下面并不是acpi.sys的源码,而是acpiec.sys的源码,没有用处。

阅读全文>>

分类:驱动开发|阅读(120)|评论(0)

<转载> 键盘驱动系列---JIURL键盘驱动 2

2007-07-17 23:30阅读100评论0

2 应用层基础知识

    在讨论使用键盘的应用程序这个问题之前,我们首先介绍一下 Windows 中,应用程序使用驱动,应用程序与驱动通信的一些问题。

2.1 应用程序如何使用驱动

    应用程序中使用 CreateFile,ReadFile,WriteFile,DeviceIoControl,CloseHandle 来指示驱动程序完成某种任务。比如我们在应用程序中使用 ReadFile 来让驱动读取硬件设备,我们在应用程序中使用 WriteFile 来让驱动写硬件设备,我们在应用程序中使用 DeviceIoContorl 来让驱动完成某些驱动支持的功能。而 ReadFile, WriteFile, DeviceIoControl 这三个 api 都需
阅读全文>>

分类:驱动开发|阅读(100)|评论(0)

<转载> 键盘驱动系列---JIURL键盘驱动 1

 

驱动对象、设备对象、设备栈----驱动程序基础概念(一)

2007-07-17 22:34阅读233评论0

       刚开始接触驱动的时候,总是搞不清楚驱动对象、设备对象、设备栈等等基本概念,所以对驱动的开发也总是会出现一些奇怪的错误。但想要一下子说明白这些基本结构,也不是一件容易的事,最好的办法就是接触多了,了解多了,慢慢会清楚的。这里做一个总结,也希望能对初学者有所帮助。

      一、 为了后面的叙述方便,首先列出驱动对象和设备对象的结构。

      1.1 驱动对象结构 DRIVER_OBJECT ,结构图如下:

     

       1.2 DDK 中有对于一些域的说明

阅读全文>>

分类:驱动开发|阅读(233)|评论(0)

 驱动入门系列---驱动级键盘记录器(七)

2007-07-17 21:01阅读148评论0

走过了VC++到驱动开发,回头看,才发现真是迂回曲折。今天,应一个朋友之邀,结合一个完整的例子,写一点驱动入门的东西,希望对初学者能有所帮助。为了更深入的学习驱动开发,我将用DDK 和Compuware DriverStudio V3.2两种方法来构建这个例子。

我也只是入门,理解也未必正确,有错误的地方望多多指教。有问题欢迎与我联系。邮箱为sun201201@126.com, QQ为35777618。对于这本教程,您可以免费获得。如果需要转载,请保证其完整性。另外,不得剽窃任何内容作为任何赢利出版物的全部或者部分。

阅读全文>>

分类:驱动开发|阅读(148)|评论(0)

驱动入门系列---驱动级键盘记录器(六)

2007-07-17 21:01阅读173评论0

走过了VC++到驱动开发,回头看,才发现真是迂回曲折。今天,应一个朋友之邀,结合一个完整的例子,写一点驱动入门的东西,希望对初学者能有所帮助。为了更深入的学习驱动开发,我将用DDK 和Compuware DriverStudio V3.2两种方法来构建这个例子。

我也只是入门,理解也未必正确,有错误的地方望多多指教。有问题欢迎与我联系。邮箱为sun201201@126.com, QQ为35777618。对于这本教程,您可以免费获得。如果需要转载,请保证其完整性。另外,不得剽窃任何内容作为任何赢利出版物的全部或者部分。

阅读全文>>

分类:驱动开发|阅读(173)|评论(0)

驱动入门系列---驱动级键盘记录器(五)

2007-07-17 21:00阅读211评论0

走过了VC++到驱动开发,回头看,才发现真是迂回曲折。今天,应一个朋友之邀,结合一个完整的例子,写一点驱动入门的东西,希望对初学者能有所帮助。为了更深入的学习驱动开发,我将用DDK 和Compuware DriverStudio V3.2两种方法来构建这个例子。

我也只是入门,理解也未必正确,有错误的地方望多多指教。有问题欢迎与我联系。邮箱为sun201201@126.com, QQ为35777618。对于这本教程,您可以免费获得。如果需要转载,请保证其完整性。另外,不得剽窃任何内容作为任何赢利出版物的全部或者部分。

阅读全文>>

分类:驱动开发|阅读(211)|评论(0)

驱动入门系列---驱动级键盘记录器(四)

2007-07-17 20:59阅读245评论0

走过了VC++到驱动开发,回头看,才发现真是迂回曲折。今天,应一个朋友之邀,结合一个完整的例子,写一点驱动入门的东西,希望对初学者能有所帮助。为了更深入的学习驱动开发,我将用DDK 和Compuware DriverStudio V3.2两种方法来构建这个例子。

我也只是入门,理解也未必正确,有错误的地方望多多指教。有问题欢迎与我联系。邮箱为sun201201@126.com, QQ为35777618。对于这本教程,您可以免费获得。如果需要转载,请保证其完整性。另外,不得剽窃任何内容作为任何赢利出版物的全部或者部分。

阅读全文>>

分类:驱动开发|阅读(245)|评论(0)

驱动入门系列---驱动级键盘记录器(三)

2007-07-17 20:58阅读278评论0

走过了VC++到驱动开发,回头看,才发现真是迂回曲折。今天,应一个朋友之邀,结合一个完整的例子,写一点驱动入门的东西,希望对初学者能有所帮助。为了更深入的学习驱动开发,我将用DDK 和Compuware DriverStudio V3.2两种方法来构建这个例子。

我也只是入门,理解也未必正确,有错误的地方望多多指教。有问题欢迎与我联系。邮箱为sun201201@126.com, QQ为35777618。对于这本教程,您可以免费获得。如果需要转载,请保证其完整性。另外,不得剽窃任何内容作为任何赢利出版物的全部或者部分。

阅读全文>>

分类:驱动开发|阅读(278)|评论(0)

驱动入门系列---驱动级键盘记录器(二)

2007-07-17 00:07阅读313评论0

走过了VC++到驱动开发,回头看,才发现真是迂回曲折。今天,应一个朋友之邀,结合一个完整的例子,写一点驱动入门的东西,希望对初学者能有所帮助。为了更深入的学习驱动开发,我将用DDK 和Compuware DriverStudio V3.2两种方法来构建这个例子。

我也只是入门,理解也未必正确,有错误的地方望多多指教。有问题欢迎与我联系。邮箱为sun201201@126.com, QQ为35777618。对于这本教程,您可以免费获得。如果需要转载,请保证其完整性。另外,不得剽窃任何内容作为任何赢利出版物的全部或者部分。

二. 程序框架的建立

阅读全文>>

分类:驱动开发|阅读(313)|评论(0)

驱动入门系列---驱动级键盘记录器(一)

2007-07-16 15:49阅读1107评论0

走过了VC++到驱动开发,回头看,才发现真是迂回曲折。今天,应一个朋友之邀,结合一个完整的例子,写一点驱动入门的东西,希望对初学者能有所帮助。为了更深入的学习驱动开发,我将用DDK 和Compuware DriverStudio V3.2两种方法来构建这个例子。

我也只是入门,理解也未必正确,有错误的地方望多多指教。有问题欢迎与我联系。邮箱为sun201201@126.com, QQ为35777618。对于这本教程,您可以免费获得。如果需要转载,请保证其完整性。另外,不得剽窃任何内容作为任何赢利出版物的全部或者部分。

一. 驱动开发环境搭建

阅读全文>>

分类:驱动开发|阅读(1107)|评论(0)

WINXP 驱动程序类型

2007-07-16 11:33阅读60评论0

       装完了XPDDK,里面的源代码例子真可谓是丰富多彩,而自己实际用到的又少之又少,很多都不知道到底是些什么,这里把知道的做一个总结,以后再慢慢完善....

1. ACPI是什么

ACPI - Advanced Configuration and Power Interface,是由Intel、Microsoft共同制定的一种高级电源管理规范,区别于从前的APM电源管理方式。在ACPI电源管理方式下,根据CPU、内存、二级缓存、主控芯片、硬盘等设备挂起时所处的状态不同,它可以支持五种睡眠状态S1、S2、S3、S4和S5,其中的S3就是指的是的Suspend To RAM。

APM - Advanced Power Management,即“高级电源管理”。 这是英特

阅读全文>>

分类:驱动开发|阅读(60)|评论(0)

Error translating ....:Matching PDB file not found.