您的位置:首页 > 其它

第一章 Windows设备驱动程序设计Hello World

2015-03-17 11:47 465 查看
Hello World是程序设计的经典,几乎所有的语言教学都以此为开头。本教程也借此开篇。
先看看C的Hello World:

int main()

{

    printf("Hello World!\n");

    return 0;

}

把它存为hello.c,用VC或者gcc hello.c就可以生成执行文件,运行执行文件就可以看到结果。
驱动程序的Hello World来的稍微复杂一点。
驱动程序的入口函数是DriveEntery.所以最简单的WDM驱动代码如下:

NTSTATUS

DriverEntry (

    IN PDRIVER_OBJECT DriverObject,

    IN PUNICODE_STRING RegistryPath

    )
{

    DbgPrint(("Hello World!\n"));

    return STATUS_SUCCESS;
}

要编译,运行并且看到这个Hello World的结果就要麻烦一些了。首先你得有(Driver Develpment Kit)DDK,可以到网上下载,或者买光盘。DDK里面提供了丰富的例子,一般的驱动程序,可以参考DDK里面的例子。

将文件存为hello.c, 当然前面先要include ddk的头文件:

#include
<ntddk.h>

要编译这个文件,需要建一个make文件和resource文件。在ddk里面,make文件可以都一样。

makefile的内容应该是如下:

#
# DO
NOT EDIT THIS Edit
.\sources.
if you want to add a
new source
# file to
this component.
This file merely indirects to the
real make file
# that is shared by all the driver components of the Windows NT DDK
#

!INCLUDE $(NTMAKEENV)\makefile.def

一般不要更改这个文件,如果要加入源文件应该编辑sources文件。

简单的source文件如下:

TARGETNAME=hello

TARGETPATH=obj

TARGETTYPE=DRIVER

SOURCES=hello.c

有了这3个文件就可以编译出驱动程序hello.sys了。

首先进入编译环境,开始->Development Kits->DDK XXXX->build enviorenments->windows XP->Windows XP Checked Build Environment.

进入这三个文件的存放目录,执行build。编译完成后,目录下产生了objchk_wxp_x86\i386,下面有个文件hello.sys,这就是我们第一步的成果了。

如何才能看到运行的结果呢?我们需要把这个驱动程序加载到操作系统中。最简单的加载办法是通过写注册表。这里有个.reg的文件,帮助修改注册表,也可以手动来修改。hello.reg如下:
 
REGEDIT4
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\hello]

"ErrorControl"=dword:00000001

#
# When to start the driver:
# At boot: Start=1
# Manually: Start=3
#
"Start"=dword:00000001

"Type"=dword:00000001

把我们编译好的hello.sys拷贝到系统的驱动程序目录下C:\WINDOWS\system32\drivers,然后重新启动操作系统,这个驱动就可以在启动的时候被加载了。要看到Hello World!可以按照debugview这个软件,这是简单好用的驱动调试工具,它可以显示DbgPrint打印出来的log。要选择debugview的capture菜单里面的log boot,可以buffer操作系统boot的时候的log。

重启之后可以从debugview里面看到log。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: