WINDOWS982000驱动程序编写方法上

上传人:仙*** 文档编号:62329427 上传时间:2022-03-14 格式:DOC 页数:95 大小:3.03MB
返回 下载 相关 举报
WINDOWS982000驱动程序编写方法上_第1页
第1页 / 共95页
WINDOWS982000驱动程序编写方法上_第2页
第2页 / 共95页
WINDOWS982000驱动程序编写方法上_第3页
第3页 / 共95页
点击查看更多>>
资源描述
Windows98/2000驱动程序编写方法(上)1.驱动程序的开发环境 f -二冷即的开发,需要的开发环境是严* Visual C+ 5.0/6.0童 Windosw 95DDK1如果想加快开发步骤,建议使用第三方的VToolsD开 量 发工具,它将DDK的东西全部封装成C+的类,可 霁 以直接用Visual C+编写程序,而无须使用汇编。而 且它提供的QuickVxd能够方便快速地建立VxD程序 -前框架。型WDM的开发,又分几种情况:)对于Windows Me/20001)对于Windows 98系统 )DDK3)对于 Windows XP竽 MXPDDK同样,为了方便起见,也可以使用第三方的开发 工具Driver Works,它也是将DDK的内容封装成类 ,而且提供一个快速方便地生成驱动框架的工具。32.驱动程序开发工具包DriverStudio2.1 DriverStudio 27所包含的工具VToolsD是一个用来开发针对Win9X (Windows 95和 Windows 98)操作系统下丧备驱动程序(VxD)的工具。 ToolsD中包括生成驱动程序源代码的工具,run-time和 Fiiiterface库,以及一些驱动程序样本,可以用来作为各种 类型的设备驱动程序的基础部分。ffiOferWorksDriverWorks对于Windows NT下和 Windows 98 与 Windows 2000共同支持的Win32驱动模型(WDM)设备驱 动程序的开发挺祺完冬禹支持。DriverWork沖包备一个 非常完善的源代码生成工具(DriverWizard)以及相应的类 库和驱动程序样本,它提供了在C+下进行设备驱动程序开发的支持。5 Dr i ver N et worksDriverNetworks是针对Windows网络驱动开发人员 的一个模块。在它的核心部分,DriverNetworks是一 个针对NDIS drivers 和 TDI clients (DriverSockets)的 童 C卄 的类库。DriverNetworks 中也有Quick Miniport K Wizard用来直接开始一个NDIS Miniport或 K Intermediate Driver工程。它可以让你快速的生成所有 昇采用DriverNetworks C+类库编写的NDIS驱动趣序的 二二编译,安装和调试所需要的文件。SoftICE是一个功能极其强大的内核模式调试器,它 支持在配置一台单独的计算机或两台计算机下进行设 备驱动程序的调试。7 riverMonttorDriverMonitor不仅可以显示WDM和VxD在操作系 统核心层次输出的调试语句,还可以装载和卸载VxD 驱动和NT4系统的驱动程序。I n erlnstaller厂EZDriverlnstaller是一个无需经过设备管理器或添 加新硬件”功能就能为Windows 2000/XP动态加载和 聲卸载WDM驱动程序的小实用程序。三三諄二fSetDDKGo】SetDDKGo用来设置设备驱动程序创建的环境。当 我们用Visual Studio (VC+)编译驱动程序源程序的 时候,需要用SetDDKGo来设置环境变量,之后 SetDDKGo会自动启动Visual Studio (VC+)编译环 境。6#2.2 DriverStudio 2.7 的安装 峑谴需宴的软硬件环境 一F-? PC-compatible Intel x86 系统iWindows 2000, (Optional:其中一些工具也支持 Windows 98 和 Windows 95.)内存:最少32 MB,推荐使用64 MB硬盘:完全安装需要72 MB去三针对SoftICE的远程调试:NE2000-兼容网卡或3Com-网卡针对 DriverWorks: Microsoft DDK,MS Visual C+在安装DriverWorks之前,首先要保证你的计算机 上已经安装了 Microsoft Visual C+以及相应针对 Windows NT或WDM的DDK的正确版本。访有这些 M 1 riverStudio的安聂都必须以系统管理员身份启动 B!并且要按照下面的顺序安装。逹兰仝養号h进厂工諄亠一第一步:安装Microsoft Visual Studio C+ 6.0 (注意Windows2000DDK暂时对Visual Studio.NET不支持)第二步:安装2000DDK (Driver Development Kits)。11)如果本地机的操作系统为Windows2000请确认已经 屋安装了 Windows SevicePackl 或Windows SevicePack2 显安装DDK的时候请选择完全安装。-3)安装好后,对于2000DDK不需要手动配置环境变量 只需在开始菜单中点击Checked Build Envirment则 DDK会自曲调ffisetenv配置环境变量,并监测相应馬SDK以及Visual Studio IDE第三步:安装 DriverStudio。现io安装后的设置:SetDDKGo工具定义BASEDIR环境变量并启动50或6.0 ,Jrivdorks 卜onipware SoftICE Driver Suite SoftnMi H . DI Build Settings (SetDIGo)VtoolsI即 Source to DSP Converterra DriverMoiiitor 働 Ezlrvlnstallerinni g13r创天中丈vc+-Ini x|7r创天中丈vc+-Ini x|DdkDriverStudio Director!es7r创天中丈vc+-Ini x|7r创天中丈vc+-Ini x|DDK Root Directory CBASEDIR.) lefVBTDDK7r创天中丈vc+-Ini x|7r创天中丈vc+-Ini x|-Target Flat form-C? 32-bit 0(8r 64-bit CEA7r创天中丈vc+-Ini x|7r创天中丈vc+-Ini x|ShortcutI CreatE Shortuut when laurLching pr7r创天中丈vc+-Ini x|7r创天中丈vc+-Ini x|HelpZreate Shoi-tcut Ho”文件 编辑 弯看 插入 工程 镰译 工貝科窗口 酬ii |话日耳|為1 e q- |画国时|函丘需Bl=!-J2djZl可环编译厂调试查找文件1 h查找文件2二结果k SQL Debu關ir|彳| JReady72)打开下列地址上的建立库文件工程#Open Workspace MBA打开|19ProjectHWdisWdjn nVdwLibs QVclwLibs | IVdwLibi OVdwLibs I |VdwLibs VdwLibs llVdyLibs VdwLibsBalchBuildRebuild AllC&nc eleselect AllChecked FreeCheckedFreeCleanSelect All sleet All i3fAll iIA64 NT4 CheckedIA64 NT4 FreeWT4WT4WDMWDM3)选择BuildlBatch Build (编译I批构件),打开下 面的窗口,从中选则需要编译的配置。Win32 UDIS WDM FreeIA64 WDM CheckedIA64 WDM FreeWin32Win32WielSSWin32Win32Win32注意不要选择IA64的各项,Checked是调试版本,Free 是发布版本4)点击Build编译所选择的库文件。21生成简单框2MlIffl Compute SoftICE Driver Suite 卜IHHEIlmEiSiilLriveilorks 卜 H SoftICE In VtoolsL23rol Messages| VxD Servi ces| Classes |Output Fileammt ersjAPI|ControlMessagesDevice ID|UWIiEFINED DEVICE IDMinorEFINEIi INIT OMERUntitled 一 QuickVzdFile Helpwice Name匝FIRSTDevice InitializationSpeci al Support灯C+ Bynami ciiy LoadableHUIS librari esBuild a DebugC RetailUntitled 一 Qui ckVxdFile HelpWindowE95 Conti-ol Messages VxD Servi ces ClasseE Output FilesDevi ce Farametere肛Tj Control MezEagezStandard Appli cation Entry Points厂垂理庾电匝亟Frotected Mode Vendor Speci fi c Appli cation EiitrF Point,毎厂 Real/V86 ModeI Protected ModeVendoi- ID StringUntitled - Qui ckVx dFile HelpWindowsSS Control Messages VxD Services| ClassesOutput Flies Hevi ce ParametersAPIControl Messagee厂厂厂厂厂厂厂厂厂厂厂厂厂:.77:.TT:BEGIH-_PM_AFP CLISE_M_NOTIFY CBEATE_VMCEIT_EEBOOT_NOTIFYDEBUG_QUERYDESTROT_VM DEVICE_IHITDEVICE_REBOOT_NOTIFY EMD_MESSAGE_MODE END_PM_AFFIBIT_COMFLETEPOWER_EVEHT厂 QKERYJESTROY 厂 REBOOT_FEOCESSOR 厂 SETJEVICE.FOCUS 厂 SYS_CRITICAL_EXIT 厂 SYS CRITICAL INIT 厂SYS VM工肛T 厂 SYSJ/M_TEEMINATE 厂 SYSTEM_EXIT 厂 VM_CRITICALJNIT 厂 VM_IHIT 厂 VM_HDT_EXECUTEABLE 厂 VM_KESUME 厂 VM_SUSFEND 厂 VM T EEMI NATEUntitled 一 Qni ckYxdFile Help厂rrr厂厂厂厂厂厂厂应CLOSE J/M_N0TIFY2CREATETHREADCEIT_REB00T_N0TIFY2 DESTROY_THREAIIDESTRDY_VM2DEVTCEjmOCITJffOTITYZENIiJflESSAGE_M0DE2ENB_FM_APF2GET_CONTENTION_KANIILER KEE1EL32_INITIALIZED KEENEL32_SHLITDOWNPNF KEW DEV1IODESYSTEM_EXIT2SYS_CRITICAL_EXIT2SYS_DYNAMIC_DEWCE_EXITTTlTh.VM_F . .CUTEABLE2W .fENU2;h1_TEEMINATE2W32 DEVICEIOCONTROLFile HelpWindowses Control MessageEC Prototypes for Exportmd VxD ServicesRemoveUntitled 一 QuickVzdAPIVxD ServicesCoiltrol MessageE ClazESE 1 Outpiit FilesUntitled - QuickVxdFile HelpDevi ce Paiametmiris | APIW i ndow e95 C oritr ol Mess age sVxD S ervi ces|MyirEtHevi ceirtual Machine Class|Myir EtTIThread Classyfirs tThrmaLdCoritrol MsEEages ClasseEOirtput Files35File HelpDevice Par:ajneters | API|Control MessagesWindowe95 Control MezzageE VxD Servi cez ClaEzez Output Files -Output Fil*理姿藍2&迅辽空至2应Include File:D: Program FilesNuNegaWtoolsDBinMYFIRST. hCode Module:D:Program FilesHuMegakVtoolsDBinMYFIRST. cppMake File:D: Program FilesNufflega.VtoolsBBinMYFIRST. makGeneraNowOpen Workspace搜寻(X):3回團因画圍_J Debug回 MYFHST.mak文件名0):文件类型(X)$来源控制打开工程自源程序控制创天中文VC+D: YFmyvxdkellovxdMYFIEST. makThis makefile was not generatwd by Developer Studio.Continuing will create 包 new Developer Stndio project to wrap tkis makefile You will be prompt皀d to save 日fteT th new project has been created.#Do you want to continue?平台选择平台支持你制作文件.E平台:0Win3239麗育命爲訐MV可間TTT而ia.ll MYHRS亍而亦:圍 MVFIRST.mdkIsf: ClassView圍 FileViewI Workspace MYFIRSTrM proj -Hpfhp DockingHi deVi ewBuildBuild (selecti on only)Clean (selecti on only) 沓 New Folder.Add Files to Project.Sgt as Active FrojectUnload. ProjectSettingsAdd to Source Control.nfp Properti be4 .rfl 1 5 ClassViev圍 FileWew 1Insert Files into Project搜寻a):回國因|B|Debug cj| MYFIRST. cppE MYFIF5T h文件名 :|文件类型(X): |C+ FilEw (. c ;:cpp;:ckk; . tl.i: h;Tt:|Files will be inserted into folder titled MYFIRST1 files1 in 卩rojecth/lYFIRSTI *.Workspace MYFIRSTI1:1 proj白MYFIRSTI filesMYFIRST.C 叩MYFIRST.h h-1FIRSTjn-3k詰卵 iew JgjFil 凶 iew|日.弋 MyfirstDevice OnW3ZDeviceloControl(PIOCTLPA 白巧 MyfirslTbread MyfirstThreadlJHREADHANOLE hT 白七 MyfirsWMQ MyfirsWMOMHANDLE hVM)$11I:-:-:-;:-:-:-:-:-:-:工程編译工具窗口粥助设置活动工程1 忝加工程来源控制r丛属性 设置Project SwttingsSeWngs For: |Wm32 0ebug输出制作MYFIRST1插入工程General | Debug |R创逹命令行:| N MAKE MYFIRST.mdk3重建全部选顶:妙出文件鱼L胚 FIR ST 1 逝 过浏览信息文件名:JMYFIRST1.BSC#/ MYFIRST.h include file for VxD MYFIRSTl#iiiclude #define DEVICE CLASSI g#define MYFIRST_DeviceID ft#define MYFIRST_Init_Order#define MYFIRST_Majorr 祜define MYFIRST MinorMyfirstDeviceUNDEFINED_DEVICE_IDUNDEFINED_INIT_ORDER10-CTL_CODE (FILEJDEVICEJJNKNOWN, WD_NEITHER, FILE鼻NY鼻 CCESS)定义一个句柄用于应用程序与VxD通信class MyfirstDevice : public VDevicepublic:virtual DWORD OnW32DeviceIoControl (PIOCTLPARAMS嬖 class MyfirstVM :rpublic:pDIOCParams);public VVirtualMachineMyfirstVM (VMHANDLE hVM);class MyfirstThread : public VThread public:MyfirstThread (THREADHANDLE hThread);/ MYFIRST.cpp main module for VxD MYFIRST #define DEVICE_MAIN#include Hmyfirst.hH静 Declare_VirtuaI_Device ( MYFIRST )(jundef DEVICE_MAIN(MyfirstVM:MyfirstVM(VMHANDLE hVM):VVirtualMachine (hVM) SlyfiFstThFead:MyfirstThread(THREADHANDLE hThread): VThread (hThread) DWORD MyfirstDevice: OnW32DeviceloControl一(PIOCTLPARAMS pDIOCParams )次迎进入虚拟机世界! JhHello World!n;case DIOCswitch (pDn!979WWVS9HI93y99W9?TlK MF g j F mmw t y g jf / Ui u / jKK A *4hK r 4 j / I ff N、YVF 2Z1 2Sr / f-JSBFJiLf亠 工触产*l 匕rjJMTflyMJNiryTEMmUiP r、jr#、v yfT TJ f f T1 t f tJISHELLC/r C/CX/t 7債畑YFLirXMEMTTnVU舌EWJUEia亦初西PL魂介case DI艷丄二 一三一町二 * ;L -二尹 wp 亠mak文件# MYFIRST.mak - makefile for VxD MYFIRST DEVICENAME = MYFIRST存 DYNAMIC = 1K FRAMEWORK = CPP K DEBUG = 1臺 OBJECTS = myfirst.OBJImclude $ (VTOOLSD) includevtoolsd.mak一 linclude $ (VTOOLSD) includevxdtarg.mak myfirst.OBJ:myfirst.cpp myfirst.h35新建文件 工程I工作医I其它文档I总 ATL COM AppWizardWin32 Applicationkee,* IL,:j I Cluster Resource Type Wizard QWin32 Console Applicaiionl jcuswm AppWizardWin32 DynamicinknbrdnDatabase ProjectWin32 Stdic LibraryiDevSTudio Add-in Wizard EKtended Stored Proc Wizard ISAPI EKtension Wizard Makefile 貓MFC ActiveX ControlWizard 團 MFC AppV/IZdrd (dll) HMFC A 叩 Wizard (e) 贋New Database Wizard HtESTI AppWizard f Utilily Project工程C位置:D:WFmyvdhelloG E创建話工作区 r A添加至现有工作区厂卫从J1性的:|m1YFIF!ST1确定结束曰回E3What kind of Console Application do you wanno creare?( pin empty project C A simple d叩licaTion.C A Hello. World!11 application.C An application that supports MFC.牡上一个II取消Win32 环37#include #inulude #include #define DIOC MY IO CTL CODE (FILE DEVICE UNKNOWN, r!1 z METHODJEITHER, FI LE_AN Y_ACCE S S )/定叉一个句柄用于应用程序写VxD通信 void main ()辱HANDLE hDevice;二 hDevice=CreateFile (!T myfirst .vxd r 0 r 0,0,OPEN_EXISTING,FILE_FLAG_DELETE_ON_CLOSE z 0);/文件名的跆径佳是以A打头,默认的VXD的文 件的目录是C: Windowssystem丿如果VXD在d: myvxd目 录下, 则应里血该写成” d: myvxdmyfirst. vxdnif (hDevice=INVALID HANDLE VALUE)#cou七“Open VxD errorH GetLastError ( ) endl ; exit (1);JrDevi ceIoControl (hDevice,DIOC_MY_10,NULL z0NULL,0NULL, NULL) ; _CloseHandle (hDevice)/使用句柄DTOC MY工0与VxD交互/关闭设备句箱#类别类描述DMA类VDMAChannel所有斋要虚拟DMA信道的VxD都必须从该类淤生一个类TOMABuffer要想在DMA使用中运用Buffer就需要生成一个该类的实例I/O类VlOPort可以用这个类来虚拟一个0端口中断类VHardwarelnt该类用来帮助进行中断处理V S hareHard war elnt派生于Vhardwarelnt类,开发PCI设备驱动程序需要用这个类VPreChainV86Int该类处理86模式下出现的中断/在别的中斷处理程序前执行VInChainIntVInChamV86Int和VInChainPMInt的基类,这些类允许你安装 可以在应用程序级通过回调程序呼叫的中断处理程序VInC ham V86Int处理V86模式下的中断VlnChainPMEnt保护模式下的中断处理异常类VFault遥其它异常类(除VInvalidPageFault)的基类VInvalidPageFault处理系统不能处理的页异常VNMIEvent该类用于处理不可屏蔽中断(NMI)VProtModeFault该类处理保护模式下的异常,比如无效指令和一般保护异常等VVlvlMFault该类处理VxDS产生的异常VV86M0 deFault该类处理V86模式下的异常热键类VHotKey该类监控键盘的事件,尤其按键事件Vapp y TimeE vent 类VAp pyTimeEvent任意唸D都可以请求系统在可以安全调用应用程序级接口时 进行回调。它可以调用外壳驱动程序SHELL VxD提供的系统 服务,如分配释放在RING 3可访问的存储空间加载和调用 RING 3 DLL,时间延迟类VTimeOut冕其它时间延迟类的基类,时间延迟对象是指定一定时间,当 指定时间到达时就通知系统进行适当处理VG-lobalTimeOut提供全局范围内的时间延迟事件VThreadTimeOut在指定的线程中产生时间延迟事件VAsync Ti me Out提供更精确地异步时间延迟事件VVMTimeOut在指定虚拟机中产生时间延迟事件public:VlOPort (DWORD port);O :hook ();/构造函数/析构函数/挂钩一个端口处理程序/摘钩一个端口处理程序VlOPortBOOLBOOLVOID :VOIDVOID二 VOIDclass VlOPortunhook (); localEnable(VMHANDLE);/允许监控指定虚拟机端口的工/0操作localDisable (VMHANDLE ) ; /禁止监控指定虚拟机端口的工/0操作 globalEnable () ;/允许监控所有虚拟机端口的工/0操作globalDisable () ;/禁止监控所有虚拟机端口的工/0操作virtual DWORD handler (VMHANDLE, DWORD port z CLIENT_STRUCT* 三pRegs , DWORD iotype , DWORD outdata) ; /端口处理程序protected:DWORD mj)ort;BYTE m_thunkIOPORTTHUNKSIZE;#41F面我们给出一个例子,该例子捕获端口oxfo,当应用程序要UNDEFINED INIT ORDER#define IOPORT_Major #define IOPORTMinor0“要捕获的端口地址#class IoportJpuuiic :Loporiron (jpk ttjn jr 1 u yy LJixLf fiuii績喚 DWO朋 iotype, la);43- main module for VxD IOPORT #define DEVICE_MAIN#include nioport.hHpeclare_Virtual_Device (IOPORT )Bundef DEVICE_MAINKportVM: : IoportVM (VMHANDLE hVM)f VVirtualMachine (hVM) ioportThread: : IoportThread (THREADHANDLE hThread) 7 VThread (hThread) pio=new (IopO/Hbrl 十冬弋=_理if (pio) .挂上端口映射上二、t 0刁上么久_二*- 二一二_ / _ 亠iALSE;return TRUE;BOOLIoportDevice: : OnSysDynamicDeviceExit () /驱动程序被卸下时调用将U0映射卸载下来delete pio ; / IJ (plOUll!tOOKdoutfunhook successrfendl;DWORD Top: port, CLIENT iQtvpeaaVMHANDLE hVM, DWORDhandlersV DWORDJat-47case BYTEj.nppt+;return (BY case WORD_nppt+; return (WORD) bufferj.nppt-l case DWORD INPUT:nppt+;return (WORD) b case BYTE OUTPUT (BYTE) 出到端口#break;utdata; doutffword output data:UT: buff er count-1 =outdata; doutffdword output data:endl:/对于输入,处理程序将数据输入到端口的缓冲,对于输出,处理程序将缓冲中的资料输出到端口#下面给出调用端口 OxfO的Win32控制台程序o#include #include #include#includeconio hn #define PORT_NUM OxfO void main ()char* srcdata=n This is 10 Sanjle ? ? n ; char* desdata=new char (20);_ HANDLE hDevice;char ch;M - _cprintf ( TT l=load IOPORT VXD, x=exit, IOPORT VXDnTT);Others=Do notloadch=_getch (); while (ch ? =1 x1 )if (ch=!lT)hDevice=CreateFile(nl:oport vxdJ00,0OPEN EXISTING, FILE FLAG DELETE ONMW_CLOSE,0);49if (hDevice=INVALID_H2kNDLE_VALUE)coutnOpen VXD errorGet! exit (1);esdata0=10!; S asm7Wr imov8Pmovmovbyteoutput:dx,PORT_NUM edi rsrcdata ecx ,20mov al, edioutdx ,alincediloopbyteoutputmovesi,desdatamovecx,20byteinput:in alrdxmovesi,alincesiloopbyteinputstError () endl;#if (ch=TlT)the same ? nn );CloseHandle (hDevice) ;/关闭设备句柄cprintf (n scrdata and desdata should b _ E; _cprintf (nsrcdata: %snn,srcdata); _cprintf (ndesdata: %snn,desdata);Others=Do not load_cprintf (l=load IOPORT VXD, x=exit,IOPORT VXDnn);宇 丁Oh=_getch ();49class VHardwarelntpublic:VHardwarelnt (int irq, DWORD flags z DWORD tout, PVOID refdata);构造函数VHardwarelnt ();virtualvirtual.virtualvirtualBOOLBOOL VOID VOIDvirtualVOIDvirtualVOIDvirtualVOID/析构函数hook ();挂钩虚拟HRQ的处理程序unhook () ;/摘钩虚拟:TRQ的处理程序OnHardwarelnt (VMHANDLE) ; /硬件中断信号处理程序 OnVirtuallnt (VMHANDLE);/ /虚拟中断信号处理程序VPHCD给VxD的)OnVirtualEOI (VMHANDLE);/当虚拟机发出E0工命令时被调用 OnVirtualMask (VMHANDLE, BOOL bMask);/虚拟机改变屏蔽位的时候被调用 OnVirtuallRET (VMHANDLE);/当虚拟机中中断处理程序返回控制给VPHCD时被调用 /在指定虚拟机中请求虚拟中断 /撤消指定虚拟机中的虚拟中断assert (VMHANDLE); deassert (VMHANDLE);VOIDVOIDDWORD getStatus (VMHANDLE hVM) ;/返回虚拟HRQ的部分状态信息51DWORDgetConpleteStatus (VMHANDLE hVM);BOOLVOIDVOIDVOIDtestPhysicalRequest sendPhys icalEOI (); physicalMask (); physicalUnmask ();/返回虚拟工RQ的全部状态信号 ();/测试物理工RQ的状态信息/向物理PHC发出中断结束EO工信号/物理屏蔽HRQ/物理允许工RQstaticVOID staticsetAutoMask ();/指示可编程中断控制器执行智能的工RQ屏蔽staticLONG convertlntToIRQ (int vecno z VMHANDLE hVM);/将中断号转换成工RQ号LONG convertIRQToInt (int irqz VMHANDLE hVM);/将IRQ号转换成中断号BOOL forceDefaultOwner (int irqz VMHANDLE hVM);/控制HRQ的默认处理protected:WORDWORDDWORDPVOID IRQHANDLE BYTEm_irq;m_flags;m_timeout;m_refdata;mhandle;rnFthunk HWITHUNKSIZE;private:VHardwarelnt ();53class VSharedHardwarelnt : public VHardwarelnt public:VSharedHardwarelnt (int irq, DWORD flags rDWORD timeout, PVOID ref data ); virtual BOOL hook (); virtual BOOL OnSharedHardwarelnt (VMHANDLE);/中断处理程序protected:BYTE m_sthunkSHWINTTHUNKSIZE; private:VSharedHardwarelnt (void);;#下面我们使用VsharedHardwarelntn 一个VxD的例子,该例子 捕获鼠标中断。该例子也是用VtoolsD生成的可动态加载的VxD框 架,然后在VC6中修改的,我们只给出修改的部分。1 - include file for VxD HARDINTdefine IRQ厂根据你的鼠标情况指定,COM1为4, COM2为3, PS/2HardintDevice : public VDevicepuDlic::Virtual BOOL OnSysDynamicDevicelnit (); virtualBOOLOnSysDynamicDeviceExit (); hic VSharedHard ware I ntVSharedHardwarelnt (IRQ_NUM,0,0,0) ; ardwarelnt (VMHANDLE hVM);/ HARDINT.cpp mainmodule for VxD HARDINT#BOOL HardintDevice: : OnSysDynamicDevicelnit ()VMHANDLE hVM;hooked endl;pshint=new (Hardiw if (pshint)匚二謹 - 空吕hook failed! endl;return TRUE;BOOL HardintDevice: : OnSysDynamicDeviceExit ()空if (pshintyif (pshint.return TRUE;Int: : OnSharedHardwareInt (VMHANDLE hVM)55class VHotKeypublic:VHotKey (BYTE scan z scanType t st,乏.DWORD shift, DWORD flags, PVOID refData=O,DWORD delay=O);/构造函数VHotKey () unhook () ; ;/析构函数virtual VOIDhandler (BYTE scan,fkeyActiont ka, DWORD shift,PVOID refData,壬DWORD elapased) ;/热键处理程序BOOL亠 一 BOOLhook (); unhook ()/挂钩热键处理程序/摘钩热键处理程序VOIDlocalEnable (BOOL enable, VMHANDLE hVM);/在指定的虚拟机中允许或禁止热键事件VOIDstaticreflectToVM (VMHANDLE hVM, DWORD shift);/指示VxD把热键事件传到指定虚拟机中VOID cancelstate ();/取消热键57protected:一 DWORDBYTE scanType_tDWORD _BYTEPVOIDDWORDBYTEm_handle;m_scanCode;m_s can Type; m_shiftState ;mflags; mrefData; mtimeout;m_thunk HKTHUNKSIZE;59下面这个例子截获CtFl+P键,当按下这两个键时,将弹出一个 窗口,说明已经捕获。该例子也是用VtoolsD生成的可动态加载的 VxD框架,然后在VC6中修改的,我们只给出修改的部分。- include file for VxD HOTKEYI;, public; 粗virtual BOOL OnSysDynamicDevicelnit (); virtual BOOL OnSysDynamicDeviceExit (); ;二一 一f 4:VHotKvscan.VHotKey ( C SCAN, SCAN NORMAL, HKSS Ctrl,k eyAc t i on_ t k eyEven t z DVfORIX#BOOL HotkeyDevice: : OnSysDynamicDevicelnit ()二 二FALSE;return TRUE;61BOOL HotkeyDevice: : OnSysDynamicDeviceExit ()tapsnsed?jelding hajidler,r endl;age ( Get_Cur_VM_Handle ( ) ,MB_OK,z 0 z 0 z 0)/显示一个消息框ectToVM CGet_Cur_VMHandle () r shift); /将按键信息传送到当前虚拟机中63
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!