Chinaunix首页 | 论坛 | 博客
  • 博客访问: 41951
  • 博文数量: 21
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 230
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-11 18:55
文章分类
文章存档

2013年(1)

2011年(2)

2010年(18)

我的朋友

分类: WINDOWS

2010-11-11 19:05:32

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(原文这里写错了,应该改为sources,编译不通过的童鞋注意一下哈)文件如下:

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。

阅读(1117) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-11-12 17:19:23

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com