KiValidateTriageDumpDataArray
CHAR __stdcall KiValidateTriageDumpDataArray(INT64 a1, INT64 a2, UINT64 a3){
unsigned int v3;
unsigned int v5;
unsigned int v6;
unsigned __int64 v7;
unsigned int v8;
unsigned int v9;
__int64 *v11;
__int64 v12;
v3 = a3;
v5 = 0;
if( KiIsAddressRangeValid(a1, 48i64) )
{
v6 = *(_DWORD *)(a1 + 20);
if( *(_DWORD *)(a1 + 16) <= v6 )
{
v7 = 16i64 * v6;
if( v7 <= 0xFFFFFFFF
&& (int)v7 + 48 >= (unsigned int)v7
&& KiIsAddressRangeValid(a1 + 48, v7)
&& KiIsAddressRangeValid(*(_QWORD *)a1, 16i64)
&& KiIsAddressRangeValid(*(_QWORD *)(a1 + 8), 16i64)
&& *(_QWORD *)(*(_QWORD *)a1 + 8i64) == a1
&& **(_QWORD **)(a1 + 8) == a1
&& (!v3 || *(_DWORD *)(a1 + 28) <= v3) )
{
v8 = *(_DWORD *)(a1 + 16);
v9 = 0;
if( v8 )
{
v11 = (__int64 *)(a1 + 56);
while( 1 )
{
v12 = *v11;
if( (unsigned __int64)*v11 > 0xFFFFFFFF || (unsigned int)v12 + v5 < v5 )
break;
++v9;
v11 += 2;
v5 += v12;
if( v9 >= v8 )
goto LABEL_12;
}
}
else
{
LABEL_12:
if( *(_DWORD *)(a1 + 24) == v5 && v5 <= *(_DWORD *)(a1 + 28) )
return 1;
}
}
}
}
return 0;
}Referenced by:
IopLiveDumpAddTriageDumpData
KeAddTriageDumpDataBlock
KiInvokeBugCheckAddTriageDumpDataCallbacks