接口驱动程序开发ppt课件_第1页
接口驱动程序开发ppt课件_第2页
接口驱动程序开发ppt课件_第3页
接口驱动程序开发ppt课件_第4页
接口驱动程序开发ppt课件_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、http:/现代微机原理与接口技术现代微机原理与接口技术Windows98/2000驱动程序编写方法驱动程序编写方法上上杨全胜杨全胜http:/现代微机原理与接口技术现代微机原理与接口技术1. 驱动程序的开发环境驱动程序的开发环境对于对于VxD的开发,需求的开发环境是:的开发,需求的开发环境是:Visual C+ 5.0/6.0Windosw 95DDK 假设想加快开发步骤,建议运用第三方的假设想加快开发步骤,建议运用第三方的VToolsD开开发工具,它将发工具,它将DDK的东西全部封装成的东西全部封装成C+的类,可的类,可以直接用以直接用Visual C+编写程序,而无须运用汇编。而编写程序

2、,而无须运用汇编。而且它提供的且它提供的 QuickVxd可以方便快速地建立可以方便快速地建立VxD程序程序的框架。的框架。http:/现代微机原理与接口技术现代微机原理与接口技术 对于对于WDM的开发,又分几种情况的开发,又分几种情况:对于对于Windows 98系统系统Visual C+ 5.0Windows 98DDK2)对于对于Windows Me/2000Visual C+ 6.0Windows 2000DDK3)对于对于Windows XPVisual C+6.0/Windows XPDDK 同样,为了方便起见,也可以运用第三方的开发同样,为了方便起见,也可以运用第三方的开发工具工

3、具Driver Works,它也是将,它也是将DDK的内容封装成类的内容封装成类,而且提供一个快速方便地生成驱动框架的工具。,而且提供一个快速方便地生成驱动框架的工具。http:/现代微机原理与接口技术现代微机原理与接口技术2. 驱动程序开发工具包驱动程序开发工具包DriverStudio2.1 DriverStudio 2.7所包含的工具所包含的工具 VToolsD VToolsD 是一个用来开发针对是一个用来开发针对Win9X (Windows 95 和和 Windows 98)操作系统下设备驱动程序操作系统下设备驱动程序(VxD)的工具。的工具。VToolsD 中包括生成驱动程序源代码的

4、工具,中包括生成驱动程序源代码的工具,run-time 和和 interface 库,以及一些驱动程序样本,可以用来作为各种库,以及一些驱动程序样本,可以用来作为各种类型的设备驱动程序的根底部分。类型的设备驱动程序的根底部分。 DriverWorks DriverWorks对于对于Windows NT下和下和 Windows 98 与与 Windows 2000共同支持的共同支持的Win32驱动模型驱动模型(WDM)设备驱设备驱动程序的开发提供完全的支持。动程序的开发提供完全的支持。DriverWorks中包含一个中包含一个非常完善的源代码生成工具非常完善的源代码生成工具(DriverWiza

5、rd) 以及相应的类以及相应的类库和驱动程序样本,它提供了在库和驱动程序样本,它提供了在C+下进展设备驱动程序下进展设备驱动程序开发的支持。开发的支持。 http:/现代微机原理与接口技术现代微机原理与接口技术 DriverNetworks DriverNetworks 是针对是针对Windows网络驱动开发人员网络驱动开发人员的一个模块。在它的中心部分,的一个模块。在它的中心部分,DriverNetworks 是一是一个针对个针对NDIS drivers 和和 TDI clients (DriverSockets)的的 C+ 的类库。的类库。DriverNetworks 中也有中也有Quic

6、k Miniport Wizard 用来直接开场一个用来直接开场一个NDIS Miniport 或或 Intermediate Driver 工程。它可以让他快速的生成一切工程。它可以让他快速的生成一切采用采用DriverNetworks C+ 类库编写的类库编写的NDIS驱动程序的驱动程序的编译,安装和调试所需求的文件编译,安装和调试所需求的文件 。 SoftICE SoftICE 是一个功能极其强大的内核方式调试器,它是一个功能极其强大的内核方式调试器,它支持在配置一台单独的计算机或两台计算机下进展设支持在配置一台单独的计算机或两台计算机下进展设备驱动程序的调试。备驱动程序的调试。 htt

