随笔分类 -  Driver

Windows Kernel/Driver Development
摘要:这个模块主要是实现加载/卸载Windows内核驱动程序(不是硬件驱动), 属于软件驱动, 也就是是在软件启动的时候加载驱动, 在软件退出的时候卸载驱动程序. 刚开始学驱动时问题用SrvInst.exe, 感觉不太方便, 不能随程序的启动,退出, 自动加载与卸载, 所以写成了这个模块, 这下方便好多了. BUG:关于加载多个驱动程序那里的计数器, 还未做测试, 不知道能否正常工作. 有时候在卸载驱动程序会遇到"驱动程序已标记为删除"的错误消息, 这个还未解决. 貌似这种情况多发生在应用程序完全释放其所打开的资料所致. 比如:1)加载驱动; 2)打开设备 3)关闭设备 4)卸载 阅读全文
posted @ 2013-02-25 14:25 女孩不哭 阅读(3944) 评论(4) 推荐(0) 编辑
摘要:<<寒江独钓>>中第3章的串口过滤只实现了对写操作的过滤, 没有实现对读操作的过滤, 这里, 我改进了一下, 去掉了原来对所有串口的过滤, 改成了只对指定的串口过滤; 增加了同时对读操作的过滤,其实主要就是调用IoSetCompletionRoutine设置完成回调函数. 源代码: #include <ntddk.h>#include <ntstrsafe.h>/**********************************************************文件名称:comdrv.c文件路径:./comdrv/comdrv.c 阅读全文
posted @ 2013-02-25 14:00 女孩不哭 阅读(805) 评论(0) 推荐(0) 编辑
摘要:这篇文章是讲WDK中的LIST_ENTRY的遍历的, 前一篇文章(对WDK中对LIST_ENTRY的操作的相关函数的实现及简单运用)是讲的实现方式. 都已经实现了,遍历当然已经不是问题了. //list_entry.c#include <ntddk.h>/**********************************************************文件名称:list_entry.c文件路径:./list_entry/list_entry.c创建时间:2013-2-4,22:49:43文件作者:女孩不哭文件说明:该文件实现对WDK中LIST_ENTRY双向链表的 阅读全文
posted @ 2013-02-25 13:47 女孩不哭 阅读(4737) 评论(0) 推荐(0) 编辑
摘要:这篇文章主要是描述WDK中对LIST_ENTRY双向链表的操作的相关函数(不包含原子操作)的实现以及使用范例. 代码中我用一个结构体+函数指针的方式把函数给包裹了一下,看不惯的可以直接调用原函数即可. 如果不懂CONTAINING_RECORD,参见:我对CONTAINING_RECORD宏的详细解释(http://www.cnblogs.com/nbsofer/archive/2013/01/07/2849913.html) 关键词:WDK,LIST_ENTRY,CONTAINING_RECORD 2013-07-14 更新:加入了list_remove函数,实现移除双向链表中的... 阅读全文
posted @ 2013-02-25 13:31 女孩不哭 阅读(1973) 评论(0) 推荐(0) 编辑
摘要:tfref 宏CONTAINING_RECORD的用处其实还是相当大的, 而且很是方便, 它的主要作用是: 根据结构体中的某成员的地址来推算出该结构体整体的地址! 下面从一个简单的例子开始说起: 我们定义一个结构体, 同时类型化:typedef struct{ int a; ... 阅读全文
posted @ 2013-01-07 19:02 女孩不哭 阅读(13615) 评论(1) 推荐(2) 编辑
摘要:以前见他们调试驱动程序之类的都是使用的VMWare, 我没怎么用这软件, 感觉这软件有点臃肿, 后台服务挂得太多了, 感觉不爽, 于是就没搞它.加上电脑上很早就装有Oracle的Virtual Box, 于是就看了下, 其实Virtual Box也有支持串口设备, 按理说也可以用Windbg进行连接的. 一直觉得Virtual Box挺好用的.既然写了这篇博客, 那就证明我确实已经成功地进行调试了. 下面说下步骤吧(已经完成的就忽略吧): (如果图片显示不完整, 请在右键菜单中查看该图片)1.安装Virtual Box虚拟机 官方网址:https://www.virtualbox.o... 阅读全文
posted @ 2013-01-02 10:35 女孩不哭 阅读(7027) 评论(8) 推荐(1) 编辑