寒江独钓[试读]
关于本书作者和贡献者
主要作者: 谭文,C程序员。1980年生于湖南。2002年毕业于西安交通大学自动控制系。毕业后一直从事各类系统底层软件的开发设计工作;目前在英特尔在上海紫竹科技园的研发中心参与不同平台二进制指令动态翻译系统的项目开发。爱好聊天、发帖。曾著有《天书夜读——从汇编语言到Windows内核编程》一书。编写本书的第1~3,7,8,10~12章,并统稿全书。 杨潇,C程序员。1981年生于陕西。2006年毕业于西安交通大学自动控制研究所。一直从事各类系统软硬件接口部分的开发设计工作;目前在Comodo北京研发中心任职,负责各类Windows/Linux相关驱动的开发。爱好音乐、旅游和摄影。负责编写本书的... 查看全部[ 关于本书作者和贡献者 ]
前言
本书是一本专门介绍实时扫描的防毒软件、虚拟磁盘、硬盘还原、硬盘加密、文件系统保护、文件透明加密、防火墙、密码输入保护等软件的Windows内核模块的具体实现方法的编程技术书。本书的目的是使读者能够用C语言编写这些核心模块。 大学的时候,在Windows平台上我最初学的是VB,然后是Delphi。我的感觉是,无论想实现任何功能,都早已有工具的开发者给我们准备了良好的接口和文档,让我们学习和使用都非常的方便。因此觉得自己已经学到了终点。如果仅从“能实现功能”的角度讲,我没有必要再学习了,剩下的事情,只是去很舒适地使用那些接口就可以了。那又何必再学习Windows编程呢? 工作之后遇到了障碍。我的第... 查看全部[ 前言 ]
阅读注意
如何阅读本书 请注意,本书基本上不可以跳读。虽然书中的内容是按照应用的领域进行划分,但是并没有采用一种分类介绍所有基础知识,然后分各个领域介绍的模式。而是从简单的应用到复杂的应用依次进行的。 本书首先最简单地介绍了串口的过滤,然后是键盘的过滤(用于密码保护)。先介绍这些内容是因为它们在驱动中最简单。但是并不是意味着只关心网络过滤的读者,可以跳过它们,直接翻到NDIS中间层驱动的章节进行阅读。 本书所有的章节内容,采用的都是基于WDK的C语言编程。在编程方法上是统一而且一脉相承的。对于所有的内核API函数的介绍、特殊名词、基础概念的说明,本书都是在具体范例中,第一次出现时做详细的介绍,并举出例子... 查看全部[ 阅读注意 ]
目录 1
第1章 内核上机指导 1 Windows内核编程的动手有点麻烦,并不是仅仅安装一个独立的软件(比如VC)之后就可以安然地开始编写代码,然后运行了。需要下载开发包、配置开发环境、准备调试工具,可能还需要一些小工具协同工作。这一步拦住了不少的初学者。本章以详细图文攻略,来引导读者完成这一麻烦的步骤。 1.1 下载和使用WDK 2 1.1.1 下载安装WDK 2 1.1.2 编写第一个C文件 3 1.1.3 编译一个工程 5 1.2 安装与运行 6 1.2.1 下载一个安装工具 6 1.2.2 运行与查看输出信息 7 1.2.3 在虚拟机中运行 9 1.3 调试内核模块 9 1.3.1 下载和安装W... 查看全部[ 目录 1 ]
目录 2
5.4.1 EvtDriverDeviceAdd的定义 104 5.4.2 局部变量的声明 105 5.4.3 磁盘设备的创建 105 5.4.4 如何处理发往设备的请求 107 5.4.5 用户配置的初始化 108 5.4.6 链接给应用程序 110 5.4.7 小结 111 5.5 FAT12/16磁盘卷初始化 111 5.5.1 磁盘卷结构简介 111 5.5.2 Ramdisk对磁盘的初始化 113 5.6 驱动中的请求处理 119 5.6.1 请求的处理 119 5.6.2 读/写请求 120 5.6.3 DeviceIoControl请求 122 5.7 Ramdisk的编译和安装... 查看全部[ 目录 2 ]
目录 3
8.8.3 crypt_file的IRP后处理 269 本章的示例代码 272 练习题 272 第9章 文件系统微过滤驱动 273 从来都不原地踏步的微软,早就准备好了下一代的文件系统过滤的框架、文档、代码例子。虽然本书的前两章的范例在Windows 7上都还可以正常运行,但是如果不学习一下最新的接口,读者一定会觉得不自在。但是读者可以放心,在前面学习的基础上,了解新的接口是易如反掌的。 9.1 文件系统微过滤驱动简介 274 9.1.1 文件系统微过滤驱动的由来 274 9.1.2 Minifilter的优点与不足 275 9.2 Minifilter的编程框架 275 9.2.1 微文件系... 查看全部[ 目录 3 ]
1.1.1 下载安装WDK
就像应用程序使用开发包SDK一样,内核编程使用“Windows Driver Kit”,简称WDK。WDK已经自带所有需要的头文件、库、C/C++语言及汇编语言的编译器与连接器,所以完全可以在不安装Visual Studio的情况下进行编程。只是工程管理会不太方便,读者可以使用记事本或者自己喜欢的其他文本编辑器进行编程。习惯使用Visual Studio的读者会感觉这很酷,因为只有传说中的骨灰级程序员才使用记事本编程。 建议读者下载一个能显示行号的文本编辑器。以便出现编译错误时能迅速找到错误。Linux爱好者当然可以直接用vim。 有些读者可能听说过DDK或者IFSDDK,但是那已经是历史了,... 查看全部[ 1.1.1 下载安装WDK ]
1.1.2 编写第一个C文件
现在请打开记事本(或者读者喜欢的任何工具)来创建一个文件,我们把这个文件命名为first.c,以表示这是我们编写的第一个内核编程文件。在进行内核编程时,读者必须打开WDK的帮助。在WDK安装之后,单击“开始”菜单→“所有程序”,会发现增加了“Windows Driver Kits”和“Windows Driver Kits Documentation”两个子菜单。(注:最新版本这两个菜单已经合并为一个。) 选择“Windows Driver Kits Documentation”下面的子菜单来打开帮助。在使用任何一个函数之前,请在帮助里查询这个函数是否存在、使用的环境要求及输入/输出。 因为这... 查看全部[ 1.1.2 编写第一个C文件 ]