180楼#
发布于:2002-10-25 11:50
(3)完成以上所有的设置并检查无误后,我们必须重新启动Windows系统。
|
|
181楼#
发布于:2002-10-25 11:50
(4)编写一个简单的测试程序调用Win32 API中的CreateFile函数,并以刚才命名的NT逻辑设备名打开这个设备。如果打开成功,则成功地写出了一个最简单的驱动程序了。支持更多的设备I/O请求,例如驱动程序可能需要对IRP_MJ_READ请求做出响应(完成后可用ReadFile 函数进行测试)。如果驱动程序需要能够手工卸载,那么还必须对IRP_MJ_CLOSE做出响应。为所需要处理的IRP_MJ_XXX写好处理例程,并在DriverEntry
|
|
182楼#
发布于:2002-10-25 11:50
里面初始化好这些例程入口。一个低层的驱动程序需要一个StartIo、ISR和DpcForIsr例程,可能还需要一个SynchCritSection例程,如果设备使用了DMA,那么可能还需要一个AdapterControl例程。
|
|
183楼#
发布于:2002-10-25 11:51
在看NT DDK HELP中的函数说明的时候,要注意函数的可运行级别,比如有的函数只能在PASSIVE_LEVEL下运行,有的函数则可以在DISPATCH_LEVEL以下级别运行,级别越高的时候,对代码的要求就越严格,比如在DISPATCH_LEVEL的时候,就不能使用分页内存。通常情况下应该尽可能让代码在低运行级别如PASSIVE_LEVEL下运行,在高级别下运行过长时间将导致系统效率降低、影响系统响应的实时性。但有时候
|
|
184楼#
发布于:2002-10-25 11:51
安装DDK后,在DDK程序组下有Check和Free两个编译环境,Check环境用于编译带调试信息的驱动程序,Free则是编译正式发布版本的环境。通常情况下设备驱动程序的编译采用命令行的方式。通过一定的设置可以在VC ++的集成环境下编译。
|
|
185楼#
发布于:2002-10-25 11:51
一般来说,成功编译一个最基本的设备驱动程序需要四个文件,第一个是驱动程序,即C语言源程序文件(例如vdisk.c,注意下面所有的例子都是以vdisk来说明);第二个是RC文件(例如vdisk.rc);第三个是sources文件;第四个文件是makefile.rc文件。sources文件和make文件类似,用来指定需要编译的文件以及需要连接
|
|
186楼#
发布于:2002-10-25 11:51
的库文件。这三个辅助文件都很简单,在DDK samples的每个例程里都有三个这样的文件,依样画瓢就能理解它们的结构和意义。
|
|
187楼#
发布于:2002-10-25 11:52
#include #include #define VER_FILETYPE VFT_DRV #define VER_FILESUBTYPE VFT2_DRV_SYSTEM |
|
188楼#
发布于:2002-10-25 11:52
#define VER_FILEDESCRIPTION_STR \"SCSI VDisk Driver\" #define VER_INTERNALNAME_STR \"vdisk.sys\" #define VER_ORIGINALFILENAME_STR \"vdisk.sys\" #include \"common.ver\" |
|
189楼#
发布于:2002-10-25 11:52
设备驱动程序一般都使用Build实用程序来进行,Build只是NMAKE外面的一个外包装程序。Build本身其实相当简单,编译的大部分工作实际上由Build传递给NMAKE来进行。
|
|
190楼#
发布于:2002-10-25 11:52
gashe
|
|
|
191楼#
发布于:2002-10-25 11:53
TARGETNAME=vdisk
TARGETTYPE=DRIVER TARGETPATH=$(BASEDIR)\\lib |
|
192楼#
发布于:2002-10-25 11:53
INCLUDES=..\\..\\inc
SOURCES=vdisk.c vdisk.rc / |
|
193楼#
发布于:2002-10-25 11:53
reherjnren
|
|
|
194楼#
发布于:2002-10-25 11:53
# DO NOT EDIT THIS FILE!!! 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 |
|
195楼#
发布于:2002-10-25 11:53
ernenern
|
|
|
196楼#
发布于:2002-10-25 11:53
tmwmy5656
|
|
|
197楼#
发布于:2002-10-25 11:53
# end of makefile
对所有驱动程序而言,makefile都是一样的,Microsoft也警告不要编辑这个文件,如果需要,可以编辑修改sources文件达到同样的效果。对于设备驱动程序,所使用的C编译器基本上无一例外地选用VC++。 2.编译的基本步骤 (1)首先进入check或free编译环境,初始化DDK编译环境。 |
|
198楼#
发布于:2002-10-25 11:54
89/9/85
|
|
|
199楼#
发布于:2002-10-25 11:54
(2)运行VC安装目录下bin目录下的vcvars32.bat,初始化VC++编译环境。
(3)运行Build.exe进行编译。 设备驱动程序的安装和启动 1.添加注册表中的键值 |
|