上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 18 下一页
摘要: 自定义StartIO 系统定义的StartIO队列只能使用一个队列(DDK提供的StartIO内部只有一个队列),这个队列将所有的IRP进行处理化。例如,读、写操作都会混在一起进行串行处理。然而,有时需要读、写分别进行串行化处理。这就需要自定义StartIO例程。当然,程序员需要自己去维护这个IRP 阅读全文
posted @ 2016-06-09 20:22 _No.47 阅读(487) 评论(0) 推荐(0)
摘要: StartIO例程 StartIO例程能够保证各个并行的IRP顺利执行,即串行化。假如有N个线程同时操作串口设备,必须将这些操作排队,然后一一进行处理。如果不做串行处理,当一个操作没有完毕时,新的操作又开始了,这会导致操作的混乱。因此,驱动有必要将并行的请求变成串行的请求,这需要用到队列。 将 转化 阅读全文
posted @ 2016-06-07 16:48 _No.47 阅读(1271) 评论(0) 推荐(0)
摘要: 应用程序对设备的同步异步操作: 大部分IRP都是由应用程序的Win32 API函数发起的。这些Win32 API本身就支持同步和异步操作。例如,ReadFile、WriteFile和DeviceIoControl等,它们都有异步和同步两种操作方式。DeviceIoControl的同步操作如图所示: 阅读全文
posted @ 2016-06-01 10:11 _No.47 阅读(2116) 评论(0) 推荐(0)
摘要: 中断请求级 中断请求被分为软件中断和硬件中断两种,这些中断都映射成不同级别的中断请求级。每个中断请求都有各自的优先级别,正在运行的线程随时都可以被中断打断,进入到中断处理程序。优先级高的中断来临时,处在优先级低的中断处理程序,也会被打断,进入到更高级别的中断处理函数。 Windows规定了32个中断 阅读全文
posted @ 2016-05-30 17:22 _No.47 阅读(939) 评论(0) 推荐(0)
摘要: 缓冲区方式读写操作 设置缓冲区读写方式: 读写操作一般是由ReadFile和WriteFile函数引起的,这里先以WriteFile函数为例进行介绍。WriteFile要求用户提供一段缓冲区,并且说明缓冲区的大小,然后WriteFile将这段内存的数据传入到驱动程序中。这种方法,操作系统将应用程序提 阅读全文
posted @ 2016-05-26 17:59 _No.47 阅读(5830) 评论(0) 推荐(0)
摘要: 驱动程序的主要功能是负责处理I/O请求,其中大部分I/O请求是在派遣函数中处理的。用户模式下所有对驱动程序的I/O请求,全部由操作系统转化为一个叫做IRP的数据结构,不同的IRP数据会被“派遣”到不同的派遣函数中。 IRP与派遣函数 IRP的全称是输入输出请求包。 其部分结构如下: 用图表示数据结构 阅读全文
posted @ 2016-05-26 11:26 _No.47 阅读(1829) 评论(0) 推荐(0)
摘要: 一般这种错误就是你使用一个函数的时候,可能只是在头文件中对他进行了声明,但是并没有在.c文件对他进行实现。 或者是没有引入相应的lib文件。 可以#pragma comment(lib, "XXX.lib")来实现,也可以添加外部依赖库来实现: 注意路径要正确。 阅读全文
posted @ 2016-05-26 10:34 _No.47 阅读(287) 评论(0) 推荐(0)
摘要: 内核模式下字符串操作 ANSI_STRING和UNICODE_STRING分别定义如下: 以UnicodeString类型对象进行初始化为例,代码如下: 输出: 进行复制字符串操作,代码如下: 输出: 但是如果这里改为: 加载驱动运行就会蓝屏。Why?其实,RltFreeUnicodeString是 阅读全文
posted @ 2016-05-24 17:50 _No.47 阅读(764) 评论(0) 推荐(0)
摘要: 虚拟内存地址 Windows所有的程序(Ring0和Ring3层)可以操作的都是虚拟内存。有一部分单元会和物理内存对应起来,但并非一一对应,多个虚拟内存页可以映射同一个物理内存页。还有一部分单元会被映射成磁盘上的文件,并标记为脏的。读取这段虚拟内存的时候,系统会发出一个异常,此时会出发异常处理函数, 阅读全文
posted @ 2016-05-23 21:55 _No.47 阅读(1082) 评论(0) 推荐(0)
摘要: 驱动对象 每个驱动程序会有唯一的驱动对象与之对应,并且这个驱动对象是在驱动加载的时候被内核中的对象管理程序所创建的。驱动对象用DRIVER_OBJECT数据结构表示,它作为驱动的一个实例被内核加载,并且内核对一个驱动只加载一个实例。确切的说,是由内核中的I/O管理器负责加载的。驱动程序需要在Driv 阅读全文
posted @ 2016-05-22 11:36 _No.47 阅读(5897) 评论(0) 推荐(0)
上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 18 下一页