MiComputeFaultCluster

VOID __fastcall MiComputeFaultCluster(INT64 a1, _QWORD *a2, INT64 a3, INT64 a4){
  __int64 v4; 
  __int64 v5; 
  __int64 v6; 
  unsigned __int64 v7; 
  unsigned __int64 v10; 
  __int64 v11; 
  unsigned __int64 v12; 
  unsigned __int64 v13; 
  INT64 v14; 
  unsigned __int64 v15; 
  unsigned __int64 v16; 
  __int64 v17; 
  unsigned __int64 v18; 
  INT64 v19; 
  unsigned __int16 v20; 
  INT64 v21; 
  INT64 v22; 
  unsigned __int64 v23; 
  __int64 v24; 
  __int64 v25; 
  int v27; 
  int v28; 
  v28 = a4;
  v4 = a2[4];
  v5 = a2[1];
  v6 = 2i64 * a2[3];
  v7 = a2[2];
  v24 = a2[3];
  v10 = *(_QWORD *)(v5 + 8 * v6) + (v4 << 12);
  v25 = v4;
  v23 = v7;
  MiAdvanceFaultList(a2);
  v12 = a2[3];
  v13 = 1i64;
  if( v12 < v7 )
  {
    v27 = 0;
    v14 = (INT64)MmGetPteBase() + ((v10 >> 9) & 0x7FFFFFFFF8i64) + 8;
    v15 = 256i64;
    if( v28 && *(unsigned int *)(a1 + 1164) < 0x100ui64 )
      v15 = *(unsigned int *)(a1 + 1164);
    if( a3 )
    {
      v16 = (*(unsigned int *)(a3 + 28) | ((unsigned __int64)*(unsigned __int8 *)(a3 + 33) << 32)) - (v10 >> 12) + 1;
      if( v15 <= v16 )
        v16 = v15;
      v15 = v16;
      v17 = *(unsigned int *)(a3 + 52);
      LODWORD(v17) = v17 & 0x7FFFFFFF;
      if( v17 | ((unsigned __int64)*(unsigned __int8 *)(a3 + 34) << 31) )
      {
        a3 = 0i64;
        v27 = 1;
      }
    }
    if( v15 > 1 )
    {
      while( 1 )
      {
        if( !a3 )
        {
          if( (v14 & 0xFFF) == 0 || (v19 = MI_READ_PTE_LOCK_FREE(v14), v22 = v19, v20 = v19, (v19 & 1) != 0) )
          {
LABEL_14:
            v11 = v24;
            v4 = v25;
            break;
          }
          v21 = v19 & 0x400;
          if( v27 )
          {
            if( !v21 )
              goto LABEL_14;
          }
          else if( v21
                 || (v20 & 0x800) != 0
                 || !(unsigned int)MiGetPagingFileOffset((MMPTE *)&v22)
                 || v28 != (unsigned int)MiIsPteInStore(a1, v20) )
          {
            goto LABEL_14;
          }
          v14 += 8i64;
        }
        if( ((*(_QWORD *)(a2[1] + 16 * v12) + (a2[4] << 12)) & 0xFFFFFFFFFFFFF000ui64) - 4096 == (v10 & 0xFFFFFFFFFFFFF000ui64) )
        {
          ++v13;
          MiAdvanceFaultList(a2);
          v12 = a2[3];
          if( v12 != v23 )
          {
            v10 = v18;
            if( v13 < v15 )
              continue;
          }
        }
        goto LABEL_14;
      }
    }
  }
  a2[4] = v4;
  a2[3] = v11;
}

Referenced by:

MiResolveMappedFileFault
MiResolvePageFileFault