第一章 Windows设备驱动程序设计Hello World
2015-03-17 11:47
465 查看
Hello World是程序设计的经典,几乎所有的语言教学都以此为开头。本教程也借此开篇。
先看看C的Hello World:
把它存为hello.c,用VC或者gcc hello.c就可以生成执行文件,运行执行文件就可以看到结果。
驱动程序的Hello World来的稍微复杂一点。
驱动程序的入口函数是DriveEntery.所以最简单的WDM驱动代码如下:
要编译,运行并且看到这个Hello World的结果就要麻烦一些了。首先你得有(Driver Develpment Kit)DDK,可以到网上下载,或者买光盘。DDK里面提供了丰富的例子,一般的驱动程序,可以参考DDK里面的例子。
将文件存为hello.c, 当然前面先要include ddk的头文件:
要编译这个文件,需要建一个make文件和resource文件。在ddk里面,make文件可以都一样。
makefile的内容应该是如下:
一般不要更改这个文件,如果要加入源文件应该编辑sources文件。
简单的source文件如下:
有了这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如下:
把我们编译好的hello.sys拷贝到系统的驱动程序目录下C:\WINDOWS\system32\drivers,然后重新启动操作系统,这个驱动就可以在启动的时候被加载了。要看到Hello World!可以按照debugview这个软件,这是简单好用的驱动调试工具,它可以显示DbgPrint打印出来的log。要选择debugview的capture菜单里面的log boot,可以buffer操作系统boot的时候的log。
重启之后可以从debugview里面看到log。
先看看C的Hello World:
int main() { printf("Hello World!\n"); return 0; } |
驱动程序的Hello World来的稍微复杂一点。
驱动程序的入口函数是DriveEntery.所以最简单的WDM驱动代码如下:
NTSTATUS DriverEntry ( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ) { DbgPrint(("Hello World!\n")); return STATUS_SUCCESS; } |
将文件存为hello.c, 当然前面先要include ddk的头文件:
#include <ntddk.h> |
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 |
简单的source文件如下:
TARGETNAME=hello TARGETPATH=obj TARGETTYPE=DRIVER SOURCES=hello.c |
首先进入编译环境,开始->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 |
重启之后可以从debugview里面看到log。
相关文章推荐
- 第一章 Windows设备驱动程序设计Hello World
- [转载]windows过滤驱动程序设计入门(驱动程序基本结构,设备栈,IRP栈和工作原理)
- windows过滤驱动程序设计入门(驱动程序基本结构,设备栈,IRP栈和工作原理)
- 32位Windows操作系统下WDM型USB设备驱动程序设计
- 解决非驱动签名缺失情况下的“Windows 无法验证此设备所需的驱动程序的数字签名”问题
- Linux设备驱动程序,个人学习,第一个模块hello world
- windows 2000/xp WDM设备驱动程序开发 (1)
- linux字符设备驱动程序设计概述
- Linux设备驱动程序设计实例
- 解决win7下无法安装突击者NO.69驱动,“WINDOWS已找到设备的驱动程序,但在试图安装它时错误”
- 第一章 设备驱动程序简介
- Windows 2000内核模式驱动程序设计
- 【Linux 驱动】第一章 设备驱动程序简介
- Windows 驱动程序设计(一)
- 向Windows 7安装镜像添加设备驱动程序
- USB设备的Bulk模式驱动程序设计
- Windows 2000驱动程序的设计
- WindowsCE.Net下CAN卡的驱动程序设计
- windows WDM驱动程序设计
- [DEV] 虚拟设备驱动程序的设计与实现