MiIsPageTableLocked

unsigned __int64 __fastcall MiIsPageTableLocked(INT64 a1, UINT64 a2){
  char v2; 
  char v4; 
  int v5; 
  INT64 v6; 
  __int64 v7; 
  unsigned __int64 v8; 
  _MMPTE *NextPteToAge; 
  char *v11; 
  bool v12; 
  char *PageTableLockBuffer; 
  int v14; 

  v2 = *(_BYTE *)(a1 + 184);
  v14 = 0;
  v4 = v2 & 7;
  if( (_MMPTE *)a2 == MmGetPxeSelfRef() )
  {
    if( v4 )
    {
      if( v4 == 7 )
      {
        v11 = (char *)&stru_140C4DB30 + 1800;
      }
      else
      {
        v11 = (char *)&stru_140C4DB30 + 1792;
        if( v4 != 5 )
          v11 = (char *)&stru_140C4DB30 + 1816;
      }
    }
    else
    {
      v11 = (char *)(a1 + 176);
    }
    v12 = *(_QWORD *)v11 == 0i64;
  }
  else
  {
    if( v4
      || a2 < (unsigned __int64)MmGetPml4eBase()
      || a2 > (unsigned __int64)MmGetPml4eLimit()
      || (NextPteToAge = KeGetCurrentThread()->ApcState.Process->Vm.Instance.VmWorkingSetList[15].NextPteToAge) == 0i64 )
    {
      LOBYTE(v5) = MiShouldLockPteDirectly(a1, a2);
      if( v5 )
      {
        LODWORD(v8) = MI_READ_PTE_LOCK_FREE(v6);
        return(v8 >> 60) & 1;
      }
      PageTableLockBuffer = MiGetPageTableLockBuffer(v7, v6, &v14);
      return((*(_DWORD *)PageTableLockBuffer >> v14) & 1) != 0;
    }
    v12 = *((_DWORD *)&NextPteToAge->u.Long + ((a2 >> 3) & 0x1FF)) == 0;
  }
  return !v12;
}

Referenced by:

MiAgePte
MiResetAccessBitPte
MiTrimPte
MiWalkVaCheckCommon