;**************************************************************************** ; * ; THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY * ; KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE * ; IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PAGLITCHICULAR * ; PURPOSE. * ; * ; Copyright (C) 1993-99 Microsoft Corporation. All Rights Reserved. * ; * ;**************************************************************************** PAGE 58,132 ;****************************************************************************** TITLE GENERIC - GLITCH VxD ;****************************************************************************** ; ; Title: GLITCH.ASM ; ; Version: 1.00 ; ;============================================================================== .386p ;****************************************************************************** ; I N C L U D E S ;****************************************************************************** DDK_VERSION EQU 400H GLITCH_VER_MAJOR equ 1 GLITCH_VER_MINOR equ 0 .XLIST INCLUDE VMM.Inc ; INCLUDE VDMAD.Inc ; INCLUDE VPICD.Inc ; INCLUDE DOSMGR.Inc INCLUDE Debug.Inc .LIST Declare_Virtual_Device GLITCH, GLITCH_VER_MAJOR, GLITCH_VER_MINOR, GLITCH_VxD_Control VxD_DATA_SEG ;****************************************************************************** ; D A T A ;****************************************************************************** ; Normal Data here public C IRQHand IRQHand dd 0 EXTERN _GlitchWin32API@4:near dma_status_struc STRUC DMA_PhysicalAddress DD ? DMA_Count DD ? DMA_Status DD ? dma_status_struc ENDS VxD_DATA_ENDS VxD_LOCKED_DATA_SEG next_begin dd 0 next_end dd 0 VxD_LOCKED_DATA_ENDS VxD_LOCKED_CODE_SEG ;****************************************************************************** ; ; GLITCH_Init_VxD ; ; DESCRIPTION: ; This is a shell for a routine that is called at system BOOT. ; Typically, a VxD would do its initialization in this routine. ; ; ENTRY: ; EBX = System VM handle ; ; EXIT: ; We return 0 in eax upon success, 1 in eax if failure. ; Caller MUST fail to load the device if we return 1. ; ; USES: ; flags ; ;============================================================================== BeginProc GLITCH_Init_VxD, SCALL, PUBLIC EnterProc SaveReg ; Note that we this routine should only be executed ONCE. So we ; ensure that that is the case. mov edi, offset32 GLITCH_DDB VMMCall VMM_Add_DDB Debug_Outc "DDB already loaded for GLITCH!" xor eax,eax RestoreReg LeaveProc Return EndProc GLITCH_Init_VxD ;****************************************************************************** ; ; ; Description: ; ; Entry: ; Exit: ; Uses: ;============================================================================== BeginProc GLITCH_Uninit_VxD, SCALL, PUBLIC EnterProc SaveReg TRAP xor eax,eax push eax mov edi, offset32 GLITCH_DDB VMMCall VMM_Remove_DDB Debug_Outc "Could not remove DDB for GLITCH!" pop eax rcl eax,1 RestoreReg LeaveProc Return EndProc GLITCH_Uninit_VxD ;****************************************************************************** ; ; GLITCH_VxD_Control ; ; DESCRIPTION: ; ; This is a call-back routine to handle the messages that are sent ; to VxD's to control system operation. Every VxD needs this function ; regardless if messages are processed or not. The control proc must ; be in the LOCKED code segment. ; ; The Control_Dispatch macro used in this procedure simplifies ; the handling of messages. To handle a particular message, add ; a Control_Dispatch statement with the message name, followed ; by the procedure that should handle the message. ; ; The two messages handled in this sample control proc, Device_Init ; and Create_VM, are done only to illustrate how messages are ; typically handled by a VxD. A VxD is not required to handle any ; messages. ; ; ENTRY: ; EAX = Message number ; EBX = VM Handle ; ;============================================================================== BeginProc GLITCH_VxD_Control, PUBLIC Control_Dispatch W32_DEVICEIOCONTROL, GlitchWin32API, sCall, clc ret EndProc GLITCH_VxD_Control VxD_LOCKED_CODE_ENDS END