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