HalpInitializeGenericErrorSource
NTSTATUS __stdcall HalpInitializeGenericErrorSource(UINT64 Phase, WHEA_ERROR_SOURCE_DESCRIPTOR *ErrorSource){
NTSTATUS v4;
int v5;
_QWORD *v6;
_QWORD *v7;
int v8;
_QWORD *v9;
_QWORD *v10;
int v11;
_QWORD *v12;
_QWORD *v13;
int v14;
_QWORD *v15;
_LARGE_INTEGER *v16;
__int64 v17;
_QWORD *v18;
int inited;
_QWORD *v20;
_QWORD *v21;
bool v22;
PVOID P;
P = 0i64;
if( !(_DWORD)Phase )
return 0;
if( !HalpGenericInitDone )
{
qword_140C49988 = (__int64)&HalpGenericPeiErrorSourceListHead;
HalpGenericPeiErrorSourceListHead = (__int64)&HalpGenericPeiErrorSourceListHead;
qword_140C49AF8 = (__int64)&HalpGenericAssistErrorSourceListHead;
HalpGenericAssistErrorSourceListHead = (__int64)&HalpGenericAssistErrorSourceListHead;
qword_140C49AD8 = (__int64)&HalpGenericSdeiErrorSourceListHead;
HalpGenericSdeiErrorSourceListHead = (__int64)&HalpGenericSdeiErrorSourceListHead;
HalpGenericInitDone = 1;
qword_140C49AC8 = (__int64)&HalpGenericPolledErrorSourceListHead;
HalpGenericPolledErrorSourceListHead = (INT64)&HalpGenericPolledErrorSourceListHead;
qword_140C49AE8 = (__int64)&HalpGenericNmiErrorSourceListHead;
HalpGenericNmiErrorSourceListHead = (INT64)&HalpGenericNmiErrorSourceListHead;
qword_140C499A8 = (__int64)&HalpGenericSeaErrorSourceListHead;
HalpGenericSeaErrorSourceListHead = (__int64)&HalpGenericSeaErrorSourceListHead;
qword_140C49998 = (__int64)&HalpGenericSeiErrorSourceListHead;
HalpGenericSeiErrorSourceListHead = (__int64)&HalpGenericSeiErrorSourceListHead;
}
switch( *((_BYTE *)ErrorSource + 64) )
{
case 0:
if( *((_DWORD *)ErrorSource + 2) == 12 )
inited = HalpInitGenericErrorSourceEntryV2((__int64)ErrorSource, &P);
else
inited = HalpInitGenericErrorSourceEntry((__int64)ErrorSource, &P);
v4 = inited;
v20 = P;
*((_QWORD *)P + 2) = KUSER_SHARED_DATA.TickCountQuad;
if( inited < 0 )
return v4;
v21 = (_QWORD *)qword_140C49AC8;
if( *(INT64 **)qword_140C49AC8 == &HalpGenericPolledErrorSourceListHead )
{
v22 = HalpGenericPollingInitDone == 0;
*v20 = &HalpGenericPolledErrorSourceListHead;
v20[1] = v21;
*v21 = v20;
qword_140C49AC8 = (__int64)v20;
if( v22 )
{
HalpGenericPollingInitDone = 1;
HalpInitGenericErrorSourcePollingRoutine();
}
goto LABEL_55;
}
goto LABEL_52;
case 4:
if( *((_DWORD *)ErrorSource + 2) == 12 )
v14 = HalpInitGenericErrorSourceEntryV2((__int64)ErrorSource, &P);
else
v14 = HalpInitGenericErrorSourceEntry((__int64)ErrorSource, &P);
v4 = v14;
if( v14 >= 0 )
{
v15 = P;
v16 = (_LARGE_INTEGER *)*((_QWORD *)P + 5);
if( v16->QuadPart == -1 || (MmMapIoSpaceEx(*v16, *((unsigned int *)P + 12), 0x204ui64), (v15[7] = v17) == 0i64) )
{
ExFreePoolWithTag(v15, 0x206C6148u);
return -1073741823;
}
v18 = (_QWORD *)qword_140C49AE8;
if( *(INT64 **)qword_140C49AE8 != &HalpGenericNmiErrorSourceListHead )
goto LABEL_52;
*v15 = &HalpGenericNmiErrorSourceListHead;
v15[1] = v18;
*v18 = v15;
qword_140C49AE8 = (__int64)v15;
}
if( !HalpGenericNmiInitDone )
HalpGenericNmiInitDone = 1;
goto LABEL_55;
case 8:
if( *((_DWORD *)ErrorSource + 2) == 12 )
v11 = HalpInitGenericErrorSourceEntryV2((__int64)ErrorSource, &P);
else
v11 = HalpInitGenericErrorSourceEntry((__int64)ErrorSource, &P);
v4 = v11;
if( v11 >= 0 )
{
v12 = (_QWORD *)qword_140C499A8;
if( *(__int64 **)qword_140C499A8 != &HalpGenericSeaErrorSourceListHead )
goto LABEL_52;
v13 = P;
*(_QWORD *)P = &HalpGenericSeaErrorSourceListHead;
v13[1] = v12;
*v12 = v13;
qword_140C499A8 = (__int64)v13;
}
if( !HalpGenericSeaInitDone )
HalpGenericSeaInitDone = 1;
goto LABEL_55;
case 9:
if( *((_DWORD *)ErrorSource + 2) == 12 )
v8 = HalpInitGenericErrorSourceEntryV2((__int64)ErrorSource, &P);
else
v8 = HalpInitGenericErrorSourceEntry((__int64)ErrorSource, &P);
v4 = v8;
if( v8 >= 0 )
{
v9 = (_QWORD *)qword_140C49998;
if( *(__int64 **)qword_140C49998 != &HalpGenericSeiErrorSourceListHead )
goto LABEL_52;
v10 = P;
*(_QWORD *)P = &HalpGenericSeiErrorSourceListHead;
v10[1] = v9;
*v9 = v10;
qword_140C49998 = (__int64)v10;
}
if( !HalpGenericSeiInitDone )
HalpGenericSeiInitDone = 1;
goto LABEL_55;
case 0xA:
if( *((_DWORD *)ErrorSource + 2) == 12 )
v5 = HalpInitGenericErrorSourceEntryV2((__int64)ErrorSource, &P);
else
v5 = HalpInitGenericErrorSourceEntry((__int64)ErrorSource, &P);
v4 = v5;
if( !HalpGenericPeiInitDone )
HalpGenericPeiInitDone = 1;
if( v5 < 0 )
return v4;
v6 = P;
v4 = HalpRegisterPeiErrorSource(P);
if( v4 < 0 )
return v4;
v7 = (_QWORD *)qword_140C49988;
if( *(__int64 **)qword_140C49988 == &HalpGenericPeiErrorSourceListHead )
{
*v6 = &HalpGenericPeiErrorSourceListHead;
v6[1] = v7;
*v7 = v6;
qword_140C49988 = (__int64)v6;
LABEL_55:
if( v4 >= 0 )
HalpGenInitialRead((INT64)ErrorSource);
return v4;
}
LABEL_52:
__fastfail(3u);
}
return -1073741637;
}Referenced by:
HalpInitializeErrSrc