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

📄 sdvxd.asm

📁 [随书类]Dos6.0源代码
💻 ASM
字号:
PAGE 58,132
;******************************************************************************
TITLE SDVxD.ASM - VxD to display error message for SmartDrv.Exe
;******************************************************************************
;
;   (C) Copyright MICROSOFT Corp., 1991
;
;   Title:	SDVxD.ASM - VxD to display error message for SmartDrv.Exe
;
;   Version:	1.00
;
;   Date:	22-Nov-1991
;
;   Author:	RAL
;
;------------------------------------------------------------------------------
;
;   Change log:
;
;      DATE	REV		    DESCRIPTION
;   ----------- --- -----------------------------------------------------------
;   22-Nov-1991 RAL Original
;
;==============================================================================

	.386p


;******************************************************************************
;			      I N C L U D E S
;******************************************************************************

	.XLIST
	INCLUDE VMM.Inc
	INCLUDE Debug.Inc
	INCLUDE SHELL.Inc
	.LIST

;******************************************************************************
;		 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 SDVXD, 3, 0, SDVxD_Control


;******************************************************************************
;				 E Q U A T E S
;******************************************************************************

;******************************************************************************
;			     S T R U C T U R E S
;******************************************************************************


;******************************************************************************
;		   I N I T I A L I Z A T I O N	 D A T A
;******************************************************************************


;******************************************************************************
;			    L O C A L	D A T A
;******************************************************************************

VxD_DATA_SEG

EXTRN SDVxD_Error_Title_Msg:BYTE
EXTRN SDVxD_Write_Error_Msg:BYTE
EXTRN SDVxD_Write_Drive_Letter:BYTE


SD_Ref_Data_Ptr 	dd	?
SD_Orig_Msg_CSIP	dd	0	    ; 0 indicates not initialized

VxD_DATA_ENDS


;******************************************************************************
;	       D E V I C E   C O N T R O L   P R O C E D U R E
;******************************************************************************

VxD_CODE_SEG

;******************************************************************************
;
;   SDVxD_Control
;
;   DESCRIPTION:
;	This is SDVxD's control procedure.
;
;   ENTRY:
;	EAX = Control call ID
;
;   EXIT:
;	If carry clear then
;	    Successful
;	else
;	    Control call failed
;
;   USES:
;	EAX, EBX, ECX, EDX, ESI, EDI, Flags
;
;==============================================================================

BeginProc SDVxD_Control

	Control_Dispatch Init_Complete, SDVxD_Init_Complete
	Control_Dispatch System_Exit, <SHORT SDVxD_System_Exit>

	clc					; Ignore other control calls
	ret

EndProc SDVxD_Control

VxD_CODE_ENDS


;******************************************************************************
;		    I N I T I A L I Z A T I O N   C O D E
;******************************************************************************

VxD_ICODE_SEG


;******************************************************************************
;
;   SDVxD_Init_Complete
;
;   DESCRIPTION:
;	Initializes real mode SDVxD's error call-back to point to a V86
;	call-back address.
;
;   ENTRY:
;	EDX = Reference data (ptr to dword to patch to call-back break point)
;
;   EXIT:
;	Carry clear
;
;   USES:
;
;
;==============================================================================

BeginProc SDVxD_Init_Complete

	movzx	eax, dx
	shr	edx, 16
	shl	edx, 4
	add	edx, eax

	mov	[SD_Ref_Data_Ptr], edx

	mov	esi, OFFSET32 SDVxD_Error_Msg_Call_Back
	VMMcall Allocate_V86_Call_Back
IFDEF DEBUG
	jnc	SHORT SD_IC_Got_CB
	Debug_Out "WARNING:  Unable to allocate call-back address for SDVxD.  VxD not loading."
	stc
	jmp	SHORT SDVxD_IC_Exit
SD_IC_Got_CB:
ELSE
	jc	SHORT SDVxD_IC_Exit
ENDIF

	xchg	eax, DWORD PTR [edx]
	mov	[SD_Orig_Msg_CSIP], eax

	clc
SDVxD_IC_Exit:
	ret

EndProc SDVxD_Init_Complete



VxD_ICODE_ENDS

;******************************************************************************
;	       D E V I C E   C O N T R O L   H A N D L E R S
;******************************************************************************

VxD_CODE_SEG

;******************************************************************************
;
;   SDVxD_System_Exit
;
;   DESCRIPTION:
;
;   ENTRY:
;
;   EXIT:
;
;   USES:
;
;==============================================================================

BeginProc SDVxD_System_Exit

	xor	ecx, ecx
	xchg	[SD_Orig_Msg_CSIP], ecx
	jecxz	SD_SE_Done
	mov	edi, [SD_Ref_Data_Ptr]
	mov	DWORD PTR [edi], ecx

SD_SE_Done:
	clc
	ret

EndProc SDVxD_System_Exit


;******************************************************************************
;			L O C A L   P R O C E D U R E S
;******************************************************************************

;******************************************************************************
;
;   SDVxD_Error_Msg_Call_Back
;
;   DESCRIPTION:
;
;   ENTRY:
;
;   EXIT:
;
;   USES:
;
;==============================================================================

BeginProc SDVxD_Error_Msg_Call_Back

	mov	ecx, (Block_Svc_Ints OR Block_Enable_Ints)
	VMMcall Begin_Critical_Section

	mov	al, [ebp.Client_AL]
	add	al, "A"
	mov	[SDVxD_Write_Drive_Letter], al

	mov	edi, OFFSET32 SDVxD_Error_Title_Msg
	mov	eax, MB_SYSTEMMODAL OR MB_ASAP OR MB_ICONEXCLAMATION OR MB_OK
	mov	ecx, OFFSET32 SDVxD_Write_Error_Msg

	VxDcall SHELL_SYSMODAL_Message

	VMMcall End_Critical_Section
	VMMjmp	Simulate_Far_Ret

EndProc SDVxD_Error_Msg_Call_Back


;******************************************************************************
;		       D E B U G G I N G   C O D E
;******************************************************************************

VxD_CODE_ENDS

	END

⌨️ 快捷键说明

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