MiChargeProcessPhysicalPages
NTSTATUS __stdcall MiChargeProcessPhysicalPages(_EPROCESS *Process, UINT64 QuotaCharge){
signed __int64 VadPhysicalPages;
unsigned __int64 i;
signed __int64 v6;
if( Process->VadPhysicalPagesLimit )
{
VadPhysicalPages = Process->VadPhysicalPages;
for( i = VadPhysicalPages + QuotaCharge; i <= Process->VadPhysicalPagesLimit; i = QuotaCharge + VadPhysicalPages )
{
v6 = VadPhysicalPages;
VadPhysicalPages = _InterlockedCompareExchange64(
(volatile signed __int64 *)&Process->VadPhysicalPages,
i,
VadPhysicalPages);
if( v6 == VadPhysicalPages )
return 1;
}
return 0;
}
else
{
_InterlockedExchangeAdd64((volatile signed __int64 *)&Process->VadPhysicalPages, QuotaCharge);
return 1;
}
}Referenced by:
MiAllocateUserPhysicalPages
MiCommitExistingVad
MiCreateLargePageVad