摘要: 这只是一篇读书笔记。 派遣函数(Dispathc Funtion)是windows驱动中的重要概念。驱动程序的主要功能是负责处理I/O请求,其中大部分I/O请求是在派遣函数中处理的。用户模式下所有对驱动程序的I/O请求。全部由操作系统转化为一个叫做IRP的数据结构,不同的IRP数据会派遣到不同的派遣函数中。 IRP(I/O Request Package) 和windows应用程序的消息处理机制相似。 IRP中一个MajorFunction, 其保存派遣的函数。如:[代码]处理这些IRP最简单的方法是在相应的派遣函数中将IRP的状态设置为成功, 结束IRP请求(IoCompleteReques 阅读全文
posted @ 2011-01-15 21:43 sld666666 阅读(1592) 评论(0) 推荐(0) 编辑
摘要: 这只是一篇读书笔记。1. 对文件的操作 驱动程序开发中,经常会用到对文件的操作。DDK提供了一整套对文件的操作函数。其实现是:用ZwCreateFile 打开(ZwOpenFile)或者创建一个文件。通过OBJECT_ATTRIBUTES指定文件名,这个结构体通过InitializeObjectAttributes设置。这里需要注意的一点就是符号链接的概念。比如我们要写“c:\1.log”, 则必须写成“\??\c:”,windows 内核会把它替换成设备名”\Device\HarddiskVolume1”利用ZwSetInformationFile 获取或者修改文件属性。用ZwWriteFi 阅读全文
posted @ 2011-01-15 20:57 sld666666 阅读(612) 评论(0) 推荐(0) 编辑
摘要: 本文只是一篇读书笔记。1. 内存类型分页内存: 虚拟内存可以交换到文件中的。非分页内存:虚拟内存不可以交换到文件中。当程序中断请求级别在DISPATCH_LEVEL之上是,只能使用非分页内存。如:把函数放入分页或者非分页内存:#define PAGEDCODE code_seg(“PAGE”)#LOCKEDCODE code_seg()将一个函数载入到分页内存中:[代码]PAGED_CODE(); 是DDK 提供的宏。2. 分配内核内存windows 内核的栈空间不像应用程序这么大, 所以驱动程序不适合递归调用或者局部变量时大型的结构体。如果需要, 则需要在堆中申请。堆中申请的函数有以下几个: 阅读全文
posted @ 2011-01-15 20:18 sld666666 阅读(627) 评论(0) 推荐(0) 编辑