MiObtainFreePages
VOID __stdcall MiObtainFreePages(_MI_PARTITION *Partition){
char *WorkingSetControl;
_EPARTITION *PartitionObject;
INT64 v4;
INT64 v5;
unsigned __int64 TotalPagesForPagingFile;
INT64 v7;
WorkingSetControl = (char *)Partition->WorkingSetControl;
if( WorkingSetControl && WorkingSetControl[52] != 1 )
{
PartitionObject = Partition->Core.PartitionObject;
if( PsReferencePartitionSafe((INT64)PartitionObject) )
{
CcNotifyWriteBehindEx((_ETHREAD *)1, (INT64)PartitionObject);
PsDereferencePartition((INT64)PartitionObject);
}
TotalPagesForPagingFile = Partition->Vp.TotalPagesForPagingFile;
if( Partition->Vp.ModifiedPageListHead.Total - TotalPagesForPagingFile >= 0x10 )
{
KeSetEvent((PRKEVENT)Partition->Modwriter.gap160, 0, 0);
TotalPagesForPagingFile = Partition->Vp.TotalPagesForPagingFile;
}
if( TotalPagesForPagingFile >= 0x10 )
MiWakeModifiedPageWriter(Partition, 0xFFFFFFFFFFFFFFFFui64, v4, v5, v7);
if( WorkingSetControl[98] )
KeSetEvent((PRKEVENT)(WorkingSetControl + 96), 0, 0);
}
}Referenced by:
MiDecreaseAvailablePages
MiUnlinkFreeOrZeroedPage
MiUnlinkPageFromList
MiWaitForFreePage