windows驱动学习之hello world

windows驱动学习之hello world

2007年11月24日

从今天开始本人要记录下学习驱动的过程。主要目的是给自己以后提供复习的资料。
学习驱动的目的原因很多:一是没有办法,人家让学你就得学,不学就没有工作了,所以硬着头皮也要学。在此基础上给自己一个合理的安慰,那就是学习驱动的人不多,听说学好了也能赚很多钱,所以也给自己学习的动力。

开始了。。。。。。。。。。。。

1。到网上查查人家是怎么学的,是怎么写的。找到应该看得书籍记录如下:


《C程序设计》(第二版)                     清华大学出版社                 谭浩强
《Windows 2000内部揭密》             机械工业出版社                (美)Mark E.Russinovich著 詹剑锋等译
《Microsoft Windows 驱动程序模型设计》 北京大学出版社             Microsoft公司
《Windows 2000设备驱动程序设计指南》 机械工业出版社             [美]Art Baker,Jerry Lozano著 施诺等译
《WINDOWS NT与WINDOWS 2000设备驱动及开发》 电子工业出版社 [美]Peter G.Viscarola等著 新智工作室译
《WINDOWS WDM设备驱动程序开发指南》             机械工业出版社           [美]Chris Cant 译:孙义 马莉波 国雪飞
《Windows设备驱动程序(VxD与WDM)开发实务》 电子工业出版社         武安河,周利莉
《Windows 核心编程》
《LINUX设备驱动程序》(第二版)           中国电力出版社          ALESSANDRO RUBINI等著 魏永明等译
《Microsoft Windows 2000驱动程序设计指南》(影印版)     北京大学出版社          Microsoft公司
《VC++.NET开发驱动程序详解 ——Windows 2000/XP》      北京希望电子出版社              郭益昆
电子书如下:
《Windows Driver Model》                          Walter Oney著     马少华译
《驱动程序超级宝典》                             翟洪涛
《The Windows 2000 Device Driver Book》       英文版

2。第一步资料已经差不多收集齐全了,那就开始看吧。在看的同时一定要动手写代码。那么我们就开始写第一个HelloWorld程序吧。

  
在写代码之前要把程序编译环境构建起来。
需要的环境:WinXP、WinXP DDK(上网下一个然后安装)

1). 新建一个hello.C文件,把如下代码复制进去。
#include <ntddk.h>
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
{
        DbgPrint("Hello World!/n");
         return STATUS_SUCCESS;
}


2).          程序写完了,开始编译:
在你安装的WinXP DDK 的src文件夹下找一个makefile文件复制到你的程序目录里,然后再新建一个名叫sources的文件,这个文件指明了要编译那些文件和驱动类型。
Sources文件格式如下:
Targetname=hello;驱动名称;
TARGETPATH=obj;目标文件输出路径;
TARGETTYPE=DRIVER
SOURCES=hello.c/               指定将要用到的所有源文件,每个文件一行
               Hello2.c/             (如果有第二个文件)
               Hello3.c              (如果有第三个文件)


Sources文件写好了。开始编译。从开始菜单的Development Kits->Windows ddk 2006->BuildEnvironments-> Win XP Checked Build Environment 进入DOS模式。
然后从这里进入你的工作目录(hello.c所在的目录) ,然后键入build –c 命令。看看你的工作目录(hello.c所在的目录)是不是多了两个文件obj文件就是sources中TARGETPATH的值。还有objfre这个文件,里面会有一个.sys文件,这就是我们最终要的驱动文件。把这个.sys文件拷贝到系统目录下(具体是:system32/drivers/)

3).           驱动文件编译完成了,下面开始加载这个驱动。
需要在注册表中写个服务来加载这个驱动,
HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services
在上面的目录下新建一项 名字叫hello
在hello中添加如下键值:
ImagePath=systam32/drivers/hello.sys          (类型是REG_EXPAND_SZ)
DisplayName=驱动名称(随便写)                  (类型是REG _SZ)
ErrorControl=1                                 (类型是REG_DWORD)
Start=3                                                                    (类型是REG_DWORD)
Type=1                                                                    (类型是REG_DWORD)

服务写好了以后,重启电脑!

4).现在开始启动服务了。
                 这是就需要一个工具来观察驱动运行的结果,工具叫:Dbgview.exe
首先打开Dbgview.exe,然后运行cmd进入命令行,运行 net start hello,这时在Dbgview.exe中可以看到helloWorld。

PS:感谢作者的文章,从CSDN COPY来的,不错

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/hello]
"ImagePath"=hex(2):73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,64,00,/
   72,00,69,00,76,00,65,00,72,00,73,00,5c,00,68,00,65,00,6c,00,6c,00,6f,00,2e,/
   00,73,00,79,00,73,00,00,00
"DisplayName"="hello"
"ErrorControl"=dword:00000001
"Start"=dword:00000003
"Type"=dword:00000001

[HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/hello/Enum]
"Count"=dword:00000001
"NextInstance"=dword:00000001
"INITSTARTFAILED"=dword:00000001
"0"="Root//LEGACY_HELLO//0000"
第一项是要加的,后面那项是调用驱动后自动写进注册表的

 

引自:  http://hcup.blogbus.com/logs/10995648.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值