MmChangeKernelCfgBitmap

CHAR __stdcall MmChangeKernelCfgBitmap(UINT64 a1){
  INT64 v1; 
  _MMPTE *PteAddress; 
  UINT64 v3; 
  char v4; 
  union {unsigned __int64 Long;volatile unsigned __int64 VolatileLong;_MMPTE_HARDWARE Hard;_MMPTE_PROTOTYPE Proto;_MMPTE_SOFTWARE Soft;_MMPTE_TIMESTAMP TimeStamp;_MMPTE_TRANSITION Trans;_MMPTE_SUBSECTION Subsect;_MMPTE_LIST List;} v5; 
  union {unsigned __int64 Long;volatile unsigned __int64 VolatileLong;_MMPTE_HARDWARE Hard;_MMPTE_PROTOTYPE Proto;_MMPTE_SOFTWARE Soft;_MMPTE_TIMESTAMP TimeStamp;_MMPTE_TRANSITION Trans;_MMPTE_SUBSECTION Subsect;_MMPTE_LIST List;} v6; 
  int v7; 
  _ETHREAD *CurrentThread; 
  bool v9; 

  PteAddress = MiGetPteAddress((VOID *)a1);
  v3 = (UINT64)PteAddress;
  if( v4 )
  {
    LODWORD(v5.Long) = MiMakeValidPte((_XSTATE_CONFIGURATION *)PteAddress, v1, 536870913i64);
    v6.Long = v5.Long;
    v3 = (UINT64)PteAddress;
  }
  else
  {
    v6.Long = ZeroPte.u.Long;
  }
  v7 = 0;
  LOBYTE(CurrentThread) = MiPteInShadowRange(v3);
  if( (_DWORD)CurrentThread )
  {
    LODWORD(CurrentThread) = MiPteHasShadow();
    if( (_DWORD)CurrentThread )
    {
      v7 = 1;
      if( *(&stru_140C4DB30 + 537) )
        goto LABEL_12;
      v9 = (v6.Long & 1) == 0;
    }
    else
    {
      CurrentThread = (_ETHREAD *)KeGetCurrentThread();
      if( (CurrentThread->Tcb.ApcState.Process->Flags3 & 0x1000) == 0 )
        goto LABEL_12;
      v9 = (v6.Long & 1) == 0;
    }
    if( !v9 )
    {
      LOBYTE(CurrentThread) = 0;
      v6.Long |= 0x8000000000000000ui64;
    }
  }
LABEL_12:
  PteAddress->u.Long = v6.Long;
  if( v7 )
    LOBYTE(CurrentThread) = MiWritePteShadow();
  return(char)CurrentThread;
}

Referenced by:

PsDispatchIumService