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