VxD认识

vxd驱动开发之监控文件的读写,监视文件操作.zip 立即下载

一.  .vxd文件是什么?vb中如何用它?

 

VXD是虚拟设备驱动,它通常完成一些系统底层的工作。调用VXD一般时利用Windows API的CreateFile打开设备,然后利用DeviceIoControl来调用VXD。具体的调用办法是由VXD的设计者规定的,需要查看有关的文档说明。

 

 

二.  怎样生成.vxd文件?

 

VxD入门教程    
   
   
  1.背景知识    
   
  为了看懂本篇所给的例子,需要C,   汇编及Windows   设备驱动程序的相关知识。    
   
  2.开发工具    
   
  需要   Microsoft   Visual   C++   2.0   以上版本,MASM   6.11C,   及Windows   95   DDK(以下采    
  用   VC++   6.0   为例)    
   
  3.目的    
   
  利用以上所列的开发工具,编写一个动态装入的   VxD,   利用该VxD可以读取内存地址0    
  处的中断向量表。    
   
  4.开始    
   
  第一步:    
   
  用   VC++   新建一个工程,取名为   MiniVxd,   类型为   Win32   App   或   Console   App因为V    
  C++不提供直接生成    
   
  VxD的App   Wizard,所以只好自己在以上两种App中选择一个,然后再进行手工修改一下    
  ,需要修改的内容    
   
  只有一处,即在   Link   的命令行上加上一个选项    
   
  /VXD    
   
  第二步:    
   
  新建一个空文件,在其中输入以下代码:    
   
  TITLE   MINIVXD   -   By   Ding   Kai    
   
  .386p    
   
  include   vmm.inc    
   
   
  MINIVXD_DYNAMIC   EQU   1    
   
  ;   定义设备驱动程序块   DDB,   由于是动态装入的,所以设备ID和装入顺序可以取未定    
  义值.    
   
  DECLARE_VIRTUAL_DEVICE   MINIVXD,   1,   0,   MsgDispatch,UNDEFINED_DEVICE_ID,    
   
  Undefined_Init_Order,   0,   0    
   
  VXD_LOCKED_CODE_SEG    
   
  ;   定义消息派遣表,本例中只需要一条消息,即W32_DEVICEIOCONTROL,用于从Win32Ap    
  p中利用    
   
  ;   DeviceIoControl   API函数同本VxD进行通讯.    
   
   
  BeginProc   MsgDispatch    
   
  Control_Dispatch   W32_DEVICEIOCONTROL,   W32DeviceIoControl,   sCall,    
   
   
  clc    
   
  ret    
   
  EndProc   MsgDispatch    
   
   
  VXD_LOCKED_CODE_ENDS    
   
  END    
   
   
  将文件存盘,文件名取为   VxdStub.asm,   然后用下列命令编译该文件:    
   
  Aml   -coff   -W2   -DBLD_COFF   -DIS_32   -c   -Cx   -DMASM6   -I/95DDK/INC32   VxdStub.asm    
   
   
  这将会生成   vxdstub.obj,将此OBJ文件加入到工程文件中。    
   
   
  第三步:    
   
  创建一个   C   语言文件,文件名取为   MiniVxd.c,在文件中输入以下代码:    
   
  #define   WIN40SERVICES    
   
  #pragma   warning   (disable:4229)    
   
  #include    
   
  #define   WANTVXDWRAPS    
   
  #pragma   intrinsic(memcpy)    
   
  #pragma   VxD_LOCKED_DATA_SEG    
   
   
  //   此处可以定义任何在VxD中需要的全局变量.    
   
  char   AnyData[200];    
   
  #pragma   VxD_LOCKED_CODE_SEG    
   
  ///////////////////////////////////////////    
   
  DWORD   __stdcall   GetMemory(   DWORD   dwDDB,   PDIOCPARAMETERS   pD   )    
   
  {    
   
  BYTE   *p;    
   
  //   此处忽略了参数检查,实际应用中切不可如此   !!    
   
  p   =   (PBYTE)pD->lpvOutBuffer;    
   
  memcpy(p,   0,   1024);   //   读取中断向量表,共   1024   字节    
   
  return   1024;    
   
  }    
   
  ///////////////////////////////////////////////////////    
   
  /*   Win32   interface   */    
   
  ///////////////////////////////////////////////////////    
   
  int   __stdcall    
   
  W32DeviceIoControl(   DWORD   dwIoCtrlCode,   /*ecx*/    
   
  DWORD   dwDDB,   /*ebx*/    
   
  DWORD   pDIOCParams   )   /*esi*/    
   
  {    
   
  PDIOCPARAMETERS   pD;    
   
  pD   =   (PDIOCPARAMETERS)pDIOCParams;    
   
  if   (   dwIoCtrlCode   ==   DIOC_OPEN   ||    
   
  dwIoCtrlCode   ==   DIOC_CLOSEHANDLE)    
   
  return   0L;    
   
  //   Init   returned   value    
   
  if   (pD->lpcbBytesReturned)    
   
  *(DWORD   *)pD->lpcbBytesReturned   =   0;    
   
  if   (dwIoCtrlCode==1)   {   //   1   =   DeviceIoControl代码    
   
  GetMemory(dwDDB,   pD);    
   
  }    
   
  else    
   
  return   ERROR_NOT_SUPPORTED;    
   
  return   0;    
   
  }    
   
  将本文件加入到工程文件中.    
   
   
  第四步:    
   
  创建一个模块定义文件,此文件将要定义最终生成的VxD文件的段属性并输出设备驱动    
  程序块,    
   
  输入下面的代码,并将文件存为   MiniVxd.def,同时将其加入到工程文件中.    
   
  VXD   MINIVXD   DYNAMIC    
   
  DESCRIPTION   'Written   by   Ding   Kai'    
   
  SEGMENTS    
   
  _LTEXT   CLASS   'LCODE'   PRELOAD   NONDISCARDABLE    
   
  _LDATA   CLASS   'LCODE'   PRELOAD   NONDISCARDABLE    
   
  _TLS   CLASS   'LCODE'   PRELOAD   NONDISCARDABLE    
   
  _BSS   CLASS   'LCODE'   PRELOAD   NONDISCARDABLE    
   
  _ITEXT   CLASS   'ICODE'   DISCARDABLE    
   
  _IDATA   CLASS   'ICODE'   DISCARDABLE    
   
  _PTEXT   CLASS   'PCODE'   NONDISCARDABLE    
   
  _PDATA   CLASS   'PDATA'   NONDISCARDABLE   SHARED    
   
  HEAPSIZE   10240    
   
  STACKSIZE   40960    
   
  EXPORTS    
   
  MINIVXD_DDB   @1    
   
   
  当然,其中有些段在本程序中不存在,此处列出来是想将此文件做为一个模板以供以    
  后使用。    
   
   
  第五步:    
   
  加入本工程文件需要的最后一个,VxdWarps.clb,   这个文件是DDK的LIB目录中.    
   
  第六步:    
   
  所需的四个文件已经全部加入完毕,它们是:    
   
  vxdstub.obj    
   
  minivxd.c    
   
  minivxd.def    
   
  vxdwarps.clb    
   
   
  在进行make之前请检查一下文件路径,   在   Include   中一定要包含   DDK   目录中的INC3    
  2   目录.    
   
  确认无误后可以按   F7   键进行   Make   了。    
   
   
  结果会在   DEBUG   目录或   Release   目录   (依赖于工程文件的设置)   生成MiniVxd.vxd    
  文件。    
   
   
  至此,一个小小的Vxd文件生成完毕,   可以在程序中用下面的代码与本VxD进行通讯.    
   
   
   
  BYTE   buffer[1024];    
   
  DeviceIoControl(hVxd,   1,   NULL,   NULL,   buffer,   1024,   NULL,   0);    
   
   
  结果,当前的中断向量表就会出现在   buffer   数组中。    
   
  本文不再提供完整的测试程序,需要的话请与作者联系    
   
  5.小结    
   
   
  本文用一个简单的示例介绍了如何在   Windows   95   下编写可动态安装的   VxD,   这种方    
  法及用这种方法    
   
  编写的VxD在Windows   98   下同样适用。然而,在   Windows   NT   不能采用这种方法    
   
   
   
  **************************************************************************    
  *******************************************    
   
  标   题:   VxD世界——虚拟的Windows世界    
   
   
  从事Windows系统编程的读者一定听说过VxD──这个在Windows(注:指Windows   3.1    
  /95/98,    
   
  非Windows   NT)的世界里无所不能的超级武器。迄今为

 

 

