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