
windows驱动开发技术详解
文章平均质量分 79
whitesilt
这个作者很懒,什么都没留下…
展开
-
NT式驱动
转载自:http://mzf2008.blog.163.com/blog/static/35599786201011733440667///Driver.h #pragma once#ifdef __cplusplus extern "C"{#endif#include //NT式驱动包含此头文件#ifdef __cplusplus转载 2013-11-29 22:32:55 · 674 阅读 · 0 评论 -
Windows内核函数(3) - 内核模式下的注册表操作
转载自:http://mzf2008.blog.163.com/blog/static/355997862010111313716234/注册表里的几个概念: 1. 创建关闭注册表项NTSTATUS ZwCreateKey( OUT PHANDLE KeyHandle, IN ACCESS_MASK转载 2013-11-29 23:35:38 · 1276 阅读 · 0 评论 -
派遣函数(1) - 初识派遣函数
转载自;http://mzf2008.blog.163.com/blog/static/3559978620101114103859212/IRP与派遣函数< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" />IRP的处理机制类似Windows应用程序的“消息处理转载 2013-11-29 23:36:27 · 1021 阅读 · 0 评论 -
派遣函数(2) - 设备对象的3种读写方式
转载自:http://write.blog.youkuaiyun.com/postedit读写操作设备对象一共可以有三种读写方式,分别是缓冲区方式读写,直接方式读写,其他方式读写。这三种方式的Flags分别对应为DO_BUFFERED_IO,DO_DIRECT_IO和0。在驱动程序创建设备对象的时候,需要考虑好该设备是采用何种读写方式。当IoCreateDevice转载 2013-11-29 23:37:17 · 771 阅读 · 0 评论 -
派遣函数(3) - IO设备控制操作
转载自:http://mzf2008.blog.163.com/blog/static/35599786201011162265581/1.DeviceIoControl与驱动交互除了用ReadFile(读设备)和WriteFile(写设备)以外,应用程序还可以通过另外一个WIN32 API函数DeviceIoControl操作设备。DeviceIoControl内转载 2013-11-29 23:38:28 · 872 阅读 · 0 评论 -
线程同步(1) - 用户模式下的线程同步
转载自:http://mzf2008.blog.163.com/blog/static/355997862010111731141289/(1) 用户模式的等待DWORD WaitForSingleObject(HANDLE hHandle, // handle to object to wait forDWORD dwMi转载 2013-11-29 23:39:26 · 791 阅读 · 0 评论 -
线程同步(2) - 内核模式下的线程同步
转载自:http://mzf2008.blog.163.com/blog/static/355997862010112041821953/1.内核模式下的等待NTSTATUS KeWaitForSingleObject( IN PVOID Object, IN KWAIT_REASON WaitReason, IN KPROCE转载 2013-11-29 23:40:23 · 2090 阅读 · 0 评论 -
IRP的同步
转载自:http://mzf2008.blog.163.com/blog/static/355997862010112412048667/同步操作设备如果需要同步操作设备,那么在打开设备的时候就要指定以“同步”的方式打开设备。打开设备用CreateFile函数,其函数声明如下:HANDLE CreateFile( LPCTSTR lpFileN转载 2013-11-29 23:41:30 · 958 阅读 · 0 评论 -
定时器
转载自:http://mzf2008.blog.163.com/blog/static/355997862010112622923357/1. I/O定时器I/O定时器是DDK提供的一种定时器,使用这种定时器时,每间隔1S钟系统会调用一次I/O定时器例程。I/O定时器可以为间隔N秒做定时,但是如果要实现毫秒级别间隔,微妙级别间隔,就需要用到DPC定时器转载 2013-11-29 23:42:14 · 825 阅读 · 0 评论 -
Windows内核函数(2) - 内核模式下的文件操作
转载自;http://mzf2008.blog.163.com/blog/static/35599786201011124648756/1. 文件的创建对文件的创建或者打开都是通过内核函数ZwCreateFile实现的。和Windows API类似,这个内核函数返回一个文件句柄,文件的所有操作都是依靠这个句柄进行操作的。在文件操作完毕后,要关闭这个文转载 2013-11-29 23:34:42 · 1063 阅读 · 0 评论 -
Windows内核函数(1) - 字符串处理函数
转载自:http://mzf2008.blog.163.com/blog/static/3559978620101112115510592/1.ASCII字符串和宽字符串打印一个ASCII字符串:CHAR* string = “Hello”;KdPrint((“%s\n”, string)); //s为小写 打印一个宽字符字转载 2013-11-29 23:33:39 · 967 阅读 · 0 评论 -
WDM式驱动
转载自:http://mzf2008.blog.163.com/blog/static/35599786201011755117299//************************************************************************* 文件名称:HelloWDM.h转载 2013-11-29 22:33:34 · 641 阅读 · 0 评论 -
inf文件的编写
转载自:http://mzf2008.blog.163.com/blog/static/35599786201011772657684/inf文件其实是一种纯文本文件,可以用任意一款文本编辑软件来打开进行编辑。inf是不区分大小写的。inf中包含各节的含义:1、 Version节 每一个INF文件都包含一个这样的节,该节中的条目主要是描述此INF文件支持的转载 2013-11-29 22:34:14 · 922 阅读 · 0 评论 -
编写程序加载NT式驱动
转载自:http://mzf2008.blog.163.com/blog/static/355997862010119935492/编写程序加载NT式驱动 设备驱动程序的动态加载主要由服务控制管理程序(Service Control Manager,SMC)系统组件完成。Driver Service是Windows服务的一个特例,它遵从Windows转载 2013-11-29 22:35:00 · 719 阅读 · 0 评论 -
NT式驱动的基本结构
转载自:http://mzf2008.blog.163.com/blog/static/3559978620101195653754/驱动对象(DRIVER_OBJECT)typedef struct _DRIVER_OBJECT { //结构的类型和大小 CSHORT Type; CSHORT Size; PDEVICE_OBJECT Dev转载 2013-11-29 23:28:29 · 640 阅读 · 0 评论 -
WDM式驱动程序的基本结构
转载自;http://mzf2008.blog.163.com/blog/static/35599786201011973648864/WDM式驱动程序的基本结构 对于WDM驱动程序来说,一般都是基于分层的。也就是说,完成一个设备的操作,至少要由两个驱动设备共同完成。 1. 物理设备对象与功能设备对象在WDM模型中,完成一个设备的操作,至少要有两个设转载 2013-11-29 23:29:26 · 1447 阅读 · 0 评论 -
Windows内存管理(1)--分配内核内存 和 使用链表
转载自;http://mzf2008.blog.163.com/blog/static/3559978620101110101314696/1. 分配内核内存Windows驱动程序使用的内存资源非常珍贵,分配内存时要尽量节约。和应用程序一样,局部变量是存放在栈空间中的。但栈空间不会像应用程序那么大,所以驱动程序不适合递归调用或者局部变量是大型数据结构。如果需要大型数据转载 2013-11-29 23:30:16 · 729 阅读 · 0 评论 -
Windows内存管理(2)--Lookaside结构 和 运行时函数
转载自:http://mzf2008.blog.163.com/blog/static/355997862010111005639785/1. Lookaside结构频繁的申请和回收内存,会导致在内存上产生大量的内存“空洞”,从而导致最终无法申请内存。DDK为程序员提供了Lookaside结构来解决这个问题。我们可以将Lookaside对象看成是一个内存容器。在初始化转载 2013-11-29 23:31:52 · 571 阅读 · 0 评论 -
Windows内存管理(3)--检查内存可用性,结构化异常处理 和 ASSERT
转载自:http://mzf2008.blog.163.com/blog/static/355997862010111052745960/1. 检查内存可用性在驱动程序开发中,对内存的操作要格外小心。如果某段内存是只读的,而驱动程序试图去写操作,会导致系统的崩溃。DDK提供了两个函数,帮助程序员在不知道某段内存是否可读写的情况下,试探这段内存的可读写性。VOID转载 2013-11-29 23:32:47 · 597 阅读 · 0 评论 -
Windows内存管理(2)--Lookaside结构 和 运行时函数
1. Lookaside结构频繁的申请和回收内存,会导致在内存上产生大量的内存“空洞”,从而导致最终无法申请内存。DDK为程序员提供了Lookaside结构来解决这个问题。我们可以将Lookaside对象看成是一个内存容器。在初始化的时候,它先向Windows申请了一块比较大的内存。以后程序员每次申请内存的时候,不是直接向Windows申请内存,而是想Lookaside对象申请内转载 2013-12-02 13:22:40 · 592 阅读 · 0 评论