Source file: /~heha/argon/samples.zip/GPTRAP/GPTRAP.ASM

PAGE 58,132
;******************************************************************************
TITLE VXD - GPTrap
;******************************************************************************
;
;   (C) Copyright MICROSOFT Corp., 1991
;
;   Title:      GPTRAP - executes INT1 on invalid GP fault
;
;   Version:    3.00
;
;   Date:       1-Jun-1991 
;
;   Author:     Neil Sandlin
;
;------------------------------------------------------------------------------
;
;   Change log:
;
;      DATE     REV                 DESCRIPTION
;   ----------- --- -----------------------------------------------------------
;
;==============================================================================

        .386p

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

        .XLIST
        INCLUDE VMM.Inc
        INCLUDE Debug.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 GPTrap, 3, 0, GPTrap_Control, Undefined_Device_ID ,,,


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

VxD_LOCKED_DATA_SEG

OldGPFaultHandler dd    ?

VxD_LOCKED_DATA_ENDS




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

VxD_ICODE_SEG


;******************************************************************************
;
;   GPTrap_Sys_Critical_Init
;
;   DESCRIPTION:
;       This routine sets up the GP fault handler. Note that this
;       must be called at Sys_Critical_Init in order for it to be
;       hooked AFTER the standard GP fault handler. This way, we
;       only get control when a BAD gp fault happens.
;
;
;==============================================================================

BeginProc GPTrap_Sys_Critical_Init


        mov     esi, OFFSET32 MyGPFaultHandler
        mov     eax, 0dh                        ; gp faults
        VMMCall Hook_PM_Fault
        mov     [OldGPFaultHandler], esi

        clc
        ret
EndProc GPTrap_Sys_Critical_Init

VxD_ICODE_ENDS


;******************************************************************************

VxD_LOCKED_CODE_SEG

;******************************************************************************
;
;   GPTrap_Control
;
;   DESCRIPTION:
;
;       This is a call-back routine to handle the messages that are sent
;       to VxD's to control system operation. 
;
;
;==============================================================================

BeginProc GPTrap_Control

        Control_Dispatch Sys_Critical_Init, GPTrap_Sys_Critical_Init
        clc
        ret

EndProc GPTrap_Control

;******************************************************************************
;
;   MyGPFaultHandler
;
;   DESCRIPTION:
;       This is the actual gp fault handler. It does only a debug
;       break to get control to the debugger.
;
;==============================================================================

BeginProc MyGPFaultHandler

        int     1                       ;DEBUG BREAK
        jmp     DWORD PTR [OldGPFaultHandler]

EndProc MyGPFaultHandler


VxD_LOCKED_CODE_ENDS


        END

Detected encoding: ASCII (7 bit)2