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

📄 cvxdctrl.asm

📁 文件系统的vxd(杀毒用) 一个简单的vdx程序
💻 ASM
字号:
;******************************************************************************
TITLE CONTROL - ControlDispatch for VxD in C
;******************************************************************************
;

    .386p

;******************************************************************************
;                I N C L U D E S
;******************************************************************************
IFSFN_DELETE Equ 31
IFSFN_OPEN   Equ 36
IFSFN_READ   Equ 0
    .xlist
    include vmm.inc
    include debug.inc
    include ifsmgr.inc
	include vwin32.inc
;    include ifs.inc

public _strlen, _strcpy, _strcat, _strcmp, _SystemBox

; the following equate makes the VXD dynamically loadable.
CVXDSAMP_DYNAMIC EQU 1
;============================================================================
;        V I R T U A L   D E V I C E   D E C L A R A T I O N
;============================================================================

DECLARE_VIRTUAL_DEVICE    ANTIVIRU, 1, 0, CVXD_Control, UNDEFINED_DEVICE_ID, \
                        UNDEFINED_INIT_ORDER

VxD_LOCKED_CODE_SEG

;===========================================================================
;
;   PROCEDURE: CVXD_Control
;
;   DESCRIPTION:
;    Device control procedure for the CVXD VxD
;
;   ENTRY:
;    EAX = Control call ID
;
;   EXIT:
;    If carry clear then
;        Successful
;    else
;        Control call failed
;
;   USES:
;    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, <ecx, ebx, edx, esi>
    clc
    ret
EndProc CVXD_Control

; *************************************************************************
; this routine handles api calls made from V86 mode programs.  For the 
; purpose of this examples it is assumed that the function number is passed
; in eax and any additional parameters are passed in ebx and ecx.
; The C code will do a SWITCH on the eax value to determine which routine to
; call and what parameters to pass.  It is assumed that all functions return
; a value in eax.
;BeginProc CVXD_VM
;    scall   CVXD_VMAPI, <[ebp].Client_EAX, [ebp].Client_EBX, [ebp].Client_ECX>
;    mov    [ebp].Client_EAX,eax    ; put return code
;    ret
;EndProc   CVXD_VM



; *************************************************************************
; this routine handles api calls made from protected mode programs.  For the 
; purpose of this examples it is assumed that the function number is passed
; in eax and any additional parameters are passed in ebx and ecx.
; The C code will do a SWITCH on the eax value to determine which routine to
; call and what parameters to pass.  It is assumed that all functions return
; a value in eax.
;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_CODE_SEG

BeginProc _strlen
    PUSH    EBP
    MOV     EBP, ESP
    MOV     EDI, [EBP+8]
    XOR     EAX, EAX
    CLD
LoopAgain:
    SCASB
    JNE     LoopAgain
    SUB     EDI, [EBP+8]
	DEC		EDI
    MOV     EAX, EDI
    POP     EBP
    RET
EndProc   _strlen

BeginProc   _strcpy
    PUSH    EBP
    MOV     EBP, ESP
    MOV     ESI, [EBP+0Ch]
    MOV     EDI, [EBP+8]
    CLD
LoopCopy:
    LODSB
    STOSB
    CMP     AL, 0
    JNE     LoopCopy
    POP     EBP
    RET
EndProc     _strcpy

BeginProc   _strcat
    PUSH    EBP
    MOV     EBP, ESP
    MOV     ESI, [EBP+0Ch]
    MOV     EDI, [EBP+8]
    CLD
	PUSH	EDI
	CALL	_strlen
	POP		EDI
	ADD		EDI, EAX
LoopCopy1:
    LODSB
    STOSB
    CMP     AL, 0
    JNE     LoopCopy1
    POP     EBP
    RET
EndProc     _strcat

BeginProc	_strcmp
	PUSH	EBP
	MOV		EBP, ESP
    MOV     ESI, [EBP+0Ch]
    MOV     EDI, [EBP+8]
    CLD
	PUSH	EDI
	CALL	_strlen
	POP		EDI
	MOV		ECX, EAX
	INC		ECX
	MOV		EAX, 1
	REPE	CMPSB
	JNE		NotEqual
	XOR		EAX, EAX
NotEqual:
	POP		EBP
	RET
EndProc		_strcmp

BeginProc	_SystemBox
	PUSH	EBP
	MOV		EBP, ESP
	MOV		EBX, [EBP+8]
	VxDCall	VWIN32_SysErrorBox
	POP		EBP
	RET
EndProc		_SystemBox

; *************************************************************************
VxD_CODE_ENDS
    END

⌨️ 快捷键说明

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