MiClusterVadActive

INT64 __fastcall MiClusterVadActive(_MMVAD *Vad, _MMPFN *Pfn1, UINT64 *PageAlignment){
  __int64 v4; 
  _MMPTE *PteBase; 
  __int64 v6; 
  unsigned __int64 v7; 
  int v8; 
  __int64 v9; 
  INT64 v10; 
  __int64 v11; 
  UINT64 v12; 
  __int64 v13; 
  UINT64 v15; 
  *PageAlignment = -1i64;
  v4 = *((_QWORD *)Pfn1 + 1) << 25;
  PteBase = MmGetPteBase();
  v6 = (v4 - ((_QWORD)PteBase << 25)) >> 16;
  v7 = v6 & 0xFFFFFFFFFFFF0000ui64;
  if( (v6 & 0xFFFFFFFFFFFF0000ui64) >> 12 < (*((unsigned int *)Vad + 6) | ((unsigned __int64)*((unsigned __int8 *)Vad
                                                                                              + 32) << 32))
    || (v7 + 0xFFFF) >> 12 > (*((unsigned int *)Vad + 7) | ((unsigned __int64)*((unsigned __int8 *)Vad + 33) << 32)) )
  {
    return 0i64;
  }
  v8 = 0;
  v9 = -1i64;
  v10 = (INT64)PteBase + ((v7 >> 9) & 0x7FFFFFFFF8i64);
  v11 = 0i64;
  do
  {
    v15 = MI_READ_PTE_LOCK_FREE(v10);
    v12 = v15;
    if( (v15 & 1) != 0 )
    {
      MiPteInShadowRange((UINT64)&v15);
      v13 = (v12 >> 12) & 0xFFFFFFFFFi64;
      if( (v13 & 0xF) != (unsigned int)v11 )
        return 0i64;
      if( v9 == -1 )
      {
        v9 = v13 - (unsigned int)v11;
      }
      else
      {
        if( v13 != v11 + v9 )
          return 0i64;
        v8 = 1;
      }
    }
    v11 = (unsigned int)(v11 + 1);
    v10 += 8i64;
  }
  while( (unsigned int)v11 < 0x10 );
  if( !v8 )
  {
    *PageAlignment = (unsigned __int16)v6 >> 12;
    return 0i64;
  }
  return 1i64;
}

Referenced by:

No references.