Windows 驱动开发笔记(二)

Windows 驱动开发笔记(二)
上面是一些感念的理解。现在想讲一下Windows 驱动的执行过程。
驱动程序是被动的。一切的执行要通过系统的指挥。那么,我们看看系统是怎么管理你的驱动的。
驱动加载(一):
BOOT开始->注册表项目->加载XXX.SYS驱动->执行入口函数DriverEntry(...)->完成加载。
系统在BOOT时要检查注册表。(也可能不是在BOOT时加载驱动,可以是手工加载)然后根据注册表的项目来加载你的驱动程序。所以,驱动程序在安装时要写注册表的。不然,你的驱动是不能被发现的。在找到XXX.SYS驱动后,就去调用它的DriverEntry(...)函数。完成各种注册任务。这样,你的各种功能就被挂到系统了。
用户调用(二):
fopen->Windows API(Kenel32.dll,ReadFile)->Ntdll.dll API(NtReadFile)->内核模式I/O管理器生成一个IRP->I/O管理器调用,驱动函数->返回
在你的驱动加载好以后,你的各种功能就等着系统来调用了。(为什么不是用户呢?:慢慢看!)。假设有一个应用app.exe要调用一个系统功能。app.exe首先通过Windows api函数这个函数,再调用更底层的函数。然后进入内核模式。I/O管理器根据你的调用内容生成一个IRP对象(也可以叫变量,任务列表)。把这个IRP放入一个队列中。以后的调度程序工具用这个IRP记载你的各种操作情况。依据任务列表去调用各种驱动功能函数。系统根据察看到IRP的各种执行结果来决定各种操作。用户的调用成功与否完全根据这个IRP的纪录。I/O管理器根据IRP来填充各种返回信息。用户的调用结果被WINDOWS API包装后返回给用户的调用。可能,觉得这些操作不是一次完成的!对了,不要忘记WIndows是一个多任务的操作系统。
为了由个初步的认识和感觉我们就做个Hello World驱动来看看吧!
这个驱动是网上的前辈写的。本人实在是不知道前辈大名。特别予以声明。在此,致敬!
文件名 hello.c
/****************************************************************
Hello,World驱动。一个简单demo
****************************************************************/
#include <ntddk.h>
NTSTATUS
/***************************************************************
函数名称:DriverEntry()
功能描述:程序入口
***************************************************************/
DriverEntry (
    IN PDRIVER_OBJECT DriverObject,
    IN PUNICODE_STRING RegistryPath
    )
{
    DbgPrint(("Hello World!/n"));/* 调试信息*/
    return STATUS_SUCCESS;
}

文件名 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

TARGETNAME=hello
TARGETPATH=obj
TARGETTYPE=DRIVER


SOURCES=hello.c

建个目录 HelloDRV 把三个文件放入其中。进入DDK环境Checked Build Environment。
转到该目录下去。键入 build 编译。完成后会产生一个 objchk_w2k_x86 目录。找到Hello.sys文件。这就是你的成果了。将hello.sys靠到
Windows/System32/drivers下。
下一步就是安装了。如果是用INF来安装步骤很麻烦。现在,直接写注册表就可以安装了。
建立一个文件 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:00000003

"Type"=dword:00000001

双击Hello.reg执行。。可以,用regedit看看结果。察看这个值[HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/hello]
下载一个工具debugview。这个工具是免费的。
启动机器。执行debugview。 注意选择capture kernel的选项是选择的。
进入命令行。执行
net start hello
就可以从debugview看到hello,world了。这个,程序就是一个驱动。可以做任何事情。


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Windows驱动开发技术详解(含光盘1张) 作者:张帆 等编著出版社:电子工业出版社出版时间:2008年07月 编辑推荐 原创经典,威盛一线工程师倾力打造。深入驱动核心,剖析操作系统底层运行机制,通过实例引导,快速学习编译、安装、调试的方法。   从Windows*基本的两类驱动程序的编译、安装、调试入手讲解,非常容易上手,用实例详细讲解PCI、USB、虚拟串口、虚拟摄像头、SDIO等驱动程序的开发,归纳了多种调试驱动程序的高级技巧,如用WinDBG和VMWARE软件对驱动进行源码级调试,深入Windows操作系统的底层和内核,透析Windows驱动开发的本质。 本书是作者结合教学和科研实践经验编写而成的,不仅详细介绍了Windows内核原理,而且介绍了编程技巧和应用实例,兼顾了在校研究生和工程技术人员的实际需求,对教学、生产和科研有现实的指导意义,是一本值得推荐的专著。              ——中国工程院院士   院士推荐   目前,电子系统设计广泛采用通用操作系统,达到降低系统的设计难度和缩短研发周期。实现操作系统与硬件快速信息交换是电子系统设计的关键。   通用操作系统硬件驱动程序的开发,编写者不仅需要精通硬件设备、计算机总线,而且需要Windows操作系统知识以及调试技巧。学习和掌握Windows硬件驱动程序的开发是电子系统设计人员必备的能力。   本书是作者结合教学和科研实践经验编写而成的,不仅详细介绍了Windows内核原理,并且介绍了编程技巧和应用实例,兼顾了在校研究生和工程技术人员的实际需求,对教学、生产和科研有现实的指导意义,是一本值得推荐的专著。 内容简介 本书由浅入深、循序渐进地介绍了Windows驱动程序的开发方法与调试技巧。本书共分23章,内容涵盖了Windows操作系统的基本原理、NT驱动程序与WDM驱动程序的构造、驱动程序中的同步异步处理方法、驱动程序中即插即用功能、驱动程序的各种调试技巧等。同时,还针对流行的PCI驱动程序、USB驱动程序、虚拟串口驱动程序、摄像头驱动程序、SDIO驱动程序进行了详细的介绍,本书*的特色在于每一节的例子都是经过精挑细选的,具有很强的针对性。力求让读者通过亲自动手实验,掌握各类Windows驱动程序的开发技巧,学习尽可能多的Windows底层知识。   本书适用于中、高级系统程序员,同时也可用做高校计算机专业操作系统实验课的补充教材。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值