网站大量收购闲置独家精品文档,联系QQ:2885784924

windows设备驱动程序.pptx

  1. 1、本文档共27页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
windows设备驱动程序课案

;;;1 驱动开发环境的搭建;关于DDK;“.sys”文件,同时还需要自己编写 makefile 和 sources 文件。 对于使用 VC 开始学习编程的人们来说,makefile 概念有点可能有点陌生。实际上VC 本身只是个框 架,“编译”这个工作还是由一个名为“cl.exe”的命令行工具执行的,VC 不过是通过一个良好的界面帮我们完成了一些参数设置的工作。 使用 VC 来编译驱动程序是可行的。 VC6.0 到新的 VS2008 都没有被遗漏。 使用 EasySys 这个小工具,可以通过简单的设置生成一个完整的“.dsw”工程。;关于驱动程序的运行;2 驱动程序结构; NT式驱动需要导入的头文件是“ntddk.h”,而WDM式驱动需要导入的“wdm.h”,即:#include“ntddk.h”;。在驱动中用到的变量或函数都需要指定分配在分页或非分页内存中,分页内存在物理内存不够的情况下可能会被交换出去,对于一些需要高IRQL的例程绝对不能被交换出页面,因此它们必须被定义为非分页内存。通常来说在驱动程序的自定义头文件中都是定义了一些宏或函数声明。;驱动程序入口点;;创建设备历程;卸载驱动例程是我们在 DriverEntry 中自己定义的,当驱动被卸载时 I/O 管 理器负责调用该例程,它主要做一些扫尾处理的工作。 相关代码如下所示: UNICODE_STRINGdosDeviceName; // 释放其他资源 // 删除符号链接 RtlInitUnicodeString(dosDeviceName,TEST_DOS_DEVICE_NAME_W); IoDeleteSymbolicLink(dosDeviceName); // 删除设备对象 IoDeleteDevice(DriverObject-DeviceObject); KdPrint(([Test]Unloaded)); 要想输出一些信息,就需要调用 DbgPrint 函数,不过这个函数输出的信息我们无法直接看到,需要使用一些专门的工具,比如 DbgView 等。 有些内容我们只想在调试版输出,在发行版忽略,因此 DDK 中定义了一个宏 KdPrint,它在发行版不被编译,只在调试版才会运行。KdPrint 的用法很奇怪, 由于它的定义:#defineKdPrint(_x_)DbgPrint_x_,这就导致了它的用法很奇怪,在使用时外层要有两个 连续的括号。 ;编写驱动程序的基础知识;内核模式下的字符串操作;Unicode 字符串有一个结构体定义如下: typedefstruct_UNICODE_STRING{ USHORTLength; // 字符串的长度(字??数) USHORTMaximumLength; // 字符串缓冲区的长度(字节数) PWSTR Buffer; // 字符串缓冲区 }UNICODE_STRING,*PUNICODE_STRING; 需要注意的是,当我们定义了一个UNICODE_STRING变量之后,它的Buffer 域还没有分配空间,因此我们不能直接赋值,好的做法是使用微软提供的 Rtl 系列函数。 UNICODE_STRINGstr; RtlInitUnicodeString(str,Lmyfirststring!); 或者如下所示: #includentdef.h UNICODE_STRINGstr=RTL_CONSTANT_STRING(Lmyfirststring!); UNICODE 字符串并不是以“\0”来表示字符串结束的,而是依靠 UNICODE_STRING 的 Length 域来确定。 ;在驱动开发的过程中,可能遇到很多不同开头的函数,如前面遇到过的 Rtl 和 Io 系列,此外还有比如 Ex、Ps、Nt 等等。常见的函数开头及其含义如下表所示。 ;NativeAPI 从用户模式穿越进入到内核模式调用系统服务,这个穿越过程是通过软中断的方式进入的。这个软中断的实现方法在不同版本的 Windows 实现方式略有不同,在 Win2K 下是通过“int2eh”实现的,在 WinXP 是通过“sysenter” 指令完成的。 软中断会将 NativeAPI 的参数和系统服务号的参数一起传进内核模式,不同的 Native API 会对应不同的系统服务号,这个过程是由 SSDT 辅助完成的。 系统服务函数一般和 NativeAPI 具有相同的名字,例如都是 NtCrea

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档