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

📄 virtirq.asm

📁 windows下汇编语言 学习汇编语言好助手
💻 ASM
字号:
;********************
;文件:VirtIRQ.asm  *
;功能:虚拟化IRQ    *
;********************
    .386p
    include C:\98DDK\inc\win98\vmm.inc
    include C:\98DDK\inc\win98\vpicd.inc
    include C:\98DDK\inc\win98\shell.inc
    include C:\98DDK\inc\win98\debug.inc

	WM_USER			= 400h
	WM_MY_MSG		= WM_USER + 1
	CONTROL_CODE	= 12345
	IRQ_NUM			= 12

DIOCPARAMETERS struc
	Internal1	dd ?
	VMHandle	dd ?
	Internal2	dd ?
	dwIoControlCode	dd ?
	lpvInBuffer	dd ?
	cbInBuffer	dd ?
	lpvOutBuffer	dd ?
	cbOutBuffer	dd ?
	lpcbBytesReturned	dd ?
	lpoOverlapped	dd ?
	hDevice		dd ?
	tagProcess	dd ?
DIOCPARAMETERS ends

Declare_Virtual_Device		\
				VIRTIRQ, 	\
				1, 0, 		\
				VIRTIRQ_control,	\
    			Undefined_Device_ID, Undefined_Init_Order
;消息分派
BeginProc VIRTIRQ_control,LOCKED
	Control_Dispatch Sys_Dynamic_Device_Init, OnDynInitAsm, cCall
	Control_Dispatch Sys_Dynamic_Device_Exit, OnDynExitAsm, cCall
	Control_Dispatch W32_DeviceIOControl,	  OnDynCtlAsm,	cCall
	clc
	ret
EndProc VIRTIRQ_control

;数据段
VxD_PAGEABLE_DATA_SEG 
    IRQHand	dd ?
    vid VPICD_IRQ_Descriptor<IRQ_NUM, VPICD_OPT_CAN_SHARE,OFFSET32 HWProc,0,0,0,0,500,0>
	hwnd	dd -1
    szCaption	db "Virtual IRQ",0  
    szInitOK 	db "Init OK",0 
    szInitFail	db "Init Fail",0 
VxD_PAGEABLE_DATA_ENDS 

BeginProc MsgBox,LOCKED
    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 HWProc,LOCKED			;硬件中断处理
	cmp		hwnd,-1
	jz		HWProcExit
	pushad
	VxDcall	_SHELL_PostMessage <hwnd,SPM_UM_DoNotWaitForCrit or WM_MY_MSG,0,0,0,0>
	popad
HWProcExit:
	stc
	ret
EndProc	HWProc

BeginPRoc VTProc,LOCKED
	ret
EndProc	VTProc

VxD_PAGEABLE_CODE_SEG
BeginProc OnDynInitAsm
	mov     edi, OFFSET32 vid
	VxDcall VPICD_Virtualize_IRQ	;虚拟化IRQ
	jc      InitFail
	mov     [IRQHand], eax
	lea		ecx,szInitOK
	jmp		CallMsgBox
InitFail:
	lea		ecx,szInitFail
CallMsgBox:
	call	MsgBox
	mov		eax,1
	ret
EndProc OnDynInitAsm

BeginProc OnDynExitAsm
	cmp		IRQHand,0
	jz		Exit
	mov		eax, [IRQHand]
	VxDcall VPICD_Force_Default_Behavior
Exit:
	mov		eax,1
	ret
EndProc OnDynExitAsm

BeginProc OnDynCtlAsm
	cmp		[esi].dwIoControlCode,CONTROL_CODE
	jnz		CtlExit			;取主窗口句柄
	mov		eax,[esi].lpvInBuffer
	mov		hwnd,eax
CtlExit:
	xor		eax,eax
	ret
EndProc OnDynCtlAsm

VxD_PAGEABLE_CODE_ENDS 

    end

⌨️ 快捷键说明

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