第一篇 windows驱动之WinRing0.sys的开发及使用(电脑温度监控软件开发) 从鲁大师的温度监控谈起,现代的CPU、GPU等芯片一般都具有温度监控的功能,比如我们可能会遇到的电脑散热不好导致系统直接关机黑屏,就是cpu检测到当前温度高于额定温度执行的操作。鲁大师的温度监控模块就相当于把这些信息从底层硬件读取,然后通过上层UI显示给用户。其核心就是与硬件的通信驱动。现在win10的驱动都可以通过系统更新直接完成,不再需要安装流氓软件“驱动精灵”、“驱动人生”等。我一般只用到温度检测模块,其他功能于我都是鸡肋,为了一个很小的功能,我需要安装一个庞大的鲁大师程序,甚是不划算。 阅读详情

相关推荐

VxD技术及其在实时反病毒中的应用

VC:VxD技术及其在实时反病毒中的应用 (11/03/1999)  目前国内的Windows9x平台反病毒产品大多属静态反病毒软件,指导思想是"以杀为主",这一方式的缺点是病毒在被清除之前可能早已造成了严重危害一个好的反病毒软件应该是"以防为主,以杀为辅",在病毒入侵时就把它清除掉,这就是实时反病毒技术。   ----Windows9x使用IntelCPU的Ring0

