MiReleaseNonPagedResources
VOID __stdcall MiReleaseNonPagedResources(_MI_PARTITION *Partition, UINT64 NumberOfPages){
unsigned __int64 v2;
struct _KPRCB *CurrentPrcb;
__int64 CachedResidentAvailable;
bool v6;
signed __int32 v7;
v2 = NumberOfPages;
MiReturnCommit(Partition, NumberOfPages);
if( Partition == &Irp )
{
CurrentPrcb = KeGetCurrentPrcb();
CachedResidentAvailable = (int)CurrentPrcb->CachedResidentAvailable;
if( (_DWORD)CachedResidentAvailable != -1 )
{
if( v2 + CachedResidentAvailable <= 0x100 )
{
do
{
if( v2 >= 0x80000 )
break;
v7 = _InterlockedCompareExchange(
(volatile signed __int32 *)&CurrentPrcb->CachedResidentAvailable,
CachedResidentAvailable + v2,
CachedResidentAvailable);
v6 = (_DWORD)CachedResidentAvailable == v7;
LODWORD(CachedResidentAvailable) = v7;
if( v6 )
return;
}
while( v7 != -1 && v2 + v7 <= 0x100 );
}
if( (int)CachedResidentAvailable > 192
&& (_DWORD)CachedResidentAvailable != -1
&& (_DWORD)CachedResidentAvailable == _InterlockedCompareExchange(
(volatile signed __int32 *)&CurrentPrcb->CachedResidentAvailable,
192,
CachedResidentAvailable) )
{
v2 += (int)CachedResidentAvailable - 192;
}
}
}
if( v2 )
_InterlockedExchangeAdd64((volatile signed __int64 *)&Partition->Vp.ResidentAvailablePages, v2);
}Referenced by:
MiAllocatePartitionPhysicalPages
MiChargeSystemImageCommitment
MiFreeLargePageCharges
MiReturnMdlExcess