⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vxd-c3.htm

📁 汇编语言编写的虚拟驱动程序
💻 HTM
📖 第 1 页 / 共 3 页
字号:
  <TR>
    <TD>_<B><FONT face=Arial,Helvetica><FONT 
size=-1>LTEXT</FONT></FONT></B></TD>
    <TD><B><FONT face=Arial,Helvetica><FONT 
      size=-1>VxD_LOCKED_CODE_SEG</FONT></FONT></B></TD></TR>
  <TR>
    <TD><B><FONT face=Arial,Helvetica><FONT 
size=-1>_PTEXT</FONT></FONT></B></TD>
    <TD><B><FONT face=Arial,Helvetica><FONT 
      size=-1>VxD_PAGEABLE_CODE_SEG</FONT></FONT></B></TD></TR>
  <TR>
    <TD><B><FONT face=Arial,Helvetica><FONT 
    size=-1>_DBOCODE</FONT></FONT></B></TD>
    <TD><B><FONT face=Arial,Helvetica><FONT 
      size=-1>VxD_DEBUG_ONLY_CODE_SEG</FONT></FONT></B></TD></TR>
  <TR>
    <TD><B><FONT face=Arial,Helvetica><FONT 
size=-1>_ITEXT</FONT></FONT></B></TD>
    <TD><B><FONT face=Arial,Helvetica><FONT 
      size=-1>VxD_INIT_CODE_SEG</FONT></FONT></B></TD></TR>
  <TR>
    <TD><B><FONT face=Arial,Helvetica><FONT 
size=-1>_LDATA</FONT></FONT></B></TD>
    <TD><B><FONT face=Arial,Helvetica><FONT 
      size=-1>VxD_LOCKED_DATA_SEG</FONT></FONT></B></TD></TR>
  <TR>
    <TD><B><FONT face=Arial,Helvetica><FONT 
size=-1>_IDATA</FONT></FONT></B></TD>
    <TD><B><FONT face=Arial,Helvetica><FONT 
      size=-1>VxD_IDATA_SEG</FONT></FONT></B></TD></TR>
  <TR>
    <TD><B><FONT face=Arial,Helvetica><FONT 
size=-1>_PDATA</FONT></FONT></B></TD>
    <TD><B><FONT face=Arial,Helvetica><FONT 
      size=-1>VxD_PAGEABLE_DATA_SEG</FONT></FONT></B></TD></TR>
  <TR>
    <TD><B><FONT face=Arial,Helvetica><FONT 
size=-1>_STEXT</FONT></FONT></B></TD>
    <TD><B><FONT face=Arial,Helvetica><FONT 
      size=-1>VxD_STATIC_CODE_SEG</FONT></FONT></B></TD></TR>
  <TR>
    <TD><B><FONT face=Arial,Helvetica><FONT 
size=-1>_SDATA</FONT></FONT></B></TD>
    <TD><B><FONT face=Arial,Helvetica><FONT 
      size=-1>VxD_STATIC_DATA_SEG</FONT></FONT></B></TD></TR>
  <TR>
    <TD><B><FONT face=Arial,Helvetica><FONT 
    size=-1>_DBODATA</FONT></FONT></B></TD>
    <TD><B><FONT face=Arial,Helvetica><FONT 
      size=-1>VxD_DEBUG_ONLY_DATA_SEG</FONT></FONT></B></TD></TR>
  <TR>
    <TD><B><FONT face=Arial,Helvetica><FONT 
    size=-1>_16ICODE</FONT></FONT></B></TD>
    <TD><B><FONT face=Arial,Helvetica><FONT 
      size=-1>VxD_16BIT_INIT_SEG</FONT></FONT></B></TD></TR>
  <TR>
    <TD><B><FONT face=Arial,Helvetica><FONT 
size=-1>_RCODE</FONT></FONT></B></TD>
    <TD><B><FONT face=Arial,Helvetica><FONT 
      size=-1>VxD_REAL_INIT_SEG</FONT></FONT></B></TD></TR></TBODY></TABLE></CENTER>
<P><FONT face=Arial,Helvetica><FONT size=-1><FONT color=#ffffff>每个宏都有它相对应的结束宏,例如,如果你要在你的源文件中定义一个</FONT><B><FONT 
color=#ffff99>_LTEXT</FONT></B><FONT color=#ffffff>段,你应该这样写:</FONT></FONT></FONT> 
<BLOCKQUOTE><B><FONT face=Arial,Helvetica><FONT color=#66ff99><FONT 
  size=-1>VxD_LOCKED_CODE_SEG</FONT></FONT></FONT></B> 
  <P><B><FONT face=Arial,Helvetica><FONT size=-1>(把你的代码写在这里)</FONT></FONT></B> 
  <P><B><FONT face=Arial,Helvetica><FONT color=#66ff99><FONT 
  size=-1>VxD_LOCKED_CODE_ENDS</FONT></FONT></FONT></B></P></BLOCKQUOTE>
