📄 vxd-e6.html
字号:
<font face="Arial,Helvetica"><font size=-1><b><font color="#66FF99">tagProces</font></b>
is the process tag</font></font></li>
</ul>
<font face="Arial,Helvetica"><font size=-1>From <b><font color="#FFFF99">DIOCParams</font></b>
structure, you have all the information the win32 application passed to
your VxD.</font></font>
<br><font face="Arial,Helvetica"><font size=-1>Your VxD must at least process
<b><font color="#FFFF99">DIOC_Open</font></b>
(a value passed in dwIoControlCode) which <b><font color="#FFCC33">VWIN32</font></b>
will send to your VxD when a win32 application calls CreateFile to open
your VxD. If your VxD is ready, it must return 0 in eax and CreateFile
call will be successful. If your VxD is not ready, it must return a nonzero
value in eax and CreateFile will fail. Other than <b><font color="#FFFF99">DIOC_Open</font></b>,
your VxD will receive <b><font color="#FFFF99">DIOC_Closehandle</font></b>
code from <b><font color="#FFCC33">VWIN32</font></b> when the win32 application
closes the device handle.</font></font>
<h3>
<font face="Arial,Helvetica"><font color="#66FFFF"><font size=+0>Minimum
dynamic VxD skeleton that is loadable by CreateFile</font></font></font></h3>
<blockquote><b><font face="Arial,Helvetica"><font size=-1>.386p</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>include vmm.inc</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>include vwin32.inc</font></font></b>
<p><b><font face="Arial,Helvetica"><font size=-1>DECLARE_VIRTUAL_DEVICE
DYNAVXD,1,0, DYNAVXD_Control,\</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>
UNDEFINED_DEVICE_ID, UNDEFINED_INIT_ORDER</font></font></b>
<p><b><font face="Arial,Helvetica"><font size=-1>Begin_control_dispatch
DYNAVXD</font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#FFFF99"><font size=-1>
Control_Dispatch w32_DeviceIoControl, OnDeviceIoControl</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>End_control_dispatch
DYNAVXD</font></font></b>
<p><b><font face="Arial,Helvetica"><font size=-1>VxD_PAGEABLE_CODE_SEG</font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#FFFF99"><font size=-1>BeginProc
OnDeviceIoControl</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#FFFF99"><font size=-1>
assume esi:ptr DIOCParams</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#FFFF99"><font size=-1>
.if [esi].dwIoControlCode==DIOC_Open</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#FFFF99"><font size=-1>
xor eax,eax</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#FFFF99"><font size=-1>
.endif</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#FFFF99"><font size=-1>
ret</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#FFFF99"><font size=-1>EndProc
OnDeviceIoControl</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>VxD_PAGEABLE_CODE_ENDS</font></font></b>
<p><b><font face="Arial,Helvetica"><font size=-1>end</font></font></b></blockquote>
<b><font face="Arial,Helvetica"><font size=-1>;--------------------------------------------------------------------------------------------------------------------------------</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>; Module
Definition File</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>;---------------------------------------------------------------------------------------------------------------------------------</font></font></b>
<blockquote><b><tt><font size=-1>VXD DYNAVXD<font color="#FFFF99"> DYNAMIC</font></font></tt></b><tt></tt>
<p><b><tt><font size=-1>SEGMENTS</font></tt></b>
<br><b><tt><font size=-1> _LPTEXT
CLASS 'LCODE' PRELOAD NONDISCARDABLE</font></tt></b>
<br><b><tt><font size=-1> _LTEXT
CLASS 'LCODE' PRELOAD NONDISCARDABLE</font></tt></b>
<br><b><tt><font size=-1> _LDATA
CLASS 'LCODE' PRELOAD NONDISCARDABLE</font></tt></b>
<br><b><tt><font size=-1> _TEXT
CLASS 'LCODE' PRELOAD NONDISCARDABLE</font></tt></b>
<br><b><tt><font size=-1> _DATA
CLASS 'LCODE' PRELOAD NONDISCARDABLE</font></tt></b>
<br><b><tt><font size=-1> CONST
CLASS 'LCODE' PRELOAD NONDISCARDABLE</font></tt></b>
<br><b><tt><font size=-1> _TLS
CLASS 'LCODE' PRELOAD NONDISCARDABLE</font></tt></b>
<br><b><tt><font size=-1> _BSS
CLASS 'LCODE' PRELOAD NONDISCARDABLE</font></tt></b>
<br><b><tt><font size=-1> _LMGTABLE
CLASS 'MCODE' PRELOAD NONDISCARDABLE IOPL</font></tt></b>
<br><b><tt><font size=-1> _LMSGDATA
CLASS 'MCODE' PRELOAD NONDISCARDABLE IOPL</font></tt></b>
<br><b><tt><font size=-1> _IMSGTABLE CLASS
'MCODE' PRELOAD DISCARDABLE IOPL</font></tt></b>
<br><b><tt><font size=-1> _IMSGDATA
CLASS 'MCODE' PRELOAD DISCARDABLE IOPL</font></tt></b>
<br><b><tt><font size=-1> _ITEXT
CLASS 'ICODE' DISCARDABLE</font></tt></b>
<br><b><tt><font size=-1> _IDATA
CLASS 'ICODE' DISCARDABLE</font></tt></b>
<br><b><tt><font size=-1> _PTEXT
CLASS 'PCODE' NONDISCARDABLE</font></tt></b>
<br><b><tt><font size=-1> _PMSGTABLE CLASS
'MCODE' NONDISCARDABLE IOPL</font></tt></b>
<br><b><tt><font size=-1> _PMSGDATA
CLASS 'MCODE' NONDISCARDABLE IOPL</font></tt></b>
<br><b><tt><font size=-1> _PDATA
CLASS 'PDATA' NONDISCARDABLE SHARED</font></tt></b>
<br><b><tt><font size=-1> _STEXT
CLASS 'SCODE' RESIDENT</font></tt></b>
<br><b><tt><font size=-1> _SDATA
CLASS 'SCODE' RESIDENT</font></tt></b>
<br><b><tt><font size=-1> _DBOSTART
CLASS 'DBOCODE' PRELOAD NONDISCARDABLE CONFORMING</font></tt></b>
<br><b><tt><font size=-1> _DBOCODE
CLASS 'DBOCODE' PRELOAD NONDISCARDABLE CONFORMING</font></tt></b>
<br><b><tt><font size=-1> _DBODATA
CLASS 'DBOCODE' PRELOAD NONDISCARDABLE CONFORMING</font></tt></b>
<br><b><tt><font size=-1> _16ICODE
CLASS '16ICODE' PRELOAD DISCARDABLE</font></tt></b>
<br><b><tt><font size=-1> _RCODE
CLASS 'RCODE'</font></tt></b><tt></tt>
<p><b><tt><font size=-1>EXPORTS</font></tt></b>
<br><b><tt><font size=-1> DYNAVXD_DDB @1</font></tt></b></blockquote>
<h3>
<font face="Arial,Helvetica"><font color="#66FFFF"><font size=+0>Full Example</font></font></font></h3>
<font face="Arial,Helvetica"><font size=-1>Below are the source code of
the win32 application that loads a dynamic VxD and calls a function in
the VxD via DeviceIoControl API.</font></font>
<p><font face="Arial,Helvetica"><font size=-1>; VxDLoader.asm</font></font>
<blockquote><b><font face="Arial,Helvetica"><font size=-1>.386</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>.model flat,stdcall</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>include windows.inc</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>include kernel32.inc</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>includelib kernel32.lib</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>include user32.inc</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>includelib user32.lib</font></font></b>
<p><b><font face="Arial,Helvetica"><font size=-1>.data</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1> AppName
db "DeviceIoControl",0</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1> VxDName
db "\\.\shellmsg.vxd",0</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1> Success
db "The VxD is successfully loaded!",0</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1> Failure
db "The VxD is not loaded!",0</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1> Unload
db "The VxD is now unloaded!",0</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1> MsgTitle
db "DeviceIoControl Example",0</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1> MsgText
db "I'm called from a VxD!",0</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1> InBuffer
dd offset MsgTitle</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>
dd offset MsgText</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>.data?</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1> hVxD
dd ?</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>.code</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>start:</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1> invoke
CreateFile,addr VxDName,0,0,0,0,FILE_FLAG_DELETE_ON_CLOSE,0</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1> .if
eax!=INVALID_HANDLE_VALUE</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>
mov hVxD,eax</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>
invoke MessageBox,NULL,addr Success,addr AppName,MB_OK+MB_ICONINFORMATION</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>
invoke DeviceIoControl,hVxD,1,addr InBuffer,8,NULL,NULL,NULL,NULL</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>
invoke CloseHandle,hVxD</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>
invoke MessageBox,NULL,addr Unload,addr AppName,MB_OK+MB_ICONINFORMATION</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1> .else</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>
invoke MessageBox,NULL,addr Failure,NULL,MB_OK+MB_ICONERROR</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1> .endif</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1> invoke
ExitProcess,NULL</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>end start</font></font></b></blockquote>
<font face="Arial,Helvetica"><font size=-1>Below is the source code of
the dynamic VxD that is called by vxdloader.asm</font></font>
<br><font face="Arial,Helvetica"><font size=-1>; ShellMsg.asm</font></font>
<blockquote><b><font face="Arial,Helvetica"><font size=-1>.386p</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>include vmm.inc</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>include vwin32.inc</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>include shell.inc</font></font></b>
<p><b><font face="Arial,Helvetica"><font size=-1>DECLARE_VIRTUAL_DEVICE
SHELLMSG,1,0, SHELLMSG_Control,\</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>
UNDEFINED_DEVICE_ID, UNDEFINED_INIT_ORDER</font></font></b>
<p><b><font face="Arial,Helvetica"><font size=-1>Begin_control_dispatch
SHELLMSG</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1> Control_Dispatch
w32_DeviceIoControl, OnDeviceIoControl</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>End_control_dispatch
SHELLMSG</font></font></b>
<p><b><font face="Arial,Helvetica"><font size=-1>VxD_PAGEABLE_DATA_SEG</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1> pTitle
dd ?</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1> pMessage
dd ?</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>VxD_PAGEABLE_DATA_ENDS</font></font></b>
<p><b><font face="Arial,Helvetica"><font size=-1>VxD_PAGEABLE_CODE_SEG</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>BeginProc OnDeviceIoControl</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1> assume
esi:ptr DIOCParams</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1> .if
[esi].dwIoControlCode==DIOC_Open</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>
xor eax,eax</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1> .elseif
[esi].dwIoControlCode==1</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -