HalHandleNMI
CHAR __stdcall HalHandleNMI(){
INT64 *v0;
char v1;
CHAR result;
CHAR v3;
INT64 *ErrorSource;
dword_140C50698 = 1;
HalpProcessorInNmiHandler = *((_DWORD *)KeGetPcr() + 105);
if( !HalpGenericNmiInitDone )
goto LABEL_7;
v0 = (INT64 *)HalpGenericNmiErrorSourceListHead;
v1 = 0;
if( (INT64 *)HalpGenericNmiErrorSourceListHead == &HalpGenericNmiErrorSourceListHead )
goto LABEL_7;
do
{
result = HalpCheckAndReportGhes((INT64)v0);
v0 = (INT64 *)*v0;
if( result )
v1 = 1;
}
while( v0 != &HalpGenericNmiErrorSourceListHead );
if( v1 != 1 )
{
LABEL_7:
result = __inbyte(0x61u);
v3 = result;
if( dword_140C50694 == 1 )
{
memset((INT64)&qword_140C506A0, 0i64);
qword_140C506A0 = 0x341454857i64;
dword_140C506B0 = 3;
dword_140C506BC = 3;
dword_140C506F8 = ((unsigned int)dword_140C506AC >> 2) & 1;
dword_140C506A8 = 92;
dword_140C506B4 = 1;
dword_140C506B8 = HalpNmiInfo;
xmmword_140C506C0 = (__int128)NMI_NOTIFY_TYPE_GUID;
dword_140C506D8 = 4;
dword_140C506E0 = 80;
dword_140C506E4 = 12;
byte_140C506F0 = v3;
ErrorSource = WheapGetErrorSource((INT64)&WheapErrorSourceTable, (unsigned int)HalpNmiInfo);
PshedRetrieveErrorInfo(
&qword_140C506A0,
(unsigned __int64)(ErrorSource + 12) & ((unsigned __int128)-(__int128)(unsigned __int64)ErrorSource >> 64));
result = WheaReportHwError((_WHEA_ERROR_PACKET_V2 *)&qword_140C506A0);
}
}
HalpProcessorInNmiHandler = 1280;
return result;
}Referenced by:
KiProcessNMI