<H3><FONT face=Arial,Helvetica><FONT color=#66ffff><FONT size=+0>VxD结构</FONT></FONT></FONT></H3><FONT face=Arial,Helvetica><FONT 
color=#ffffff><FONT size=-1>现在你了解了LE文件里的段,我们可以继续来看一下源文件。你会发现VxD程序有一个特点,那就是它用了很多的宏。你可以看到在VxD中宏几乎无处不在,这都成为一个习惯了。这些宏用来隐藏一些底层的细节,也增加了源程序的可移植性。如果你有兴趣,你可以看一看像vmm.inc这一类的库文件中的这些宏的定义。</FONT></FONT></FONT> <BR><FONT face=Arial,Helvetica><FONT 
color=#ffffff><FONT size=-1>下面是VxD源文件结构:</FONT></FONT></FONT> <BR>&nbsp; 
<BLOCKQUOTE><B><FONT face=Arial,Helvetica><FONT color=#66ff99><FONT 
  size=-1>.386p</FONT></FONT></FONT></B> <BR><B><FONT face=Arial,Helvetica><FONT 
  color=#66ff99><FONT size=-1>include vmm.inc</FONT></FONT></FONT></B> 
  <P><B><FONT face=Arial,Helvetica><FONT color=#66ff99><FONT 
  size=-1>DECLARE_VIRTUAL_DEVICE FIRSTVXD,1,0, FIRSTVXD_Control, 
  UNDEFINED_DEVICE_ID, UNDEFINED_INIT_ORDER</FONT></FONT></FONT></B> 
  <P><B><FONT face=Arial,Helvetica><FONT color=#66ff99><FONT 
  size=-1>Begin_control_dispatch FIRSTVXD</FONT></FONT></FONT></B> <BR><B><FONT 
  face=Arial,Helvetica><FONT color=#66ff99><FONT size=-1>End_control_dispatch 
  FIRSTVXD</FONT></FONT></FONT></B> 
  <P><B><FONT face=Arial,Helvetica><FONT color=#66ff99><FONT 
  size=-1>end</FONT></FONT></FONT></B></P></BLOCKQUOTE>
<P><BR><FONT face=Arial,Helvetica><FONT color=#ffffff><FONT size=-1>这段源程序给人的第一印象就是:它并不像一个汇编源程序。那是因为它用了很多宏。让我们来分析一下源程序以便你能很快理解它。</FONT></FONT></FONT> 
<BLOCKQUOTE><B><FONT face=Arial,Helvetica><FONT color=#ffcc33><FONT 
  size=-1>.386p</FONT></FONT></FONT></B></BLOCKQUOTE><FONT 
face=Arial,Helvetica><FONT size=-1><FONT color=#ffffff>告诉编译器我们要使用包括CPU特权指令的80386指令系统。你也可以使用</FONT><B><FONT color=#ffcc33>.486p</FONT></B><FONT 
color=#ffffff>或者</FONT><B><FONT color=#ffcc33>.586p</FONT></B><FONT 
color=#ffffff>.</FONT></FONT></FONT> 
<BLOCKQUOTE><B><FONT face=Arial,Helvetica><FONT color=#ffcc33><FONT 
  size=-1>include vmm.inc</FONT></FONT></FONT></B></BLOCKQUOTE><FONT 
face=Arial,Helvetica><FONT color=#ffffff><FONT size=-1>你的每个VxD源程序都必须包含imm.inc,因为它包含了你在源程序里所要用到的宏的定义。你还可以根据需要包含其他的库文件。</FONT></FONT></FONT> 
<BLOCKQUOTE><B><FONT face=Arial,Helvetica><FONT color=#ffcc33><FONT 
  size=-1>DECLARE_VIRTUAL_DEVICE FIRSTVXD,1,0, FIRSTVXD_Control, 
  UNDEFINED_DEVICE_ID, 
