📄 vxd-e5.html
字号:
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>EndProc
OnVMClose</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>VxD_PAGEABLE_CODE_ENDS</font></font></font></b>
<p><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>end</font></font></font></b></blockquote>
<h3>
<font face="Arial,Helvetica"><font color="#66FFFF"><font size=+0>Analysis:</font></font></font></h3>
<blockquote><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>Begin_control_dispatch
MESSAGE</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#FFFF99"><font size=-1>
Control_Dispatch Create_VM, OnVMCreate</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#FFFF99"><font size=-1>
Control_Dispatch VM_Terminate2, OnVMClose</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>End_control_dispatch
MESSAGE</font></font></font></b></blockquote>
<font face="Arial,Helvetica"><font size=-1><font color="#CCCCCC">The VxD
processes two control messages, </font><b><font color="#FFFF99">Create_VM</font></b><font color="#CCCCCC">
and </font><b><font color="#FFFF99">VM_Terminate2</font></b><font color="#CCCCCC">.
When </font><b><font color="#FFFF99">Create_VM </font></b><font color="#CCCCCC">control
message is received, it calls </font><b><font color="#FFFF99">OnVMCreate</font></b><font color="#CCCCCC">
procedure. And when it receives </font><b><font color="#FFFF99">VM_Terminate2
</font></b><font color="#CCCCCC">message,
it calls </font><b><font color="#FFFF99">OnVMClose</font></b><font color="#CCCCCC">
procedure.</font></font></font>
<blockquote><b><font face="Arial,Helvetica"><font color="#FFFF99"><font size=-1>VxD_PAGEABLE_DATA_SEG</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
MsgTitle db "VxD MessageBox",0</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
VMCreated db "A VM is created",0</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
VMDestroyed db "A VM is destroyed",0</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#FFFF99"><font size=-1>VxD_PAGEABLE_DATA_ENDS</font></font></font></b></blockquote>
<font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>We put
the data in the pageable data segment.</font></font></font>
<blockquote><b><font face="Arial,Helvetica"><font size=-1><font color="#FFCC33">BeginProc</font><font color="#CCCCCC">
OnVMCreate</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1><font color="#CCCCCC">
mov ecx, </font><font color="#FFCC33">OFFSET32</font><font color="#CCCCCC">
VMCreated</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>CommonCode:</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1><font color="#FFCC33">
VMMCall </font><font color="#CCCCCC">Get_sys_vm_handle</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
mov eax,MB_OK+MB_ICONEXCLAMATION</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1><font color="#CCCCCC">
mov edi, </font><font color="#FFCC33">OFFSET32 </font><font color="#CCCCCC">MsgTitle</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
xor esi,esi</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
xor edx,edx</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1><font color="#CCCCCC">
</font><font color="#FFCC33">VxDCall </font><font color="#CCCCCC">SHELL_Message</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
ret</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1><font color="#FFCC33">EndProc
</font><font color="#CCCCCC">OnVMCreate</font></font></font></b></blockquote>
<font face="Arial,Helvetica"><font size=-1><b><font color="#FFFF99">OnVMCreate</font></b><font color="#CCCCCC">
procedure is created using </font><b><font color="#FFFF99">BeginProc</font></b><font color="#CCCCCC">
and </font><b><font color="#FFFF99">EndProc</font></b><font color="#CCCCCC">
macros. It puts the parameters for </font><b><font color="#FFFF99">SHELL_Message</font></b><font color="#CCCCCC">
service into the registers. Since we want to display the message box in
the system VM, we cannot use the value in ebx (which is the handle of the
VM that is being created). Instead, we use a VMM service, </font><b><font color="#FFFF99">Get_Sys_VM_Handle</font></b><font color="#CCCCCC">,
to obtain the VM handle of the system VM. This service returns the VM handle
in ebx. We put the addresses of the message and the caption into ecx and
edi, respectively. We don't want to know the response of the user, so we
zero out esi and edx. When all parameters are in the appropriate registers,
we call</font><b><font color="#FFFF99"> SHELL_Message </font></b><font color="#CCCCCC">to
display the message box.</font></font></font>
<blockquote><b><font face="Arial,Helvetica"><font size=-1><font color="#FFCC33">BeginProc
</font><font color="#CCCCCC">OnVMClose</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
mov ecx,OFFSET32 VMDestroyed</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
jmp CommonCode</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1><font color="#FFCC33">EndProc</font><font color="#CCCCCC">
OnVMClose</font></font></font></b></blockquote>
<font face="Arial,Helvetica"><font size=-1><b><font color="#FFFF99">OnVMClose</font></b><font color="#CCCCCC">procedure
is simplicity in itself. Since it uses identical code as </font><b><font color="#FFFF99">OnVMCreate</font></b><font color="#CCCCCC">,
it initializes ecx with the address of the different message and then jumps
to the code inside </font><b><font color="#FFFF99">OnVMCreate</font></b><font color="#CCCCCC">.</font></font></font>
<h3>
<font face="Arial,Helvetica"><font color="#66FFFF"><font size=+0>Module
Definition File</font></font></font></h3>
<blockquote><b><tt><font color="#CCCCCC"><font size=-1>VXD MESSAGE</font></font></tt></b><tt></tt>
<p><b><tt><font color="#CCCCCC"><font size=-1>SEGMENTS</font></font></tt></b>
<br><b><tt><font color="#CCCCCC"><font size=-1> _LPTEXT
CLASS 'LCODE' PRELOAD NONDISCARDABLE</font></font></tt></b>
<br><b><tt><font color="#CCCCCC"><font size=-1> _LTEXT
CLASS 'LCODE' PRELOAD NONDISCARDABLE</font></font></tt></b>
<br><b><tt><font color="#CCCCCC"><font size=-1> _LDATA
CLASS 'LCODE' PRELOAD NONDISCARDABLE</font></font></tt></b>
<br><b><tt><font color="#CCCCCC"><font size=-1> _TEXT
CLASS 'LCODE' PRELOAD NONDISCARDABLE</font></font></tt></b>
<br><b><tt><font color="#CCCCCC"><font size=-1> _DATA
CLASS 'LCODE' PRELOAD NONDISCARDABLE</font></font></tt></b>
<br><b><tt><font color="#CCCCCC"><font size=-1> CONST
CLASS 'LCODE' PRELOAD NONDISCARDABLE</font></font></tt></b>
<br><b><tt><font color="#CCCCCC"><font size=-1> _TLS
CLASS 'LCODE' PRELOAD NONDISCARDABLE</font></font></tt></b>
<br><b><tt><font color="#CCCCCC"><font size=-1> _BSS
CLASS 'LCODE' PRELOAD NONDISCARDABLE</font></font></tt></b>
<br><b><tt><font color="#CCCCCC"><font size=-1> _LMGTABLE
CLASS 'MCODE' PRELOAD NONDISCARDABLE IOPL</font></font></tt></b>
<br><b><tt><font color="#CCCCCC"><font size=-1> _LMSGDATA
CLASS 'MCODE' PRELOAD NONDISCARDABLE IOPL</font></font></tt></b>
<br><b><tt><font color="#CCCCCC"><font size=-1> _IMSGTABLE
CLASS 'MCODE' PRELOAD DISCARDABLE IOPL</font></font></tt></b>
<br><b><tt><font color="#CCCCCC"><font size=-1> _IMSGDATA
CLASS 'MCODE' PRELOAD DISCARDABLE IOPL</font></font></tt></b>
<br><b><tt><font color="#CCCCCC"><font size=-1> _ITEXT
CLASS 'ICODE' DISCARDABLE</font></font></tt></b>
<br><b><tt><font color="#CCCCCC"><font size=-1> _IDATA
CLASS 'ICODE' DISCARDABLE</font></font></tt></b>
<br><b><tt><font color="#CCCCCC"><font size=-1> _PTEXT
CLASS 'PCODE' NONDISCARDABLE</font></font></tt></b>
<br><b><tt><font color="#CCCCCC"><font size=-1> _PMSGTABLE
CLASS 'MCODE' NONDISCARDABLE IOPL</font></font></tt></b>
<br><b><tt><font color="#CCCCCC"><font size=-1> _PMSGDATA
CLASS 'MCODE' NONDISCARDABLE IOPL</font></font></tt></b>
<br><b><tt><font color="#CCCCCC"><font size=-1> _PDATA
CLASS 'PDATA' NONDISCARDABLE SHARED</font></font></tt></b>
<br><b><tt><font color="#CCCCCC"><font size=-1> _STEXT
CLASS 'SCODE' RESIDENT</font></font></tt></b>
<br><b><tt><font color="#CCCCCC"><font size=-1> _SDATA
CLASS 'SCODE' RESIDENT</font></font></tt></b>
<br><b><tt><font color="#CCCCCC"><font size=-1> _DBOSTART
CLASS 'DBOCODE' PRELOAD NONDISCARDABLE CONFORMING</font></font></tt></b>
<br><b><tt><font color="#CCCCCC"><font size=-1> _DBOCODE
CLASS 'DBOCODE' PRELOAD NONDISCARDABLE CONFORMING</font></font></tt></b>
<br><b><tt><font color="#CCCCCC"><font size=-1> _DBODATA
CLASS 'DBOCODE' PRELOAD NONDISCARDABLE CONFORMING</font></font></tt></b>
<br><b><tt><font color="#CCCCCC"><font size=-1> _16ICODE
CLASS '16ICODE' PRELOAD DISCARDABLE</font></font></tt></b>
<br><b><tt><font color="#CCCCCC"><font size=-1> _RCODE
CLASS 'RCODE'</font></font></tt></b><tt></tt>
<p><b><tt><font color="#CCCCCC"><font size=-1>EXPORTS</font></font></tt></b><tt></tt>
<p><b><tt><font color="#CCCCCC"><font size=-1> MESSAGE_DDB
@1</font></font></tt></b></blockquote>
<h3>
<font face="Arial,Helvetica"><font color="#66FFFF"><font size=+0>Assembling
process</font></font></font></h3>
<b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1> ml
-coff -c -Cx -DMASM6 -DBLD_COFF -DIS_32 message.asm</font></font></font></b>
<p><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1> link
-vxd -def:message.def message.obj</font></font></font></b>
<h3>
<font face="Arial,Helvetica"><font color="#66FFFF"><font size=+0>VxD Installation</font></font></font></h3>
<ol>
<li>
<font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>Put message.vxd
in \system folder</font></font></font></li>
<li>
<font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>add the
following line inside [386enh] section of system.ini</font></font></font></li>
<ol><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>device=message.vxd</font></font></font></ol>
<li>
<font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>reboot
your computer</font></font></font></li>
</ol>
<h3>
<font face="Arial,Helvetica"><font color="#66FFFF"><font size=+0>Testing
the VxD</font></font></font></h3>
<font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>Create
a DOS box. You will see the message box, displaying the message, "A VM
is created". When you close the DOS box, a message box appears with the
message, "A VM is destroyed".</font></font></font>
<br>
<hr WIDTH="100%">
<center><b>[<a href="http://win32asm.cjb.net">Iczelion's Win32 Assembly
Homepage</a>]</b></center>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -