160楼#
发布于:2002-10-25 11:41
set SDKROOT=C:\\95SDK
call new-vars.bat (MASM611的环境) call ddkenv.bat (DDK的环境) call vcvars32.bat (VC++的环境) |
|
161楼#
发布于:2002-10-25 11:42
有的DDK里面没有DDKENV.bat的批处理,如果你的DDK是CD版的,请注意保存DDK自带的DDKENV.bat,否则需要自建。DDKENV.bat内容如下: set DDKROOT=e:\\95ddk |
|
162楼#
发布于:2002-10-25 11:42
set LIB=%LIB%;%DDKROOT%\\LIB 有的DDK里面没有DDKENV.bat的批处理,如果你的DDK是CD版的,请注意保存DDK自带的DDKENV.bat,否则需要自建。 |
|
163楼#
发布于:2002-10-25 11:43
3.NT DDK的安装
需要准备下列软件:WIN32 SDK或者PLATFORM SDK、NT DDK、VC++ 5.0。具体安装步骤如下: (1)安装Win32 SDK或者PLATFORM SDK到C:\\MSTOOLS。 (2)如果是安装PLATFORM SDK,安装完成后请修改注册表: |
|
164楼#
发布于:2002-10-25 11:43
HKEY_CURRENT_USER\\Environment ,添加一个“MSTOOLS”字符串,值为C:\\MSTOOLS。
(3)安装VC++ 5.0。 (4)安装NT DDK到C:\\NTDDK。 |
|
165楼#
发布于:2002-10-25 11:43
构造环境
下面以Windows 98驱动程序构造环境为例介绍建立WDM驱动程序构造环境的方法。 1. 用SETENV.bat来安装驱动程序构造环境 |
|
166楼#
发布于:2002-10-25 11:44
创建一个名为“Development Kits\\Windows 98 DDK”的程序目录。这个目录包括自由构造环境项和检查构造环境项。每次重启操作系统,在构造驱动程序前,单击这些程序文件夹中合适的一项。这些项调用%98DDK%\\BIN里的Setenv.bat批处理文件来创建正确的环境变量的驱动程序构造环境。
|
|
167楼#
发布于:2002-10-25 11:44
2. 手工运行SETENV.bat
在MS-DOS提示符下,或在“开始/运行”中使用下列语句: setenv %98DDK% [free | checked] 例如,在C:\\98ddk\\bin〉提示符下,键入setenv C:\\98ddk free,其中第一个参数指定DDK被安装的文件夹,注意就缺省的安装来说,目的地是\\98ddk;可选的第二个参数说明目标构造环境,缺省类型是free。 |
|
168楼#
发布于:2002-10-25 11:44
使用一套规则以指定驱动程序怎样被创建,所构造的实用程序可用来在Windows 98和Windows NT上建造WDM驱动程序平台。 在Windows 98 DDK被安装之后,WDM驱动程序构造树的工作例子和组成部分文件在硬盘上就可以得到了。 |
|
169楼#
发布于:2002-10-25 11:45
驱动程序构造树根目录在%98DDK%\\src。查看%98DDK%\\inc里Makefile.def文件的内容,以及贯穿驱动程序构造树的各种的Dirs文件和源文件的内容,可以利用这些代码作为工作实例。
|
|
170楼#
发布于:2002-10-25 11:45
WDM驱动程序设计:基础知识篇、环境构造篇、设计开发篇、编译安装篇。
WDM驱动程序设计之设计开发篇 |
|
171楼#
发布于:2002-10-25 11:45
通过安装DDK和相应的开发软件,我们构造好了WDM驱动程序的开发环境。接着,我们就要深入进行设计与开发工作了。
|
|
172楼#
发布于:2002-10-25 11:46
设计一个设备驱动程序,应该支持和其他相同类型设备的NT驱动程序相同的IRP_MJ_XXX和IOCTL请求代码。如果设计一个中间层NT驱动程序,应该首先确认下层驱动程序所管理的设备,因为一个高层的驱动程序必须具有低层驱动程序绝大多数IRP_MJ_XXX例程入口。高层驱动程序在接到I/O请求时,在确定自身IRP
|
|
173楼#
发布于:2002-10-25 11:46
当前堆栈单元参数有效的前提下 ,设置好IRP中下一个低层驱动程序的堆栈单元,然后再调用IoCallDriver将请求传递给下层驱动程序处理。一旦决定好了驱动程序应该处理哪些IRP_MJ_XXX,就可以开始确定驱动程序应该有多少个Dispatch例程。当然也可以考虑把某些RP_MJ_XXX处理的例程合并为同一例程处理。例如在ChangerDisk和VDisk里,对IRP_MJ_CREATE和IRP_MJ_CLOSE处理的例程就是同一函数。
|
|
174楼#
发布于:2002-10-25 11:47
一个驱动程序必须为它所管理的每个可能成为I/O请求的目标的物理和逻辑设备创建一个Device对象。一些低层的驱动程序还可能要创建一些不确定数目的Device对象。例如一个硬盘驱动程序必须为每一个物理硬盘创建一个Device对象,同时还必须为每个物理磁盘上的每个逻辑分区创建一个Device对象。
|
|
175楼#
发布于:2002-10-25 11:48
驱动程序开发
驱动程序的开发是一个从粗到细逐步求精的过程。NT DDK的src\\目录下有一个庞大的模板代码,几乎覆盖了所有类型的设备驱动程序、高层驱动程序和过滤器驱动程序。在开始开发驱动程序之前,应该先在这个样板库下面寻找是否有和所要开发的类似类型的例程。 |
|
176楼#
发布于:2002-10-25 11:48
(1)首先编写一个DriverEntry例程,并在该例程里调用IoCreateDevice来创建一个Device对象。 (2)写一个处理IRP_MJ_CREATE请求的Dispatch例程的基本框架。如果驱动程序创建了多于一个的Device对象,则必须为IRP_MJ_CLOSE请求写一个例程,该例程通常情况下可以和DispatchCreate共用一个例程。 |
|
177楼#
发布于:2002-10-25 11:49
(1)首先在系统中安装好驱动程序,具体编译安装驱动程序请见下版的《编译安装篇》。
|
|
178楼#
发布于:2002-10-25 11:49
(2)为NT逻辑设备名称和目标Device对象名称之间建立起符号连接,在前面已经知道Device对象名称对Win32用户模式是不可见的,是不能直接通过API来访问的,Win32 API只能访问NT逻辑设备名称。可以通过修改注册表来建立这两种名称之间的符号连接。运行Regedt32.exe在\\HKEY_LOCAL_MACHINE\\ System\\
|
|
179楼#
发布于:2002-10-25 11:49
CurrentControlSet\\ Control\\ Session Manager\\ DOS Devices下建立起符号连接,这种符号连接也可以在驱动程序里调用函数IoCreateSymbolicLink来创建。
|
|