UNDEFINED_INIT_ORDER</FONT></FONT></FONT></B></BLOCKQUOTE><FONT 
face=Arial,Helvetica><FONT size=-1><FONT color=#ffffff>正如我们刚才说的,VMM通过VxD程序的</FONT><B><FONT color=#ffff99>设备描述块(DDB)</FONT></B><FONT 
color=#ffffff>来获取它所需要知道的关于VxD的所有信息。一个设备描述块是一个结构,它包含了许多关于VxD的重要信息,比如VxD的名字,它的设备ID,它的VxD服务函数入口(如果有的话),等等。你可以在imm.inc里查一查这个结构,它被定义为</FONT><B><FONT 
color=#ffff99>VxD_Desc_Block</FONT></B><FONT color=#ffffff>。你必须在</FONT><B><FONT color=#ffff99>.DEF</FONT></B><FONT color=#ffffff> 
文件里导出这个结构。这个结构有22个数据,但是你只用填写其中的几个。然后vmm.inc包含的一个宏会为你初始化并填写这些数据。这个宏叫做</FONT><B><FONT 
color=#ffff99>DECLARE_VIRTUAL_DEVICE</FONT></B><FONT color=#ffffff>。它的格式如下:</FONT></FONT></FONT> 
<P><B><FONT face=Arial,Helvetica><FONT size=-1><FONT 
color=#66ff99>Declare_Virtual_Device&nbsp;&nbsp;</FONT><FONT color=#ffcc33> 
Name, MajorVer, MinorVer, CtrlProc, DeviceID, InitOrder, V86Proc, PMProc, 
RefData</FONT></FONT></FONT></B> 
<P><FONT face=Arial,Helvetica><FONT size=-1><FONT color=#ffffff>你可以看到:VxD源程序中的标号是不区分大小写的,你可以用大写,小写或者混合起来用都可以。让我们来看一下</FONT><B><FONT 
color=#ffff99>Declare_virtual_device</FONT></B><FONT 
color=#ffffff>里的每一个参数。</FONT></FONT></FONT> 
<UL>
  <LI><FONT face=Arial,Helvetica><FONT size=-1><B><FONT 
  color=#66ff99>Name</FONT></B><FONT color=#ffffff>&nbsp;  VxD的名字  最多8个字符。它</FONT><B><FONT 
  color=#ffff99>必须</FONT></B><FONT color=#ffffff>是大写!在系统中的所有VxD程序里,它们的名字不能重复,每个VxD的名字应该是唯一的。这个宏同时也会根据这个名字产生DDB的名字,产生的办法就是:在这个名字的后面加上</FONT><B><FONT color=#ffff99>_DDB</FONT></B><FONT 
  color=#ffffff>。所以如果你的VxD的名字是</FONT><B><FONT 
  color=#ffff99>FIRSTVXD</FONT></B><FONT color=#ffffff>,
  </FONT><B><FONT color=#ffff99>Declare_Virtual_Device</FONT></B><FONT 
  color=#ffffff>这个宏就会把DDB的名字定为</FONT><B><FONT 
  color=#ffff99>FIRSTVXD_DDB</FONT></B><FONT color=#ffffff>。记住,你还要在.DEF文件里导出DDB。所以你必须使DDB的名字和.DEF文件定义中的相同。</FONT></FONT></FONT> 
  <LI><FONT face=Arial,Helvetica><FONT size=-1><B><FONT 
  color=#66ff99>MajorVer</FONT></B><FONT color=#ffffff> 和 </FONT><B><FONT 
  color=#66ff99>MinorVer</FONT></B><FONT color=#ffffff> 你的VxD的主要的和次要的版本。</FONT></FONT></FONT> 
  <LI><FONT face=Arial,Helvetica><FONT size=-1><B><FONT 
  color=#66ff99>CtrlProc</FONT></B><FONT color=#ffffff>  你的VxD程序的</FONT><B><FONT color=#ffff99>设备控制函数</FONT></B><FONT 
  color=#ffffff>的名字。设备控制函数是一个接受和处理VxD程序的控制消息的函数。你可以把设备控制函数看作Window函数的等价物。既然我们要用</FONT><B><FONT color=#ffff99>Begin_Control_Dispatch</FONT></B><FONT 
  color=#ffffff>这个宏来生成我们的设备控制函数,那么我们应该使用一个标准格式的名字,那就是</FONT><B><FONT 
  color=#99ff99>VxD的名字</FONT><FONT color=#ffff99>_Control</FONT></B><FONT 
  color=#ffffff>。 </FONT><B><FONT 
  color=#ffff99>Begin_Control_Dispatch</FONT></B><FONT color=#ffffff>这个宏把</FONT><B><FONT color=#ffff99>_Control</FONT></B><FONT color=#ffffff> 
  加到它后面的那个名字上(而我们又通常把VxD的名字写在它后面)作为设备控制函数的名字,所以我们就应该把VxD的名字加上</FONT><B><FONT 
  color=#ffff99>_Control</FONT></B><FONT color=#ffffff>作为</FONT><B><FONT 
  color=#66ff99>CtrlProc</FONT></B><FONT color=#ffffff> 
 参数的值。</FONT></FONT></FONT> 
  <LI><FONT face=Arial,Helvetica><FONT size=-1><B><FONT 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -