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

📄 cvxdctrl.asm

📁 编程高手箴言-原书源码
💻 ASM
字号:
;****************************************************************************
;                           动态VXD		                            *
;                                                                           *
;			Copyright 1996-2002				    *
;			All Rights Reserved.				    *
;			     梁肇新                                         *
;			北京豪杰计算机技术有限公司			    *
;****************************************************************************

PAGE 58,132
;******************************************************************************
TITLE CONTROL - ControlDispatch for VxD in C
;******************************************************************************
;

    .586p

;******************************************************************************
;			    包含头
;******************************************************************************

    .xlist
    include vmm.inc
    include debug.inc
    .list

;编译成动态VXD
SthVXD_DYNAMIC EQU 1

;VXD的ID号
CVXD_DEVICE_ID EQU 0ABCH

ifdef _VXD_SERVICES
;定义可以被其他VXD调用的接口函数
Create_CVXD_Service_Table = 1

;可以被其他VXD调用的接口函数表
Begin_Service_Table CVXD
CVXD_Service     _CVXD_Get_Version, VxD_LOCKED_CODE
End_Service_Table CVXD
endif

;============================================================================
;			VXD设备说明
;============================================================================
DECLARE_VIRTUAL_DEVICE	SthVXD, 5, 0, CVXD_Control, CVXD_DEVICE_ID, \
			UNDEFINED_INIT_ORDER, CVXD_V86, CVXD_PM
VxD_LOCKED_CODE_SEG

ifdef 		_VXD_SERVICES
extrn 		_CVXD_Get_Version:near
endif

extrn 		_CVXD_V86API@12:near
extrn 		_CVXD_PMAPI@12:	near
extrn	C	EnableHlt:	dword

;===========================================================================
;
;				VXD控制函数
;
;   入口:
;    EAX = ID
;
;   出口:
;    成功:标记清零
;    失败:标记置位
;
;   使用:
;    EAX, EBX, ECX, EDX, ESI, EDI, Flags
;
;============================================================================
BeginProc CVXD_Control
    Control_Dispatch SYS_DYNAMIC_DEVICE_INIT, CVXD_Dynamic_Init, sCall
    Control_Dispatch SYS_DYNAMIC_DEVICE_EXIT, CVXD_Dynamic_Exit, sCall
    Control_Dispatch W32_DEVICEIOCONTROL,     CVXD_W32_DeviceIOControl, sCall, <ebp, ecx, ebx, edx, esi>
    clc
    ret
EndProc CVXD_Control

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;	内核空闲(IDLE)时调用此函数 
;;
;;	使用HLT指令可以降低CPU的温度
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BeginProc _IDLEHandleProc
	mov	eax,[EnableHlt]
	test	eax,eax
	jnz	NEXT
	stc
	ret
NEXT:
	sti	;必须允许中断, 否则就变成了死机
	hlt	;CPU停机, 以便降低温度
	stc
	ret
EndProc   _IDLEHandleProc

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;	安装内核空闲(IDLE)时调用的函数 
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BeginProc _InstallIDLEProc
	push	esi
	lea	esi,[_IDLEHandleProc]
	VMMCall	Call_When_Idle
	pop	esi
	mov	eax,0
	setnc	al
	ret
EndProc   _InstallIDLEProc

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;	取消安装内核空闲(IDLE)时调用的函数 
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BeginProc _UnInstallIDLEProc
	push	esi
	lea	esi,[_IDLEHandleProc]
	VMMCall	Cancel_Call_When_Idle
	pop	esi
	mov	eax,0
	setnc	al
	ret
EndProc   _UnInstallIDLEProc

; *************************************************************************
;			V86模式调用的入口
;
;	把调用转变成对C函数的调用, 以便于开发功能强大的处理能力
;
; *************************************************************************
BeginProc CVXD_V86
    scall   CVXD_V86API, <[ebp].Client_EAX, [ebp].Client_EBX, [ebp].Client_ECX>
    mov    [ebp].Client_EAX,eax    ; put return code
    ret
EndProc   CVXD_V86

; *************************************************************************
;			保护模式调用的入口
;
;	把调用转变成对C函数的调用, 以便于开发功能强大的处理能力
;
; *************************************************************************
BeginProc CVXD_PM
    scall   CVXD_PMAPI, <[ebp].Client_EAX, [ebp].Client_EBX, [ebp].Client_ECX>
    mov     [ebp].Client_EAX,eax
    ret
EndProc   CVXD_PM

VxD_LOCKED_CODE_ENDS

; *************************************************************************
;
; 不是动态的VXD时在Window启动时会被实模式调用
; 
; *************************************************************************
VxD_REAL_INIT_SEG

BeginProc CVXD_Real_Init

    xor    bx, bx
    xor    si, si
    xor    edx, edx
    mov    ax, Device_Load_Ok
    ret

EndProc CVXD_Real_Init

VxD_REAL_INIT_ENDS

END CVXD_Real_Init

⌨️ 快捷键说明

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