MiLockWorkingSetForLargeMapping
UINT8 __stdcall MiLockWorkingSetForLargeMapping(_MMSUPPORT_INSTANCE *Vm, INT64 a2, INT64 a3){
_MMPTE *v4;
_MMWSL_INSTANCE *VmWorkingSetList;
_MMPTE *PoolMm;
_MMSUPPORT_SHARED *v7;
UINT8 v8;
UINT8 v9;
_MMSUPPORT_SHARED *SharedVm;
if( (Vm->Flags._bf_0 & 7) != 0 )
{
SharedVm = MiGetSharedVm(Vm);
v9 = ExAcquireSpinLockExclusive((INT64 *)&SharedVm->WorkingSetLock);
goto LABEL_10;
}
v4 = 0i64;
VmWorkingSetList = KeGetCurrentThread()->ApcState.Process->Vm.Instance.VmWorkingSetList;
if( !VmWorkingSetList[15].NextPteToAge )
{
PoolMm = (_MMPTE *)ExAllocatePoolMm(64i64, 0x800ui64, 0x6C53694Dui64, (unsigned int)a3 | 0x80000000);
v4 = PoolMm;
if( PoolMm )
memset(PoolMm, 0i64, 0x800u);
}
v7 = MiGetSharedVm(Vm);
v8 = ExAcquireSpinLockExclusive((INT64 *)&v7->WorkingSetLock);
v7->GoodCitizenWaiting = 0;
v9 = v8;
if( v4 )
{
if( !VmWorkingSetList[15].NextPteToAge )
{
VmWorkingSetList[15].NextPteToAge = v4;
return v9;
}
MiUnlockWorkingSetExclusive(Vm, v8);
ExFreePoolWithTag(v4, 0);
SharedVm = MiGetSharedVm(Vm);
ExAcquireSpinLockExclusive((INT64 *)&SharedVm->WorkingSetLock);
LABEL_10:
SharedVm->GoodCitizenWaiting = 0;
}
return v9;
}Referenced by:
MiCommitExistingVad
MiMapUserLargePages