MiMapLockedPagesInUserSpaceHelper

VOID __fastcall MiMapLockedPagesInUserSpaceHelper(
        VOID *Va,
        UINT64 *Page,
        UINT64 *OldPage,
        _MEMORY_CACHING_TYPE CacheType,
        UINT64 NumberOfPages,
        _MMVAD *Vad,
        UINT64 Priority){
  INT64 v9; 
  UINT64 v10; 
  unsigned int v11; 
  unsigned int v12; 
  INT64 v13; 
  char *v14; 
  UINT8 v15; 
  unsigned int v16; 
  _MMPFN *PfnDb; 
  char v18; 
  INT64 v19; 
  INT64 v20; 
  int v21; 
  INT64 v22; 
  INT64 v23; 
  CHAR v24; 
  signed __int64 v26; 
  v9 = *((_QWORD *)KeGetCurrentThread() + 23);
  v10 = (UINT64)MmGetPteBase() + (((unsigned __int64)Va >> 9) & 0x7FFFFFFFF8i64);
  v11 = (((int)Priority >> 31) & 0xFFFFFFFD) + 4;
  if( CacheType )
  {
    if( CacheType == MmWriteCombined )
      v11 |= 0x18u;
  }
  else
  {
    v11 |= 8u;
  }
  v12 = (unsigned int)Vad;
  v13 = v9 + 1664;
  if( Vad )
  {
    MiInsertVad((INT64)Vad, v9, 1);
    v12 = (*((_DWORD *)Vad + 12) >> 12) & 0x3F;
  }
  v14 = 0i64;
  v15 = MiLockWorkingSetShared(v13);
  v26 = (char *)Page - (((unsigned __int64)Va >> 9) & 0x7FFFFFFFF8i64) - (char *)MmGetPteBase();
  do
  {
    v16 = v11;
    if( OldPage )
    {
      PfnDb = MmGetPfnDb();
      v16 = (unsigned __int8)*((_DWORD *)PfnDb + 12 * *OldPage + 4) >> 5;
      v18 = *((_BYTE *)PfnDb + 48 * *OldPage + 34) >> 6;
      if( v18 == 2 )
      {
        v16 |= 0x18u;
      }
      else if( !v18 )
      {
        v16 |= 8u;
      }
      ++OldPage;
    }
    if( !v14 )
      goto LABEL_23;
    if( (v10 & 0xFFF) == 0 )
    {
      MiUnlockPageTableInternal(v13, (UINT64)v14);
LABEL_23:
      v14 = (char *)MmGetPteBase() + ((v10 >> 9) & 0x7FFFFFFFF8i64);
      MiMakeSystemAddressValid(v10, 0i64, v12, v15, 0);
    }
    MiInsertPhysicalPteMapping(v10, *(_QWORD *)(v26 + v10), v16);
    v10 += 8i64;
    if( (v10 & 0x78) == 0 )
    {
      if( MiWorkingSetIsContended(v13)
        || (MiPageTableLockIsContended(v13, (UINT64)v14, v19, v20, v22, v23, v24), v21)
        || KeShouldYieldProcessor() )
      {
        MiUnlockPageTableInternal(v13, (UINT64)v14);
        MiUnlockWorkingSetShared(v13, v15);
        v14 = 0i64;
        MiLockWorkingSetShared(v13);
      }
    }
    --NumberOfPages;
  }
  while( NumberOfPages );
  if( v14 )
    MiUnlockPageTableInternal(v13, (UINT64)v14);
  MiUnlockWorkingSetShared(v13, v15);
}

Referenced by:

MiMapLockedPagesInUserSpace
MmRotatePhysicalView