MiClusterVadActive

NTSTATUS __stdcall MiClusterVadActive(_MMVAD *Vad, _MMPFN *Pfn1, UINT64 *PageAlignment){
  unsigned __int64 v4; 
  _MMPTE *PteBase; 
  __int64 v6; 
  unsigned __int64 v7; 
  int v8; 
  __int64 v9; 
  INT64 v10; 
  __int64 v11; 
  UINT64 v12; 
  UINT64 v13; 
  __int64 v14; 
  UINT64 v16; 

  *PageAlignment = -1i64;
  v4 = Pfn1->PteLong << 25;
  PteBase = MmGetPteBase();
  v6 = (__int64)(v4 - ((_QWORD)PteBase << 25)) >> 16;
  v7 = v6 & 0xFFFFFFFFFFFF0000ui64;
  if( (v6 & 0xFFFFFFFFFFFF0000ui64) >> 12 < (Vad->Core.StartingVpn | ((unsigned __int64)Vad->Core.StartingVpnHigh << 32))
    || (v7 + 0xFFFF) >> 12 > (Vad->Core.EndingVpn | ((unsigned __int64)Vad->Core.EndingVpnHigh << 32)) )
  {
    return 0;
  }
  v8 = 0;
  v9 = -1i64;
  v10 = (INT64)PteBase + ((v7 >> 9) & 0x7FFFFFFFF8i64);
  v11 = 0i64;
  do
  {
    LODWORD(v12) = MI_READ_PTE_LOCK_FREE(v10);
    v16 = v12;
    v13 = v12;
    if( (v12 & 1) != 0 )
    {
      MiPteInShadowRange((UINT64)&v16);
      v14 = (v13 >> 12) & 0xFFFFFFFFFi64;
      if( (v14 & 0xF) != (unsigned int)v11 )
        return 0;
      if( v9 == -1 )
      {
        v9 = v14 - (unsigned int)v11;
      }
      else
      {
        if( v14 != v11 + v9 )
          return 0;
        v8 = 1;
      }
    }
    v11 = (unsigned int)(v11 + 1);
    v10 += 8i64;
  }
  while( (unsigned int)v11 < 0x10 );
  if( !v8 )
  {
    *PageAlignment = (unsigned __int16)v6 >> 12;
    return 0;
  }
  return 1;
}

Referenced by:

No references.