Fault Handling Logic Changed for Windows 95ID: Q141203
|
Windows 95 has modified the way VxD fault handlers should handle passing the fault on to the previous handler. Using fault handler logic from a Windows 3.10 VxD may cause problems in Windows 95.
In Windows 3.1x, the following code logic might have been used by a fault
handler:
pPrevFaultHandler dd ?
mov eax, fault_number
mov esi, offset32 FaultHandler
VMMCall Hook_V86_Fault
mov pPrevFaultHandler, esi
BeginProc FaultHandler
;;;
;;; handler code
;;;
cmp pPrevFaultHandler, 0
jz @F
jmp pPrevFaultHandler
@@: ret
EndProc FaultHandler
pPrevFaultHandler dd 0
mov eax, fault_number
mov esi, offset32 FaultHandler
VMMCall Hook_V86_Fault
; NOTE: No "mov pPrevFaultHandler, esi" instruction
; esi = 0 if this is the first fault handler
; pPrevFaultHandler will *always* be nonzero.
; if esi = 0, pPrevFaultHandler will be the address
; of the default handler.
...
mov eax, fault_number
mov esi, offset32 FaultHandler
VMMCall UnHook_V86_Fault
BeginProc FaultHandler, HOOK_PROC, pPrevFaultHandler
;;;
;;; handler code
;;;
; NOTE: No "cmp pPrevFaultHandler, 0" instruction
jmp pPrevFaultHandler
EndProc FaultHandler
Keywords : kbcode
Version : 4.0
Platform : WINDOWS
Issue type : kbhowto
Last Reviewed: March 5, 1999