IopAddTriageDumpDataBlock

CHAR __fastcall IopAddTriageDumpDataBlock(UINT64 a1, INT64 a2, UINT64 *a3, INT64 a4, UINT64 a5){
  unsigned __int64 v6; 
  unsigned int v8; 
  unsigned int v9; 
  unsigned __int64 i; 
  unsigned int v11; 
  unsigned __int64 *j; 
  unsigned int v13; 
  unsigned __int64 *v14; 
  unsigned __int64 v16; 
  v6 = a4;
  v8 = a1;
  if( (unsigned int)(a5 - 1) > 0x3FFFE || !KiIsAddressRangeValid(a4, (unsigned int)a5) )
    return 0;
  v9 = 0;
  for( i = (unsigned int)a5 + v6; v9 < v8; a2 += 16i64 )
  {
    v11 = 0;
    for( j = *(unsigned __int64 **)(a2 + 8); v11 < *(_DWORD *)a2; j += 2 )
    {
      v16 = j[1];
      if( v6 < v16 && i > *j )
      {
        if( v6 < *j )
        {
          if( i <= v16 )
            i = *j;
        }
        else
        {
          if( i <= v16 )
            return 1;
          v6 = j[1];
        }
      }
      ++v11;
    }
    ++v9;
  }
  if( !a3 )
    return 0;
  v13 = *(_DWORD *)a3;
  if( *(_DWORD *)a3 >= *((_DWORD *)a3 + 1) )
    return 0;
  v14 = (unsigned __int64 *)(a3[1] + 16i64 * v13);
  *(_DWORD *)a3 = v13 + 1;
  *v14 = v6;
  v14[1] = i;
  return 1;
}

Referenced by:

IoAddTriageDumpDataBlock
IopAddRunTimeTriageDataBlocks