MiIsCfgBitMapPageShared

VOID __fastcall MiIsCfgBitMapPageShared(VOID *Va, _MMVAD *Vad, INT64 a3, INT64 a4, UINT8 WsIrql){
  _MMPTE *PteBase; 
  unsigned __int64 v6; 
  _MMSUPPORT_FULL *p_Vm; 
  UINT8 v8; 
  UINT8 v9; 
  UINT64 v10; 
  UINT64 v11; 
  INT64 v12; 
  UINT64 v13; 
  unsigned __int64 v14; 
  _UNICODE_STRING *v15; 
  UINT8 v16; 
  PWCHAR v17; 
  int v18; 
  UINT64 v19; 
  UINT64 v20; 
  UINT64 LargePage; 
  INT64 v22; 

  LODWORD(LargePage) = 0;
  PteBase = MmGetPteBase();
  v6 = (unsigned __int64)PteBase + (((unsigned __int64)Va >> 9) & 0x7FFFFFFFF8i64);
  p_Vm = &KeGetCurrentThread()->ApcState.Process->Vm;
  MiLockWorkingSetShared();
  v9 = v8;
  LODWORD(v19) = 0;
  if( (_MMPTE *)v6 == MiGetNextPageTable((_MMPTE *)v6, (_MMPTE *)v6, 0i64, v8, v19, &LargePage, v20) )
  {
    v11 = (UINT64)PteBase + ((v6 >> 9) & 0x7FFFFFFFF8i64);
    LODWORD(v12) = MI_READ_PTE_LOCK_FREE(v6);
    v22 = v12;
    v13 = v12;
    if( v12 )
    {
      MiGetProtoPteAddress();
      if( (v13 & 1) != 0 )
      {
        LODWORD(v14) = MI_READ_PTE_LOCK_FREE((INT64)&v22);
        LOBYTE(v18) = MI_PFN_IS_PROTO((_UNICODE_STRING *)&MmGetPfnDb()[(v14 >> 12) & 0xFFFFFFFFFi64], v15, v16, v17);
        if( v18 )
          v10 = 0x8000000000000000ui64;
      }
      else if( (v13 & 0x400) != 0 )
      {
        MiIsPrototypePteVadLookup(v13);
      }
    }
    if( v11 )
      MiUnlockPageTableInternal((INT64)p_Vm, v11);
  }
  LOBYTE(v10) = v9;
  MiUnlockWorkingSetShared(&p_Vm->Instance, v10);
}

Referenced by:

MiMarkSharedImageCfgBits