MiInsertLargeVadMapping

INT64 __fastcall MiInsertLargeVadMapping(UINT64 a1, UINT64 a2, INT64 a3, UINT64 *a4, INT64 a5){
  int v8; 
  __int64 v9; 
  _MMPFN *v10; 
  INT64 v11; 
  UINT64 v12; 
  unsigned __int64 v13; 
  __int64 v14; 
  UINT64 v15; 
  __int64 v17[5]; 
  v8 = a3;
  v9 = *((_QWORD *)KeGetCurrentThread() + 23);
  v10 = MiLockProtoPoolPage((_MMPTE *)a2, 0i64);
  if( !v10 )
    return 0i64;
  v11 = MI_READ_PTE_LOCK_FREE(a2);
  LOBYTE(v12) = 17;
  v17[0] = v11;
  v13 = v11;
  MiUnlockProtoPoolPage(v10, v12);
  MiPteInShadowRange((UINT64)v17);
  v14 = 0xFFFFC0000i64;
  if( v8 != 2 )
    v14 = 0xFFFFFFE00i64;
  v17[0] = MiMakeValidPte(
             (UINT64)MmGetPteBase() + ((a1 >> 9) & 0x7FFFFFFFF8i64),
             (v13 >> 12) & v14,
             (unsigned int)a5 | 0x84000000);
  v15 = v17[0];
  if( v8 != 1 && _InterlockedCompareExchange((volatile signed __int32 *)MiGetSharedVm(v9 + 1664), 0x80000000, 1) != 1 )
    return 0i64;
  *a4 = v15;
  if( v8 != 1 )
    *(_DWORD *)MiGetSharedVm(v9 + 1664) = 1;
  return 1i64;
}

Referenced by:

MiInPagePageTable