zljabc
驱动牛犊
驱动牛犊
  • 注册日期2001-11-25
  • 最后登录2002-05-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1354回复:5

我的VXD为什么一调用,系统就完蛋了?

楼主#
更多 发布于:2001-12-11 16:30
确切的说是在CreatFile 得到有效句柄后,调用DeviceIoControl
系统死掉了。
呜呜呜呜呜-----好惨哪。

;FILEHOOK.VXD--拦截Windows 95/98文件操作的VxD

.386p

.XLIST

INCLUDE VMM.Inc
INCLUDE VWin32.Inc
INCLUDE Shell.Inc

MASM=1

INCLUDE IFS.Inc
INCLUDE IFSMgr.Inc

.LIST

;VxD声明

Declare_Virtual_Device
FILEHOOK,1,0,VxD_Control,9999h,,,

;保护模式数据段

VxD_DATA_SEG
Prev_File_System_Api_Hook dd 0
In_File_System_Api_Hook db 0
Message1 db \'Open file !\',0
Caption1 db \'FILEHOOK\',0
VxD_DATA_ENDS

;保护模式代码段

VxD_CODE_SEG

;系统控制过程

BeginProc VxD_Control
Control_Dispatch SYS_DYNAMIC_DEVICE_INIT,VxD_Device_Init
Control_Dispatch SYS_DYNAMIC_DEVICE_EXIT,VxD_Device_Exit
Control_Dispatch W32_DEVICEIOCONTROL,VxD_IOCTL
clc
ret
EndProc VxD_Control

;IOCTL 控制(设备I/O控制)过程

BeginProc VxD_IOCTL
;获取DeviceIoControl控制代码
mov ecx,[esi.dwIoControlCode]
cmp ecx,1
jz Install_File_System_Api_Hook
cmp ecx,2
jz Uninstall_File_System_Api_Hook
jmp VxD_IOCTL_Exit

;安装文件系统API 钩子

Install_File_System_Api_Hook:
mov eax,OFFSET32 File_System_Api_Hook
VxDCall IFSMgr_InstallFileSystemApiHook
or eax,eax
jz Error_Handler
;保存上一个文件系统API 钩子地址
mov Prev_File_System_Api_Hook,eax
jmp VxD_IOCTL_Exit

;移去文件系统API 钩子

Uninstall_File_System_Api_Hook:
mov eax,OFFSET32 File_System_Api_Hook
VxDCall IFSMgr_RemoveFileSystemApiHook
cmp eax,0FFFFFFFFH
jz Error_Handler
jmp VxD_IOCTL_Exit

;IOCTL 控制过程结束

VxD_IOCTL_Exit:
xor eax,eax
clc
ret

;错误处理

Error_Handler:
mov eax,0FFFFFFFFH
stc
ret
EndProc VxD_IOCTL

;VxD_Device_Exit过程

BeginProc VxD_Device_Exit
clc
ret
EndProc VxD_Device_Exit

;文件系统API 钩子过程(C语言调用方式)

BeginProc File_System_Api_Hook,CCALL
ArgVar FSDFnAddr,DWORD
ArgVar FunctionNum,DWORD
ArgVar Drive,DWORD
ArgVar ResourceFlags,DWORD
ArgVar CodePage,DWORD
ArgVar pir,DWORD
EnterProc
pushad
;防止重入
cmp byte ptr In_File_System_Api_Hook,00h
jnz Prev_Hook
;比较是打开文件操作吗?
cmp dword ptr FunctionNum,IFSFN_OPEN
jnz Prev_Hook
;设置重入标志
inc byte ptr In_File_System_Api_Hook
;取当前VM句柄
VMMCall Get_Cur_VM_Handle
;显示消息框
mov eax,MB_ICONASTERISK+MB_OK
mov ecx,OFFSET32 Message1
mov edi,OFFSET32 Caption1
mov esi,0
mov edx,0
VxDCall Shell_Message
;取消重入标志
dec byte ptr In_File_System_Api_Hook

;转到上一个文件系统API 钩子地址

Prev_Hook:
popad
LeaveProc
mov eax,Prev_File_System_Api_Hook
jmp [eax]
Return
EndProc File_System_Api_Hook

VxD_CODE_ENDS

;保护模式初始化代码段

VxD_ICODE_SEG

;VxD_Device_Init过程

BeginProc VxD_Device_Init
clc
ret
EndProc VxD_Device_Init

VxD_ICODE_ENDS

end
 :(

最新喜欢:

flyajiflyaji
Jackal
驱动牛犊
驱动牛犊
  • 注册日期2001-09-20
  • 最后登录2001-12-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-12-11 18:55
用softice追一下。
Jackal
zljabc
驱动牛犊
驱动牛犊
  • 注册日期2001-11-25
  • 最后登录2002-05-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-12-12 08:59
我是想跟踪,
但打开模块MY.VXD
翻译符号 ,它说无DEBUG信息.
可打开翻译*.exe一点问题都没有。

什么叫内核API
怎么调用?
总之一句话怎么调试VXD??
小弟不胜感激,不胜感激,不胜感激,不胜感激。


 
Jackal
驱动牛犊
驱动牛犊
  • 注册日期2001-09-20
  • 最后登录2001-12-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-12-12 10:50
在MakeFile里指定 -DDEBLEVEL=1 -DDEBUG
Jackal
zljabc
驱动牛犊
驱动牛犊
  • 注册日期2001-11-25
  • 最后登录2002-05-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-12-12 16:44
能说的具体点吗?
Jackal
驱动牛犊
驱动牛犊
  • 注册日期2001-09-20
  • 最后登录2001-12-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2001-12-12 18:08
例:AFLAGS = -coff -DBLD_COFF -DIS_32 -W2 -Zi -c -Cx -DMASM6 -DDEBLEVEL=1 -DDEBUG

AFLAGS指定汇编的编译选项,随便一本写DDK编写VxD的书里都应该有。你可以参考一下Karen Hazzah的《Writing Windows VxDs and Device Drivers》,中文版叫《Windows VxD与设备驱动程序权威指南》。如果你还是不能Debug,那就只能说明你的调试环境没搭好了。
Jackal
游客

返回顶部