8080的专栏 1110

VXD技术漫谈(1) (转)

VXD技术漫谈(1) (转)[@more@]VXD技术漫谈(1) 说起VxD技术,很多接触电脑的人都会感到陌生,不过提起cih病毒,我相信您一定不再摇头。  有过一定windows编程经验的人可能听说过VxD这个词。80...

circularr9834的博客 284

虚拟设备驱动程序结构(Vxd教程3)

虚拟设备驱动程序结构 由 Ryo 翻译,发表于 http://asm.yeah.net,英文版本来自 [Iczelions Win32 Assembly Homepage] 现在大家对vmm和vxd有了一定的了解,接下来我们来看一看如何编写vxd代码。首先,你必须具备Windows 95/98 Device Driver Development Kit。Window95 dd

讲武堂-Jiangtao 3914

Windows驱动开发VXD/WDM/WDF/DDK/WDK的联系和区别

背景介绍 首先,先从基础的东西说起,做任何程序的开发,你都需要一个配套的开发套件,专业术语叫做SDK(Software Development Kit,软件开发套件)。比如:开发JAVA程序,我们可能需要一个JDK。那么,开发WINDOWS应用程序,我们同样需要WINDOWS的SDK。而想要开发WINDOWS下的驱动程序,我们则需要一个DDK/WDK。 具体概念 OK,下面来具体谈谈VXD/WDM...

不积跬步,无以至千里! 6077

VxD技术

Windows9x平台反病毒产品大多属静态反病毒软件,指导思想是"以杀为主",这一方式的缺点是病毒在被清除之前可能早已造成了严重危害一个好的反病毒软件应该是"以防为主,以杀为辅",在病毒入侵时就把它清除掉,这就是实时反病毒技术。  Windows9x使用IntelCPU的Ring0和Ring3两个保护级。系统进程运行于Ring0,因而具有

fisher_jiang的专栏 2528

浅谈VxD驱动开发

1、VxD和VM        VxD是用于Windows/386(包括Windows 3.x和Windows 9x)上的驱动模型。VxD的全称是指Virtual xxx Device,在Windows 9.x下其扩展名为.vxd,这里的xxx是指代某种类型的硬件设备。VxD可以直接访问硬件设备,为应用程序提供访问硬件设备的接口(包括访问内存空间,读写IO端口,中断处理等)。        Windows 9.x中运行这多种应用程序(超级程序,DOS应用程序,WIN16应用程序,WIN32应用程序),如下

2205

iczelion Vxd cntut6

DeviceIoControl接口在这一节中我们将要关于学习动态VXD,特别是如何创建,加载和使用。点击这里下载例子VxD接口VxD总共提供了4种接口。l         VxD services                    VxD服务l         V86 Interface                   V86接口l         Prot

jimgreen的专栏 924

iczelion Vxd tut6

 DeviceIoControl InterfaceWe will learn about dynamic VxD in this tutorial. Specifically, we will learn how to create, load and use them. VxD InterfacesThere are a total of 4 interfaces that VxD

jimgreen的专栏 786

iczelion Vxd tut4

 VxD Programming: PrimerWe know how to build a VxD which does nothing. In this tutorial, we will make it more productive by adding control message handlers. VxD Initialization and TerminationThe

jimgreen的专栏 742

VxD编程入门教程

VxD编程入门教程作者:TBsoft--------------------------------------------------------------------------------一、Windows 95 DDK的安装安装Windows 95 DDK一般需要先安装Win32 SDK,原因是Windows 95 DDK需要Win32 SDK的16位资源编译器,但是Win3

lithe的Blog 2076

VxD入门教程

VxD入门教程 站长多次与丁凯联系,但邮件都被退回来了,可能他的邮箱不能用了罢。  1.背景知识    为了看懂本篇所给的例子,需要C, 汇编及Windows 设备驱动程序的相关知识。   2.开发工具    需要 Microsoft Visual C++ 2.0 以上版本,MASM 6.11C, 及Windows 95 DDK    (以下采用 VC++ 6.0 为例) 3.目的   

xiezhsh的专栏 1509

VXD,KMD,WDM基本概念 作者:陆麟

 VXD,KMD,WDM基本概念作者:陆麟 来来来,一起进入这黑黑的驱动程序世界.:) 这里要讲的是Vxd,Kernel Mode Driver,和WDM的一些基本问题. 什么是VxD?   VxD乃 VIRTUAL X DRIVER.哎,说了也白说.其实就是虚拟设备驱动程序.是系统用于对各种硬件资源识别,管理,维护运作的扩展.VXD和VMM(虚拟机管理器)一起合作,维持着系统的运

eternalee的专栏 2747

VXD技术漫谈(1)

VXD技术漫谈(1)        说起VxD技术,很多接触电脑的人都会感到陌生,不过提起CIH病毒,我相信您一定不再摇头。  有过一定Windows编程经验的人可能听说过VxD这个词。80386的保护模式给了我们非常多的“保护”,对于一个不懈地追求自由的人来说,“镀金的笼子也是笼子”,翻遍Windows编程的书籍,也许最终只找到这样一扇通向自由的门:试一试VxD。  VxD是什么?为什么

silver的专栏 2078

Iczelion 的 Win32Asm VxD 汇编教程 (四)

VxD 程序设计入门We 我们在上一节学会了如何编写一个什么事也不做的VxD程序。在这一节里,我们要给它增加处理控制消息的功能。 VxD的初始化和结束VxD程序分为两种:静态的和动态的。每种的加载方法都不同,接受到的初始化和结束的控制消息也不同。 静态VxD:下列情况下,VMM加载一个静态VxD: 一个实模式常驻程序通过调用中断2FH,1605H,来调用此VxD。 此VxD

kingzeus的专栏 946

iczelion Vxd cntut4

VxD 程序设计入门We 我们在上一节学会了如何编写一个什么事也不做的VxD程序。在这一节里,我们要给它增加处理控制消息的功能。 VxD的初始化和结束VxD程序分为两种:静态的和动态的。每种的加载方法都不同,接受到的初始化和结束的控制消息也不同。 静态VxD:下列情况下,VMM加载一个静态VxD: 一个实模式常驻程序通过调用中断2FH,1605H,来调用此VxD

jimgreen的专栏 946

iczelion Vxd cntut3

 虚拟设备驱动程序结构现在大家对vmm和vxd有了一定的了解,接下来我们来看一看如何编写vxd代码。首先,你必须具备Windows 95/98 Device Driver Development Kit。Window95 ddk只有MSDN 订户才能拿到,但Windows98 ddk却可以免费从Microsoft公司取得。尽管Windows 98 ddk是面向WDM的,但你还是

jimgreen的专栏 1006

使用Windows 95虚拟设备驱动程序(VxD)

大家知道整天都在讨论的CIH病毒利用了VxD技术,掌握了VxD 编程,就等于破除了CIH 病毒神话,彻底清除CIH 病毒。仔细学习这篇文章。VxD介绍本文介绍VxD的作用。如果Windows 95提供的标准VxD对你的硬件或者软件不能提供100%的兼容支持,你需要为你的硬件或者软件(包括16位和32位软件) 创建VxD。如果你想让Windows用户使用你的硬件或者软件的某些新特征,你也可以创建

pwhome的专栏 1668

用VC6.0集成环境快速开发VxD

                                                    作者/马飞涛VxD (Virtual Device Driver), 即虚拟设备驱动程序, 是运行在处理器Ring0特权级别的驱动程序,可以执行任何处理器指令,访问机器中的任何数据寄存器。VxD被用作Windows 9x系统和物理设备之间的接口,扩展了WINDOWS 系统的核心服务,能够访问

曾登高 3428
上一篇: 编写服务端可能会遇到的第一个问题
下一篇: LoadRunner学习系列——Analysis图分类说明
mosquitowen
博客等级 码龄19年 16粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值