MiInsertViewOfPhysicalSection
VOID __stdcall MiInsertViewOfPhysicalSection(_EPROCESS *Process, _MMVAD *Vad){
ULONG_PTR v2;
ULONG_PTR v4;
_MMPTE *PteBase;
unsigned int v7;
UINT64 v8;
_ETHREAD *CurrentThread;
UINT64 v10;
_MMSUPPORT_FULL *p_Vm;
UINT64 v12;
UINT8 v13;
UINT8 v14;
_MMPTE *v15;
int v16;
UINT64 v17;
UINT64 v18;
_MMPTE *v19;
_ETHREAD *v20;
v4 = v2;
PteBase = MmGetPteBase();
v7 = (Vad->Core.u.LongFlags >> 7) & 0x1F;
v8 = (UINT64)&PteBase[(Vad->Core.StartingVpn | ((unsigned __int64)Vad->Core.StartingVpnHigh << 32)) & 0xFFFFFFFFFi64];
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v10 = 0i64;
v19 = &PteBase[(Vad->Core.EndingVpn | ((unsigned __int64)Vad->Core.EndingVpnHigh << 32)) & 0xFFFFFFFFFi64];
v20 = CurrentThread;
p_Vm = &Process->Vm;
--CurrentThread->Tcb.SpecialApcDisable;
ExAcquirePushLockExclusiveEx(&Vad->Core.PushLock, 0i64);
CurrentThread->$84F33738BEE95ACDF5C5BF1C8FDC7C8C::_bf_0 |= 0x80u;
MiInsertVad(Vad, Process);
MiLockWorkingSetShared();
v14 = v13;
if( v8 > (unsigned __int64)v19 )
goto LABEL_9;
v15 = MmGetPteBase();
do
{
if( !v10 )
goto LABEL_10;
if( (v8 & 0xFFF) == 0 )
{
MiUnlockPageTableInternal((INT64)p_Vm, v10);
LABEL_10:
LODWORD(v18) = 0;
MiMakeSystemAddressValid((VOID *)v8, 0i64, (Vad->Core.u.LongFlags >> 12) & 0x3F, v14, v18);
v10 = (UINT64)v15 + ((v8 >> 9) & 0x7FFFFFFFF8i64);
}
MiInsertPhysicalPteMapping(v8, v4, v7);
v8 += 8i64;
if( (v8 & 0x78) == 0 )
{
LOBYTE(v16) = MiWorkingSetIsContended((INT64)p_Vm);
if( v16 || (unsigned int)MiPageTableLockIsContended((__int64)p_Vm, v10) || (unsigned int)KeShouldYieldProcessor() )
{
MiUnlockPageTableInternal((INT64)p_Vm, v10);
LOBYTE(v17) = v14;
MiUnlockWorkingSetShared(&p_Vm->Instance, v17);
v10 = 0i64;
MiLockWorkingSetShared();
}
}
++v4;
}
while( v8 <= (unsigned __int64)v19 );
CurrentThread = v20;
if( v10 )
MiUnlockPageTableInternal((INT64)p_Vm, v10);
LABEL_9:
LOBYTE(v12) = v14;
MiUnlockWorkingSetShared(&p_Vm->Instance, v12);
MiUnlockVad(CurrentThread, &Vad->Core);
}Referenced by:
MiMapViewOfPhysicalSection