MiLockWorkingSetForLargeMapping
UINT8 __fastcall MiLockWorkingSetForLargeMapping(INT64 a1, INT64 a2, INT64 a3){
void *v4;
__int64 v5;
VOID *PoolMm;
INT64 *v7;
KIRQL v8;
KIRQL v9;
INT64 *SharedVm;
if( (*(_BYTE *)(a1 + 184) & 7) != 0 )
{
SharedVm = MiGetSharedVm(a1);
v9 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)SharedVm);
goto LABEL_10;
}
v4 = 0i64;
v5 = *(_QWORD *)(*((_QWORD *)KeGetCurrentThread() + 23) + 1680i64);
if( !*(_QWORD *)(v5 + 608) )
{
PoolMm = ExAllocatePoolMm(64i64, 0x800ui64, 0x6C53694Dui64, (unsigned int)a3 | 0x80000000);
v4 = PoolMm;
if( PoolMm )
memset((INT64)PoolMm, 0i64);
}
v7 = MiGetSharedVm(a1);
v8 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)v7);
*((_DWORD *)v7 + 1) = 0;
v9 = v8;
if( v4 )
{
if( !*(_QWORD *)(v5 + 608) )
{
*(_QWORD *)(v5 + 608) = v4;
return v9;
}
MiUnlockWorkingSetExclusive(a1, v8);
ExFreePoolWithTag(v4, 0);
SharedVm = MiGetSharedVm(a1);
ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)SharedVm);
LABEL_10:
*((_DWORD *)SharedVm + 1) = 0;
}
return v9;
}Referenced by:
MiCommitExistingVad
MiMapUserLargePages