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

📄 vxd-e6.html

📁 介绍vxd驱动编写的入门和实际代码,让你对硬件驱动和window下的汇编有个初步认识
💻 HTML
📖 第 1 页 / 共 3 页
字号:
<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>&nbsp;&nbsp;&nbsp;&nbsp;
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>&nbsp;&nbsp;&nbsp;
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>&nbsp;&nbsp;&nbsp;
assume esi:ptr DIOCParams</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#FFFF99"><font size=-1>&nbsp;&nbsp;&nbsp;
.if [esi].dwIoControlCode==DIOC_Open</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#FFFF99"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
xor eax,eax</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#FFFF99"><font size=-1>&nbsp;&nbsp;&nbsp;
.endif</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#FFFF99"><font size=-1>&nbsp;&nbsp;&nbsp;
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>;&nbsp;&nbsp; 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>&nbsp;&nbsp;&nbsp; _LPTEXT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
CLASS 'LCODE'&nbsp;&nbsp;&nbsp; PRELOAD NONDISCARDABLE</font></tt></b>
<br><b><tt><font size=-1>&nbsp;&nbsp;&nbsp; _LTEXT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
CLASS 'LCODE'&nbsp;&nbsp;&nbsp; PRELOAD NONDISCARDABLE</font></tt></b>
<br><b><tt><font size=-1>&nbsp;&nbsp;&nbsp; _LDATA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
CLASS 'LCODE'&nbsp;&nbsp;&nbsp; PRELOAD NONDISCARDABLE</font></tt></b>
<br><b><tt><font size=-1>&nbsp;&nbsp;&nbsp; _TEXT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
CLASS 'LCODE'&nbsp;&nbsp;&nbsp; PRELOAD NONDISCARDABLE</font></tt></b>
<br><b><tt><font size=-1>&nbsp;&nbsp;&nbsp; _DATA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
CLASS 'LCODE'&nbsp;&nbsp;&nbsp; PRELOAD NONDISCARDABLE</font></tt></b>
<br><b><tt><font size=-1>&nbsp;&nbsp;&nbsp; CONST&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
CLASS 'LCODE'&nbsp;&nbsp;&nbsp; PRELOAD NONDISCARDABLE</font></tt></b>
<br><b><tt><font size=-1>&nbsp;&nbsp;&nbsp; _TLS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
CLASS 'LCODE'&nbsp;&nbsp;&nbsp; PRELOAD NONDISCARDABLE</font></tt></b>
<br><b><tt><font size=-1>&nbsp;&nbsp;&nbsp; _BSS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
CLASS 'LCODE'&nbsp;&nbsp;&nbsp; PRELOAD NONDISCARDABLE</font></tt></b>
<br><b><tt><font size=-1>&nbsp;&nbsp;&nbsp; _LMGTABLE&nbsp;&nbsp;&nbsp;
CLASS 'MCODE'&nbsp;&nbsp;&nbsp; PRELOAD NONDISCARDABLE IOPL</font></tt></b>
<br><b><tt><font size=-1>&nbsp;&nbsp;&nbsp; _LMSGDATA&nbsp;&nbsp;&nbsp;
CLASS 'MCODE'&nbsp;&nbsp;&nbsp; PRELOAD NONDISCARDABLE IOPL</font></tt></b>
<br><b><tt><font size=-1>&nbsp;&nbsp;&nbsp; _IMSGTABLE&nbsp;&nbsp; CLASS
'MCODE'&nbsp;&nbsp;&nbsp; PRELOAD DISCARDABLE IOPL</font></tt></b>
<br><b><tt><font size=-1>&nbsp;&nbsp;&nbsp; _IMSGDATA&nbsp;&nbsp;&nbsp;
CLASS 'MCODE'&nbsp;&nbsp;&nbsp; PRELOAD DISCARDABLE IOPL</font></tt></b>
<br><b><tt><font size=-1>&nbsp;&nbsp;&nbsp; _ITEXT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
CLASS 'ICODE'&nbsp;&nbsp;&nbsp; DISCARDABLE</font></tt></b>
<br><b><tt><font size=-1>&nbsp;&nbsp;&nbsp; _IDATA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
CLASS 'ICODE'&nbsp;&nbsp;&nbsp; DISCARDABLE</font></tt></b>
<br><b><tt><font size=-1>&nbsp;&nbsp;&nbsp; _PTEXT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
CLASS 'PCODE'&nbsp;&nbsp;&nbsp; NONDISCARDABLE</font></tt></b>
<br><b><tt><font size=-1>&nbsp;&nbsp;&nbsp; _PMSGTABLE&nbsp;&nbsp; CLASS
'MCODE'&nbsp;&nbsp;&nbsp; NONDISCARDABLE IOPL</font></tt></b>
<br><b><tt><font size=-1>&nbsp;&nbsp;&nbsp; _PMSGDATA&nbsp;&nbsp;&nbsp;
CLASS 'MCODE'&nbsp;&nbsp;&nbsp; NONDISCARDABLE IOPL</font></tt></b>
<br><b><tt><font size=-1>&nbsp;&nbsp;&nbsp; _PDATA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
CLASS 'PDATA'&nbsp;&nbsp;&nbsp; NONDISCARDABLE SHARED</font></tt></b>
<br><b><tt><font size=-1>&nbsp;&nbsp;&nbsp; _STEXT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
CLASS 'SCODE'&nbsp;&nbsp;&nbsp; RESIDENT</font></tt></b>
<br><b><tt><font size=-1>&nbsp;&nbsp;&nbsp; _SDATA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
CLASS 'SCODE'&nbsp;&nbsp;&nbsp; RESIDENT</font></tt></b>
<br><b><tt><font size=-1>&nbsp;&nbsp;&nbsp; _DBOSTART&nbsp;&nbsp;&nbsp;
CLASS 'DBOCODE'&nbsp; PRELOAD NONDISCARDABLE CONFORMING</font></tt></b>
<br><b><tt><font size=-1>&nbsp;&nbsp;&nbsp; _DBOCODE&nbsp;&nbsp;&nbsp;&nbsp;
CLASS 'DBOCODE'&nbsp; PRELOAD NONDISCARDABLE CONFORMING</font></tt></b>
<br><b><tt><font size=-1>&nbsp;&nbsp;&nbsp; _DBODATA&nbsp;&nbsp;&nbsp;&nbsp;
CLASS 'DBOCODE'&nbsp; PRELOAD NONDISCARDABLE CONFORMING</font></tt></b>
<br><b><tt><font size=-1>&nbsp;&nbsp;&nbsp; _16ICODE&nbsp;&nbsp;&nbsp;&nbsp;
CLASS '16ICODE'&nbsp; PRELOAD DISCARDABLE</font></tt></b>
<br><b><tt><font size=-1>&nbsp;&nbsp;&nbsp; _RCODE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
CLASS 'RCODE'</font></tt></b><tt></tt>
<p><b><tt><font size=-1>EXPORTS</font></tt></b>
<br><b><tt><font size=-1>&nbsp;&nbsp;&nbsp; DYNAVXD_DDB&nbsp; @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>&nbsp;&nbsp;&nbsp; AppName
db "DeviceIoControl",0</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp; VxDName
db "\\.\shellmsg.vxd",0</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp; Success
db "The VxD is successfully loaded!",0</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp; Failure
db "The VxD is not loaded!",0</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp; Unload
db "The VxD is now unloaded!",0</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp; MsgTitle
db "DeviceIoControl Example",0</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp; MsgText
db "I'm called from a VxD!",0</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp; InBuffer
dd offset MsgTitle</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
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>&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp;&nbsp; .if
eax!=INVALID_HANDLE_VALUE</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
mov hVxD,eax</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
invoke MessageBox,NULL,addr Success,addr AppName,MB_OK+MB_ICONINFORMATION</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
invoke DeviceIoControl,hVxD,1,addr InBuffer,8,NULL,NULL,NULL,NULL</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
invoke CloseHandle,hVxD</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
invoke MessageBox,NULL,addr Unload,addr AppName,MB_OK+MB_ICONINFORMATION</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp; .else</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
invoke MessageBox,NULL,addr Failure,NULL,MB_OK+MB_ICONERROR</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp; .endif</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp;&nbsp;&nbsp;
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>&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp;&nbsp; pTitle
dd ?</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp;&nbsp; assume
esi:ptr DIOCParams</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp; .if
[esi].dwIoControlCode==DIOC_Open</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
xor eax,eax</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp; .elseif
[esi].dwIoControlCode==1</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

⌨️ 快捷键说明

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