7、p:/现代微机原理与接口技术现代微机原理与接口技术 DriverMonitor DriverMonitor不仅可以显示不仅可以显示WDM和和VxD在操作系在操作系统中心层次输出的调试语句,还可以装载和卸载统中心层次输出的调试语句,还可以装载和卸载VxD驱动和驱动和NT4系统的驱动程序。系统的驱动程序。 EZDriverInstaller EZDriverInstaller是一个无需经过设备管理器或是一个无需经过设备管理器或“添添加新硬件功能就能为加新硬件功能就能为Windows 2000/XP动态加载和动态加载和卸载卸载WDM驱动程序的小适用程序。驱动程序的小适用程序。 SetDDKGo Se

8、tDDKGo用来设置设备驱动程序创建的环境。当用来设置设备驱动程序创建的环境。当我们用我们用Visual StudioVC+编译驱动程序源程序的编译驱动程序源程序的时候,需求用时候,需求用SetDDKGo来设置环境变量,之后来设置环境变量,之后SetDDKGo会自动启动会自动启动Visual StudioVC+编译环编译环境。境。http:/现代微机原理与接口技术现代微机原理与接口技术2.2 DriverStudio 2.7的安装的安装安装需求的软硬件环境安装需求的软硬件环境 PC-compatible Intel x86 系统系统 Windows 2000, (Optional: 其中一些工

9、具也支持其中一些工具也支持 Windows 98 和和 Windows 95.) 内存内存: 最少最少32 MB, 引荐运用引荐运用64 MB 硬盘硬盘:完全安装需求完全安装需求 72 MB 针对针对 SoftICE的远程调试的远程调试: NE2000-兼容网卡或兼容网卡或 3Com 网卡网卡 针对针对 DriverWorks: Microsoft DDK,MS Visual C+http:/现代微机原理与接口技术现代微机原理与接口技术安装步骤:安装步骤: 在安装在安装DriverWorks之前,首先要保证他的计算机上之前,首先要保证他的计算机上曾经安装了曾经安装了Microsoft Visu

10、al C+以及相应针对以及相应针对Windows NT 或或WDM的的DDK的正确版本。的正确版本。 一切这些一切这些包括包括DriverStudio的安装都必需以系统管理员身份启动的安装都必需以系统管理员身份启动系统。并且要按照下面的顺序安装。系统。并且要按照下面的顺序安装。第一步:第一步: 安装安装Microsoft Visual Studio C+ 6.0 留意留意Windows 2000DDK暂时对暂时对Visual Studio.NET不支持不支持 http:/现代微机原理与接口技术现代微机原理与接口技术第二步:第二步: 安装安装2000DDKDriver Development K

11、its。留意:留意:1假设本地机的操作系统为假设本地机的操作系统为Windows2000 请确认曾经请确认曾经安装了安装了Windows SevicePack1或或Windows SevicePack2在安装在安装DDK的时候请选择完全安装。的时候请选择完全安装。 2安装中,不需求安装安装中,不需求安装64BIT IA64Binaries 3安装好后,对于安装好后,对于2000DDK不需求手动配置环境变量不需求手动配置环境变量,只需在开场菜单中点击,只需在开场菜单中点击Checked Build Envirment 那那么么DDK会自动调用会自动调用setenv配置环境变量,并监测相应的配置环

12、境变量,并监测相应的SDK以及以及Visual Studio IDE http:/现代微机原理与接口技术现代微机原理与接口技术DriverStudio安装后的设置:安装后的设置:1运用运用SetDDKGo工具定义工具定义BASEDIR环境变量并启动环境变量并启动MSVC 5.0或或6.0 ,第三步:第三步: 安装安装DriverStudio。 http:/现代微机原理与接口技术现代微机原理与接口技术http:/现代微机原理与接口技术现代微机原理与接口技术http:/现代微机原理与接口技术现代微机原理与接口技术2翻开以下地址上的建立库文件工程翻开以下地址上的建立库文件工程 http:/现代微机原

13、理与接口技术现代微机原理与接口技术3选择选择Build|Batch Build编译编译|批构件,翻开下批构件,翻开下面的窗口,从中选那么需求编译的配置。面的窗口,从中选那么需求编译的配置。 留意不要选择留意不要选择IA64的各项,的各项,Checked是调试版本,是调试版本,Free是发布版本是发布版本http:/现代微机原理与接口技术现代微机原理与接口技术4点击点击Build编译所选择的库文件。编译所选择的库文件。留意:库文件只需在安装完成后第一次运用前编译一次留意:库文件只需在安装完成后第一次运用前编译一次即可。以后要运用即可。以后要运用DriverWorksDriverWorks,只需经

14、过,只需经过SetDDKGoSetDDKGo进进入入MSVCMSVC即可。即可。 http:/现代微机原理与接口技术现代微机原理与接口技术3. VtoolsD开发开发VxD简介简介生成简单框架生成简单框架http:/现代微机原理与接口技术现代微机原理与接口技术动态装载动态装载设备名设备名编程言语编程言语生成调试用目的代码生成调试用目的代码http:/现代微机原理与接口技术现代微机原理与接口技术http:/现代微机原理与接口技术现代微机原理与接口技术http:/现代微机原理与接口技术现代微机原理与接口技术与运用程序通与运用程序通讯的控制音讯讯的控制音讯http:/现代微机原理与接口技术现代微机原

15、理与接口技术http:/现代微机原理与接口技术现代微机原理与接口技术虚拟机类名虚拟机类名设备类名设备类名线程类名线程类名http:/现代微机原理与接口技术现代微机原理与接口技术http:/现代微机原理与接口技术现代微机原理与接口技术http:/现代微机原理与接口技术现代微机原理与接口技术http:/现代微机原理与接口技术现代微机原理与接口技术http:/现代微机原理与接口技术现代微机原理与接口技术http:/现代微机原理与接口技术现代微机原理与接口技术http:/现代微机原理与接口技术现代微机原理与接口技术http:/现代微机原理与接口技术现代微机原理与接口技术/ MYFIRST.h - in

16、clude file for VxD MYFIRST#include #define DEVICE_CLASSMyfirstDevice#define MYFIRST_DeviceIDUNDEFINED_DEVICE_ID#define MYFIRST_Init_OrderUNDEFINED_INIT_ORDER#define MYFIRST_Major1#define MYFIRST_Minor0#define DIOC_MY_IO CTL_CODEFILE_DEVICE_UNKNOWN, 1, METHOD_NEITHER, FILE_ANY_ACCESS / 定义一个句柄用于运用程序与定

17、义一个句柄用于运用程序与VxD通讯通讯头文件头文件http:/现代微机原理与接口技术现代微机原理与接口技术class MyfirstDevice : public VDevicepublic: virtual DWORD OnW32DeviceIoControlPIOCTLPARAMS pDIOCParams;class MyfirstVM : public VVirtualMachinepublic:MyfirstVMVMHANDLE hVM;class MyfirstThread : public VThreadpublic:MyfirstThreadTHREADHANDLE hThrea

18、d;http:/现代微机原理与接口技术现代微机原理与接口技术/ MYFIRST.cpp - main module for VxD MYFIRST#define DEVICE_MAIN#include myfirst.hDeclare_Virtual_DeviceMYFIRST#undef DEVICE_MAINMyfirstVM:MyfirstVM(VMHANDLE hVM):VVirtualMachinehVM MyfirstThread:MyfirstThread(THREADHANDLE hThread): VThreadhThread DWORD MyfirstDevice:OnW3

19、2DeviceIoControlPIOCTLPARAMS pDIOCParams char* msg=欢迎进入虚拟机世界欢迎进入虚拟机世界!; char* caption=Hello World!;.cpp文件文件http:/现代微机原理与接口技术现代微机原理与接口技术switchpDIOCParams-dioc_IOCtlCode case DIOC_OPEN:doutI am Opening!; break;/调用调用CreateFile函数时呼应该分支代码函数时呼应该分支代码case DIOC_MY_IO:doutI am working!dioc_hvm, MB_OK, msg, ca

20、ption,0,0,0;break;/调用调用DeviceIoControl函数时呼应该分支下的代码函数时呼应该分支下的代码case DIOC_CLOSEHANDLE:doutI am Closing!;break;/调用调用CloseHandle函数时呼应该分支代码函数时呼应该分支代码 return 0;http:/现代微机原理与接口技术现代微机原理与接口技术# MYFIRST.mak - makefile for VxD MYFIRSTDEVICENAME = MYFIRSTDYNAMIC = 1FRAMEWORK = CPPDEBUG = 1OBJECTS = myfirst.OBJ!i

21、nclude $VTOOLSDincludevtoolsd.mak!include $VTOOLSDincludevxdtarg.makmyfirst.OBJ:myfirst.cpp myfirst.h.mak文件文件http:/现代微机原理与接口技术现代微机原理与接口技术http:/现代微机原理与接口技术现代微机原理与接口技术http:/现代微机原理与接口技术现代微机原理与接口技术#include #include #include #define DIOC_MY_IO CTL_CODEFILE_DEVICE_UNKNOWN, 1, METHOD_NEITHER, FILE_ANY_ACCE

22、SS /定义一个句柄用于运用程序与定义一个句柄用于运用程序与VxD通讯通讯void mainHANDLE hDevice;hDevice=CreateFile .myfirst.vxd, 0, 0,0,OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE, 0;/ 文件名的途径一定是以文件名的途径一定是以.打头打头 ,默许的,默许的VXD的文的文件的目录是件的目录是C:Windowssystem,假设假设VXD在在d:myvxd目录下,目录下,那么这里应该写成那么这里应该写成.d:myvxdmyfirst.vxd Win32环境下的控制台程序环境下的控制台程序 ht

23、tp:/现代微机原理与接口技术现代微机原理与接口技术ifhDevice=INVALID_HANDLE_VALUEcoutOpen VxD errorGetLastErrorendl;exit1;DeviceIoControlhDevice,DIOC_MY_IO,NULL,0,NULL,0, NULL,NULL; /运用句柄运用句柄DIOC_MY_IO与与VxD交互交互CloseHandlehDevice;/封锁设备句柄封锁设备句柄http:/现代微机原理与接口技术现代微机原理与接口技术VToolsD的类库的类库 http:/现代微机原理与接口技术现代微机原理与接口技术I/O类类class VI

24、OPortpublic: VIOPortDWORD port; /构造函数构造函数 VIOPort; /析构函数析构函数 BOOL hook; /挂钩一个端口处置程序挂钩一个端口处置程序 BOOL unhook; /摘钩一个端口处置程序摘钩一个端口处置程序 VOID localEnableVMHANDLE; /允许监控指定虚拟机端口的允许监控指定虚拟机端口的I/O操作操作 VOID localDisableVMHANDLE;/制止监控指定虚拟机端口的制止监控指定虚拟机端口的I/O操作操作 VOID globalEnable; /允许监控一切虚拟机端口的允许监控一切虚拟机端口的I/O操作操作 V

25、OID globalDisable; /制止监控一切虚拟机端口的制止监控一切虚拟机端口的I/O操作操作 virtual DWORD handlerVMHANDLE, DWORD port,CLIENT_STRUCT* pRegs, DWORD iotype, DWORD outdata;/端口处置程序端口处置程序protected: DWORD m_port; BYTE m_thunkIOPORTTHUNKSIZE;http:/现代微机原理与接口技术现代微机原理与接口技术 下面我们给出一个例子,该例子捕获端口下面我们给出一个例子,该例子捕获端口0 xf0,当运用程序要,当运用程序要读该端口时,

26、它将上次写入该端口的资料前往给运用程序。用读该端口时,它将上次写入该端口的资料前往给运用程序。用VToolsD生成的时候,根本上和生成生成的时候,根本上和生成Myfirst的方法一样,只是在的方法一样,只是在Windows95控制音讯中只选择控制音讯中只选择SYS_DYNAMIC_DEVICE_EXIT和和SYS_DYNAMIC_DEVICE_INIT两个音讯而不选择两个音讯而不选择W32_DEVICEIOCONTROL。/ IOPORT.h - include file for VxD IOPORT#include #define DEVICE_CLASSIoportDevice#defin

27、e IOPORT_DeviceID UNDEFINED_DEVICE_ID#define IOPORT_Init_OrderUNDEFINED_INIT_ORDER#define IOPORT_Major1#define IOPORT_Minor0#definePORT_NUM0 xf0 /要捕获的端口地址要捕获的端口地址 http:/现代微机原理与接口技术现代微机原理与接口技术class IoportPort : public VIOPortpublic: IoportPort:VIOPortPORT_NUM; DWORD handlerVMHANDLE hVM, DWORD port,CL

28、IENT_STRUCT* pRegs,DWORD iotype, DWORD outdata; http:/现代微机原理与接口技术现代微机原理与接口技术/ IOPORT.cpp - main module for VxD IOPORT#define DEVICE_MAIN#include ioport.hDeclare_Virtual_DeviceIOPORT#undef DEVICE_MAINIoportPort* pio;IoportVM:IoportVMVMHANDLE hVM : VVirtualMachinehVM IoportThread:IoportThreadTHREADHAN

29、DLE hThread : VThreadhThread http:/现代微机原理与接口技术现代微机原理与接口技术BOOL IoportDevice:OnSysDynamicDeviceInit / 动态装载初始化的时候调用动态装载初始化的时候调用 pio=newIoportPort; ifpio ifpio-hook / 挂上端口映射挂上端口映射 douthook successunhook /将将I/O映射卸载下来映射卸载下来 doutunhook successendl; delete pio; return TRUE; D W O R D I o p o r t P o r t : :

30、 : h a n d l e r V M H A N D L E h V M , D W O R D port,CLIENT_STRUCT* pRegs,DWORD iotype, DWORD outdata static WORD count=0; static DWORD buffer20; static BYTE inppt=0; count+; doutentering handlerendl; doutentered countcountendl;http:/现代微机原理与接口技术现代微机原理与接口技术switchiotype case BYTE_INPUT: doutbuffer

31、byteBYTEbufferinpptendl; inppt+; returnBYTEbufferinppt-1; case WORD_INPUT: doutbuffer wordWORDbufferinpptendl; inppt+; returnWORDbufferinppt-1; case DWORD_INPUT: dout buffer dwordWORDbufferinpptendl; inppt+; returnWORDbufferinppt-1;case BYTE_OUTPUT:buffercount-1=outdata;doutbyte output data:BYTE out

32、dataendl; break; case WORD_OUTPUT:buffercount-1=outdata;doutword output data:WORDoutdataendl; break; case DWORD_OUTPUT:buffercount-1=outdata;doutdword output data:DWORDoutdata endl;break; default:break; /对于输入,处置程序将数据输入到端口的缓冲,对于输出,处置程序将缓冲中的资料输对于输入,处置程序将数据输入到端口的缓冲,对于输出,处置程序将缓冲中的资料输出到端口出到端口 return 0; h

33、ttp:/现代微机原理与接口技术现代微机原理与接口技术下面给出调用端口下面给出调用端口0 xf00 xf0的的Win32Win32控制台程序。控制台程序。 #include conio.h#include #include #include #define PORT_NUM 0 xf0void main char* srcdata=This is IO Sample!; char* desdata=new char20; HANDLE hDevice; char ch; _cprintf1=load IOPORT VXD, x=exit, Others=Do not load IOPORT V

34、XDn; ch=_getch;whilech!=x ifch=1 hDevice=CreateFile .Ioport.vxd,0,0,0,OPEN_EXISTING,FILE_FLAG_DELETE_ON_CLOSE,0;http:/现代微机原理与接口技术现代微机原理与接口技术ifhDevice=INVALID_HANDLE_VALUE coutOpen VXD errorGetLastErrorendl; exit1; desdata0=0; _asm mov dx,PORT_NUMmov edi,srcdatamov ecx,20byteoutput: moval,ediout dx,a

