HalHandleNMI
INT8 __stdcall HalHandleNMI(){
INT64 *v0;
char v1;
INT8 result;
INT8 v3;
INT64 v4;
UINT64 v5;
_WHEAP_ERROR_SOURCE *ErrorSource;
dword_140C50698 = 1;
HalpProcessorInNmiHandler = KeGetPcr()->Prcb.Number;
if( !HalpGenericNmiInitDone )
goto LABEL_7;
v0 = (INT64 *)qword_140C49AE0;
v1 = 0;
if( (INT64 *)qword_140C49AE0 == &qword_140C49AE0 )
goto LABEL_7;
do
{
result = HalpCheckAndReportGhes((INT64)v0);
v0 = (INT64 *)*v0;
if( result )
v1 = 1;
}
while( v0 != &qword_140C49AE0 );
if( v1 != 1 )
{
LABEL_7:
result = __inbyte(0x61u);
v3 = result;
if( HIDWORD(ErrorSourceId) == 1 )
{
memset(&ErrPkt, 0i64, 0x5Cu);
ErrPkt.Version = 3;
ErrPkt.ErrorType = WheaErrTypeNMI;
ErrPkt.ErrorSourceType = WheaErrSrcTypeNMI;
ErrPkt.Signature = 1095059543;
dword_140C506F8 = ((unsigned __int32)ErrPkt.Flags._bf_0 >> 2) & 1;
ErrPkt.Length = 92;
ErrPkt.ErrorSeverity = WheaErrSevFatal;
ErrPkt.ErrorSourceId = ErrorSourceId;
ErrPkt.NotifyType = NMI_NOTIFY_TYPE_GUID;
ErrPkt.DataFormat = WheaDataFormatNMIPort;
ErrPkt.DataOffset = 80;
ErrPkt.DataLength = 12;
byte_140C506F0 = v3;
ErrorSource = WheapGetErrorSource(
(_WHEAP_ERROR_SOURCE_TABLE *)&WheapErrorSourceTable,
(unsigned int)ErrorSourceId,
v4,
v5);
PshedRetrieveErrorInfo(
&ErrPkt,
(unsigned __int64)&ErrorSource->Descriptor & ((unsigned __int128)-(__int128)(unsigned __int64)ErrorSource >> 64));
result = WheaReportHwError(&ErrPkt);
}
}
HalpProcessorInNmiHandler = 1280;
return result;
}Referenced by:
KiProcessNMI