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