MiReferenceCfgVad
VOID __stdcall MiReferenceCfgVad(_ETHREAD *CurrentThread, VOID *VadBaseAddress, _MI_CFG_BITMAP_TYPE Type){
__int64 v6;
_EPROCESS *Process;
_MMWSL_INSTANCE *VmWorkingSetList;
__int64 v9;
_EX_PUSH_LOCK *v10;
unsigned __int64 v11;
unsigned int v12;
_EWOW64PROCESS *WoW64Process;
__int16 Machine;
INT64 v15;
v6 = 4i64 * (int)Type;
Process = KeGetCurrentThread()->ApcState.Process;
VmWorkingSetList = Process->Vm.Instance.VmWorkingSetList;
LODWORD(v9) = MiObtainReferencedVadEx((UINT64)VadBaseAddress, 2, &v15);
v10 = (_EX_PUSH_LOCK *)v9;
v11 = *(unsigned int *)(v9 + 28) | ((unsigned __int64)*(unsigned __int8 *)(v9 + 33) << 32);
(&VmWorkingSetList[11].NextPteToAccessClear)[v6] = (_MMPTE *)v9;
(&VmWorkingSetList[11].NextPteToTrim)[v6] = (_MMPTE *)VadBaseAddress;
v12 = 0;
*(unsigned int *)((char *)&VmWorkingSetList[11].LastAccessClearingRemainder + v6 * 8) = 0;
(&VmWorkingSetList[11].NextPteToAge)[v6] = (_MMPTE *)(((v11 + 1) << 12) - (_QWORD)VadBaseAddress);
if( Type == CfgBitMapWow64 )
{
WoW64Process = Process->WoW64Process;
if( !WoW64Process || (Machine = WoW64Process->Machine) == 0 )
Machine = -31132;
LOBYTE(v12) = Machine == 452;
*(unsigned int *)((char *)&VmWorkingSetList[11].LastAccessClearingRemainder + v6 * 8) = v12;
}
MiUnlockVadShared(&CurrentThread->Tcb, v10);
}Referenced by:
MiCfgInitializeProcess
MmInitializeProcessAddressSpace