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

来源:互联网 发布:双11实时数据直播视频 编辑:程序博客网 时间:2024/05/22 14:27
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。

原创粉丝点击