因为大部分 Windows驱动程序都是内核程序,所以这个总结,不区分“驱动编程”与“内核编程” 。同时,也不区分“内核模块”与“驱动程序” 。这两个词汇编译出的.sys 可执行文件。专注于较通用的内核程序的开发,并不介绍针对某种类硬件的,比如声卡、显卡、USB 等的等各种驱动程序的开发。
参考资料:
《寒江独钓:Windows内核编程与信息安全》
《天书夜读-从汇编语言到Windows内核编程》
《竹林蹊径:深入浅出Windows驱动开发》
《Windows驱动开发技术详解》
郁金香驱动视频教程
环境配置:
1、安装Visual Studio 2008
2、win7-32位系统(64位的据说不适合内核编程,xp的话,资料比较多,我习惯用win7了)
3、安装VC助手(Visual Assist X),功能强大,找个破解版就好了
4、安装windows驱动开发包 WDK,xp系统的话就是DDK了
有些读者可能听说过 DDK 或者 IFSDDK。但是那已经是历史了,下
面的描述也可能成为历史,所以请读者进入网页后灵机应变。
首先请打开网页:
这个网页必须首先登录。可以用msn帐号,请点击那个红色圈圈住的“查看所有站点” 。 下面就比较简单了,左边会显示类别。类别中请选择“开发人员工具” 。 如果没有,可以去免费注册一个。
WDK已经自带所有的需要的头文件、库、C/C++语言以及汇编语言的编译器与连接器。所以完全可以在不安装Visual Studio 的情况下进行编程。
安装过程没有什么需要特别注意的地方,只有两点:
(a) 安装到一个简单一点的路径,避免特殊情况需要配置路 C:\WinDDK。
(b) 一定要选择“完全安装” 。否则可能错过一些代码例子。
配置好环境,来测试一下:
文件1:first.txt
//first.c #include <ntddk.h>// 提供一个Unload函数只是为了动态卸载,方便调试VOID DriverUnload(PDRIVER_OBJECT driver){// 只打印一句话:DbgPrint("first: Our driver is unloading…\r\n");}
// DriverEntry,入口函数。相当于main。NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path){DbgPrint("first: Hello, windows driver!");// 设置一个卸载函数便于这个函数能退出。driver->DriverUnload = DriverUnload;return STATUS_SUCCESS;}
文件2:makefile,这个文件内容不能改变
!IF 0
Copyright (C) Microsoft Corporation, 1999 - 2002
Module Name:
makefile.
Notes:
DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new sourcefile to this component. This file merely indirects to the real make filethat is shared by all the components of Windows NT (DDK)
!ENDIF
!INCLUDE $(NTMAKEENV)\makefile.def
文件3:sources
TARGETNAME=firstTARGETTYPE=DRIVERSOURCES=first.c
说明:
其中 TARGETNAME 是名字。编译出来之后,模块的名字为 first.sys。SOURCES 表
示要编译的.c 文件。 (对于初学者,必须提醒一点不要加入.h 文件。因为.h 是被包含在.c
文件中编译的。 )如果.c文件有多个,请用空格分隔。 在win7环境下,source文件中有
TARGETPATH=obj有时候会出错
,不知道什么原因
这样的结果是出现一个控制台。这个控制台已经配置好编译环境。现在请不断的输入cd 命令来进入我们先建立的 first 目录。进入之后,敲入 build。作者本人这里测试的结果如下:
第一回完。