00039                    :
00040 
00041     This function 
is called to process a machine check.  If 
the vendor
00042     has supplied a machine check handler with its 
HAL then 
the machine
00043     check handler 
is called.  If 
the routine returns 
TRUE indicating
00044     that 
the error has been handled then execution resumes, otherwise,
00045     a bugcheck 
is raised.
00046 
00047     If no machine check handler 
is registered or 
it does not indicate
00048     that 
the error has been handled, then 
this routine will attempt
00049     
default handling.  Default handling consists of checking 
the
00050     machine check status in 
the exception record.  If 
the status indicates
00051     that 
the machine check 
is correctable or retryable then 
return and
00052     resume execution, otherwise a bugcheck 
is raised.
00053 
00054 Arguments:
00055 
00056     ExceptionRecord - Supplies a pointer to an exception record.
00057 
00058     ExceptionFrame - Supplies a pointer to an exception frame.
00059 
00060     TrapFrame - Supplies a pointer to a trap frame.
00061 
00062 Return Value:
00063 
00064     None.
00065 
00066 --*/
00067 
00068 {
00069 
00070     
if( ((ULONG_PTR)PCR->MachineCheckError != 0) &&
00071           (PCR->MachineCheckError)(ExceptionRecord,
00072                                    ExceptionFrame,
00073                                    TrapFrame) ) {
00074 
00075         
00076         
00077         
00078 
00079         
return;
00080 
00081     } 
else {
00082 
00083         
00084         
00085         
00086         
00087 
00088         
if( ExceptionRecord->ExceptionInformation[0] != 0 ){
00089 
00090             
00091             
00092             
00093             
00094 
00095 
#if DBG
00096 
00097             
DbgPrint( 
"MCHK: resuming correctable or retryable error\n" );
00098 
00099 
#endif //DBG
00100 
00101             
return;
00102 
00103         }
00104     }
00105 
00106 
00107     
00108     
00109     
00110 
00111     
KeBugCheck(DATA_BUS_ERROR);
00112 }