MiIsCfgBitMapPageShared

INT64 __fastcall MiIsCfgBitMapPageShared(UINT64 a1, INT64 a2){
  _MMPTE *PteBase; 
  unsigned __int64 v5; 
  INT64 v6; 
  char v7; 
  __int64 v8; 
  unsigned int v9; 
  UINT64 v10; 
  INT64 v11; 
  _MMPTE *ProtoPteAddress; 
  unsigned __int64 v13; 
  unsigned __int64 v14; 
  UNICODE_STRING *v15; 
  UINT8 v16; 
  PWCHAR v17; 
  int v18; 
  __int64 v19; 
  bool v20; 
  int a6; 
  INT64 v23; 
  _SUBSECTION *ContainingSubsection; 
  a6 = 0;
  PteBase = MmGetPteBase();
  v5 = (unsigned __int64)PteBase + ((a1 >> 9) & 0x7FFFFFFFF8i64);
  v6 = *((_QWORD *)KeGetCurrentThread() + 23) + 1664i64;
  v7 = MiLockWorkingSetShared(v6);
  MiGetNextPageTable(v5, v5, 0i64, v7, 0, &a6);
  if( v5 != v8 )
  {
    v9 = 3;
    goto LABEL_19;
  }
  v10 = (UINT64)PteBase + ((v5 >> 9) & 0x7FFFFFFFF8i64);
  v23 = MI_READ_PTE_LOCK_FREE(v5);
  v11 = v23;
  if( !v23 )
  {
    v9 = 2;
    goto LABEL_17;
  }
  ProtoPteAddress = MiGetProtoPteAddress((_MMVAD *)a2, a1 >> 12, 0i64, &ContainingSubsection);
  v9 = 1;
  v13 = (unsigned __int64)ProtoPteAddress;
  if( (v11 & 1) != 0 )
  {
    v14 = MI_READ_PTE_LOCK_FREE((INT64)&v23);
    LOBYTE(v18) = MI_PFN_IS_PROTO((UNICODE_STRING *)MmGetPfnDb() + 3 * ((v14 >> 12) & 0xFFFFFFFFFi64), v15, v16, v17);
    if( v18 )
    {
      v20 = (*(_QWORD *)(v19 + 8) | 0x8000000000000000ui64) == v13;
      goto LABEL_15;
    }
  }
  else if( (v11 & 0x400) != 0 )
  {
    if( MiIsPrototypePteVadLookup(v11) )
      goto LABEL_17;
    if( qword_140C4DC80 )
    {
      if( (v11 & 0x10) != 0 )
        v11 &= ~0x10ui64;
      else
        v11 &= ~qword_140C4DC80;
    }
    v20 = v13 == v11 >> 16;
LABEL_15:
    if( v20 )
      goto LABEL_17;
  }
  v9 = 0;
LABEL_17:
  if( v10 )
    MiUnlockPageTableInternal(v6, v10);
LABEL_19:
  MiUnlockWorkingSetShared(v6, v7);
  return v9;
}

Referenced by:

MiMarkSharedImageCfgBits