📄 iotrap.asm
字号:
;***************************
;文件:IOTrap.asm *
;功能:演示设置和处理IO陷阱*
;***************************
.386p
include C:\98DDK\inc\win98\vmm.inc
include C:\98DDK\inc\win98\shell.inc
include C:\98DDK\inc\win98\debug.inc
PORT_NUM = 800H ;端口号
Declare_Virtual_Device \
IOTRAP, \
1, 0, \
IOTRAP_control, \
Undefined_Device_ID, Undefined_Init_Order
;消息分派
BeginProc IOTRAP_control, LOCKED
Control_Dispatch Sys_Dynamic_Device_Init, OnDynInit, cCall
Control_Dispatch Sys_Dynamic_Device_Exit, OnDynExit, cCall
Control_Dispatch W32_DeviceIOControl, OnDynCtl, cCall
clc
ret
EndProc IOTRAP_control
;数据段
VxD_PAGEABLE_DATA_SEG
szCaption db "IO Trapping",0
szText db "Ring 3 程序访问 800H 端口",0
szSuccess db "Init OK",0
szFail db "Init Fail",0
VxD_PAGEABLE_DATA_ENDS
;代码段
VxD_PAGEABLE_CODE_SEG
BeginProc MsgBox
VMMCall Get_sys_vm_handle
mov eax,MB_OK+MB_ICONEXCLAMATION
mov edi,OFFSET32 szCaption
xor esi,esi
xor edx,edx
VxDCall SHELL_Message
ret
EndProc MsgBox
BeginProc IOTrapProc ;IO陷阱处理过程
lea ecx,szText
call MsgBox
mov eax,12345678H ;设置返回值
ret
EndProc IOTrapProc
BeginProc OnDynInit
lea esi, IOTrapProc
mov edx, PORT_NUM ;安装IO陷阱处理过程
VMMCall Install_IO_Handler
mov ecx,OFFSET32 szSuccess
jnc install_ok
mov ecx,OFFSET32 szFail
install_ok:
call MsgBox
mov eax,1
ret
EndProc OnDynInit
BeginProc OnDynExit
mov edx, PORT_NUM ;卸装IO陷阱处理过程
VMMCall Remove_IO_Handler
mov eax,1
ret
EndProc OnDynExit
BeginProc OnDynCtl
xor eax,eax
ret
EndProc OnDynCtl
VxD_PAGEABLE_CODE_ENDS
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -