这篇是计算机中Windows Mobile/Symbian类的优质预售推荐<Windows内核安全与驱动开发>. 编辑推荐 本书适合计算机安全软件从业人员.计算机相关专业院校学生以及有一定C语言和操作系统基础知识的编程爱好者阅读. 内容简单介绍 本书的前身是<天书夜读--从汇编语言到Windows内核编程>和<寒江独钓--Windows内核安全编程>. 与Windowsclient安全软件开发相关的驱动程序开发是本书的主题. 书中的程序使用环境从32位到64位.从Win…
国内有关于windows内核驱动这块的书籍实在是甚少,不过好在<windows内核安全与驱动开发>这本书还算不错(内容方面),但是不得不说这本书在许多地方存在着一些细节上的问题.比如我今天要谈的这个话题. 在这本书的键盘过滤这个章节,作者对ObReferenceObjectByName个函数的用法做了介绍,并指明这是一个非文档化函数(可以用,但是在MSDN的文档中以及SDK的头文件中没有公开出来).这个函数的具体结构如下: NTSTATUS ObReferenceObjectByName( I…
<Windows内核安全与驱动开发>阅读笔记 -- 索引目录 <Windows内核安全与驱动开发> 7.1&7.2&7.3 串口的过滤 一.设备绑定的内核API 进行过滤的最主要的方法是对一个____进行绑定. 我们可以首先认为:一个真实的设备对应一个_____.通过编程可以生成一个__的____,并绑定到一个___的设备上.一旦绑定,则本来操作系统发送给____的请求,就会发送到____上. 一个简单的API绑定函数是_____,必须是有____的设备,才能使用这…
<Windows内核安全与驱动开发>阅读笔记 -- 索引目录 一.内核上机指导 二.内核编程环境及其特殊性 2.1 内核编程的环境 2.2 数据类型 2.3 重要的数据结构 2.4 函数调用 2.5 Windows的驱动开发模型 2.6 WDK编程中的特殊点 三.字符串与链表 3.1 字符串操作 3.2 内存与链表 3.3 自旋锁 四.文件.注册表.线程 4.1 文件操作 4.2 注册表操作 4.3 时间与定时器 4.4 线程与事件 五.应用与内核通信 5.1 内核方面的编程 5.2 应用方面…
<Windows内核安全与驱动开发>阅读笔记 -- 索引目录 <Windows内核安全与驱动开发> 2.3 重要的数据结构 一.驱动对象  Windows内核采用__的编程方式.Windows内核认为许多东西都是__,比如一个驱动.一个设备.一个文件,甚至其他的一些东西. 与应用程序开发不同,Windows内核模块并不生成一个进程,只是填写一组__函数让Windows来调用,而这组__必须符合Windows内核规定. Windows中很多组件都拥有自己的__,比如:所有的硬件驱动程…
<Windows内核安全与驱动开发>阅读笔记 -- 索引目录 <Windows内核安全与驱动开发> 3.1 字符串操作 一.字符串的初始化 1. 判断下列代码为什么会蓝屏? UNICODE_STRING str = { }; wcscpy(str.Buffer, L"hello world!"); str.Length = str.MaximumLength = wcslen(L"hello world!") * sizeof(WCHAR);…
<Windows内核安全与驱动开发>阅读笔记 -- 索引目录 <Windows内核安全与驱动开发> 3.2 内存与链表 1. 尝试生成一个链表头并将其初始化. 2. 尝试向内存中申请两个链表结点,并且初始化该结点,将该结点插入到链表中,其数据结构如下. typedef struct { LIST_ENTRY list_entry; INT id; }StuInfo,*PStuInfo; 3. 遍历“问题2”中生成的链表,并调用 DbgPrint 打印出来. 4. 将问题2中的链表清…
<Windows内核安全与驱动开发>阅读笔记 -- 索引目录 <Windows内核安全与驱动开发>4.1 文件操作 从 C:\a.txt 中读取一部分内容并利用 DbgPrint 输出. #include <ntifs.h> //提供一个卸载函数,让程序能卸载,如果没有这个函数,驱动将不能卸载. VOID UnDriver(PDRIVER_OBJECT driver) { KdPrint(("卸载驱动成功")); } //入口函数,相当于main.…
<Windows内核安全与驱动开发>阅读笔记 -- 索引目录 <Windows内核安全与驱动开发>4.3  时间与定时器 一.获取自系统启动以来的毫秒数 /* 函数作用:求自操作系统启动以来所经历的毫秒数 参数1 mesc: 计算结果(毫秒) */ void MyGetTickCount(PULONG msec) { LARGE_INTEGER tick_count; ULONG myinc = KeQueryTimeIncrement(); // 获取滴答数 KeQueryTic…
<Windows内核安全与驱动开发>阅读笔记 -- 索引目录 <Windows内核安全与驱动开发> 4.4 线程与事件 一.开辟一个线程,参数为(打印内容+打印次数),利用线程实现打印.(申请堆内存防止栈清空) #include <ntifs.h> typedef struct { int num; UNICODE_STRING str; }MyContext, * PMyContext; static KEVENT event; // 全局变量中定义一个事件 /* 函…