WheapGetErrorSourceFunction
NTSTATUS __stdcall WheapGetErrorSourceFunction(INT64 a1, INT64 a2, CHAR a3){
__int64 v3;
signed __int32 i;
__int64 v5;
int v7;
__int64 v8;
int v9;
int v10;
__int64 v11;
LODWORD(v3) = 0;
if( a1 && *(_DWORD *)(a1 + 40) <= 0x10u )
{
if( a3 )
{
LABEL_8:
if( (_DWORD)a2 )
{
v7 = a2 - 1;
if( v7 )
{
v9 = v7 - 1;
if( v9 )
{
v10 = v9 - 1;
if( v10 )
{
if( v10 == 1 )
{
v11 = *(int *)(a1 + 40);
if( (_DWORD)v11 == 16 )
return *(_QWORD *)(a1 + 184);
else
return *((_QWORD *)&stru_140CF2E80 + 8 * v11 + 670);
}
}
else
{
return *((_QWORD *)&stru_140CF2E80 + 8 * (__int64)*(int *)(a1 + 40) + 669);
}
}
else
{
return *((_QWORD *)&stru_140CF2E80 + 8 * (__int64)*(int *)(a1 + 40) + 668);
}
}
else
{
v8 = *(int *)(a1 + 40);
if( (_DWORD)v8 == 16 )
return *(_QWORD *)(a1 + 176);
else
return *((_QWORD *)&stru_140CF2E80 + 8 * v8 + 667);
}
}
else
{
v5 = *(int *)(a1 + 40);
if( (_DWORD)v5 == 16 )
return *(_QWORD *)(a1 + 192);
else
return *((_QWORD *)&stru_140CF2E80 + 8 * v5 + 666);
}
}
else if( *(_DWORD *)(a1 + 108) != 3 )
{
for( i = *(_DWORD *)(a1 + 92); i >= 0; i = *(_DWORD *)(a1 + 92) )
{
if( i == _InterlockedCompareExchange((volatile signed __int32 *)(a1 + 92), i + 1, i) )
goto LABEL_8;
}
}
}
return v3;
}Referenced by:
WheapAttemptArchitecturalErrorRecovery
WheapCallErrorSourceCorrect
WheapCallErrorSourceInitialize
WheapCallErrorSourceUninitialize
WheapFillOutErrorRecord
WheapReportBootError