35、linc ediloop byteoutputmov esi,desdatamov ecx,20byteinput: in al,dxmov esi,alinc esiloop byteinput http:/现代微机原理与接口技术现代微机原理与接口技术ifch=1 CloseHandlehDevice; /封锁设备句柄封锁设备句柄_cprintfscrdata and desdata should be the same!n; _cprintfsrcdata:%sn,srcdata; _cprintfdesdata:%sn,desdata; _cprintf1=load IOPORT VXD

36、, x=exit, Others=Do not load IOPORT VXDn; ch=_getch; http:/现代微机原理与接口技术现代微机原理与接口技术中断类中断类class VHardwareIntpublic:VHardwareIntint irq, DWORD flags, DWORD tout, PVOID refdata; /构造函数构造函数VHardwareInt;/析构函数析构函数virtual BOOL hook;/挂钩虚拟挂钩虚拟IRQ的处置程序的处置程序virtual BOOL unhook;/摘钩虚拟摘钩虚拟IRQ的处置程序的处置程序virtual VOID O

37、nHardwareIntVMHANDLE;/硬件中断信号处置程序硬件中断信号处置程序virtual VOID OnVirtualIntVMHANDLE; /虚拟中断信号处置程序虚拟中断信号处置程序VPICD给给VxD的的virtual VOID OnVirtualEOIVMHANDLE;/当虚拟机发出当虚拟机发出EOI命令时被调用命令时被调用virtual VOID OnVirtualMaskVMHANDLE, BOOL bMask; /虚拟机改动屏蔽位的时候被调用虚拟机改动屏蔽位的时候被调用virtual VOID OnVirtualIRETVMHANDLE; /当虚拟机中中断处置程序前往控

38、制给当虚拟机中中断处置程序前往控制给VPICD时被调用时被调用VOIDassertVMHANDLE;/在指定虚拟机中恳求虚拟中断在指定虚拟机中恳求虚拟中断VOIDdeassertVMHANDLE;/吊销指定虚拟机中的虚拟中断吊销指定虚拟机中的虚拟中断DWORDgetStatusVMHANDLE hVM; /前往虚拟前往虚拟IRQ的部分形状信息的部分形状信息http:/现代微机原理与接口技术现代微机原理与接口技术DWORDgetCompleteStatusVMHANDLE hVM;/前往虚拟前往虚拟IRQ的全部形状信号的全部形状信号BOOLtestPhysicalRequest;/测试物理测试物

39、理IRQ的形状信息的形状信息VOIDsendPhysicalEOI;/向物理向物理PIC发出中断终了发出中断终了EOI信号信号VOIDphysicalMask;/物理屏蔽物理屏蔽IRQVOIDphysicalUnmask; /物理允许物理允许IRQVOIDsetAutoMask; /指示可编程中断控制器执行智能的指示可编程中断控制器执行智能的IRQ屏蔽屏蔽static LONGconvertIntToIRQint vecno, VMHANDLE hVM;/将中断号转换成将中断号转换成IRQ号号static LONGconvertIRQToIntint irq, VMHANDLE hVM;/将将

40、IRQ号转换成中断号号转换成中断号static BOOLforceDefaultOwnerint irq, VMHANDLE hVM;/控制控制IRQ的默许处置的默许处置protected:WORDm_irq;WORDm_flags;DWORDm_timeout;PVOIDm_refdata;IRQHANDLE m_handle;BYTEm_thunkHWITHUNKSIZE;private:VHardwareInt;http:/现代微机原理与接口技术现代微机原理与接口技术class VSharedHardwareInt : public VHardwareIntpublic:VSharedHardwareIntint irq, DWORD flags, DWORD timeout,PVOID refdata;virtual BOOL hook;virtual BOOL OnSharedHardwareIntVMHANDLE;/中断处置程序中断处置程序protected:BYTE m_s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论