MiContractPagingFiles

VOID __stdcall MiContractPagingFiles(_MI_PARTITION *Partition){
  volatile unsigned int NumberOfPagingFiles; 
  volatile unsigned int v3; 
  _MMPAGING_FILE **PagingFile; 
  _MMPAGING_FILE *v5; 
  unsigned __int64 v6; 

  if( MiOkToShrinkPageFiles(Partition->Vp.TotalCommittedPages, Partition->Vp.TotalCommitLimit) )
  {
    NumberOfPagingFiles = Partition->Vp.NumberOfPagingFiles;
    v3 = 0;
    if( NumberOfPagingFiles )
    {
      PagingFile = Partition->Vp.PagingFile;
      do
      {
        v5 = *PagingFile;
        if( ((*PagingFile)->_bf_cc & 0x50) == 0 && v5->Size != v5->MinimumSize && v5->FreeSpace > 0x4000 )
          break;
        ++v3;
        ++PagingFile;
      }
      while( v3 < NumberOfPagingFiles );
    }
    if( v3 != NumberOfPagingFiles )
    {
      v6 = (unsigned __int8)ExAcquireSpinLockExclusive((INT64 *)&Partition->Segments.SegmentListLock);
      if( Partition->Modwriter.PageFileContract.RequestedExpansionSize == -1i64 )
      {
        ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)&Partition->Segments.SegmentListLock);
        __writecr8(v6);
      }
      else
      {
        Partition->Modwriter.PageFileContract.Segment = 0i64;
        Partition->Modwriter.PageFileContract.u1.Flags._bf_3 |= 0x10u;
        Partition->Modwriter.PageFileContract.Partition = Partition;
        Partition->Modwriter.PageFileContract.RequestedExpansionSize = -1i64;
        MiQueuePageFileExtension(&Partition->Modwriter.PageFileContract, 0i64);
      }
    }
  }
}

Referenced by:

MmDeleteProcessAddressSpace