MiExtendPagingFiles

VOID __stdcall MiExtendPagingFiles(_MMPAGE_FILE_EXPANSION *PageExpand){
  _MI_PARTITION *Partition; 
  unsigned __int64 RequestedExpansionSize; 
  __int64 PageFileNumber; 
  unsigned int NumberOfPagingFiles; 
  _MMPAGING_FILE *v6; 
  UINT64 v7; 
  unsigned __int64 v8; 
  _BOOL4 v9; 
  volatile unsigned __int64 TotalCommittedPages; 
  unsigned __int64 TotalCommitLimit; 
  unsigned __int64 v12; 
  unsigned __int64 v13; 
  _MMPAGING_FILE **PagingFile; 
  __int64 v15; 
  unsigned int v16; 
  UINT64 *v17; 
  __int64 v18; 

  Partition = PageExpand->Partition;
  RequestedExpansionSize = PageExpand->RequestedExpansionSize;
  PageFileNumber = PageExpand->u1.Flags.PageFileNumber;
  NumberOfPagingFiles = Partition->Vp.NumberOfPagingFiles;
  if( !NumberOfPagingFiles )
    return;
  if( (unsigned int)PageFileNumber < NumberOfPagingFiles )
  {
    _mm_lfence();
    v6 = Partition->Vp.PagingFile[PageFileNumber];
    if( v6->MaximumSize - v6->Size < RequestedExpansionSize )
      return;
    LODWORD(v7) = MiAttemptPageFileExtension(
                    (_MMPAGING_FILE *)PageExpand,
                    (UINT64)Partition->Vp.PagingFile[PageFileNumber]);
    v8 = v7;
    if( v7 && (PageExpand->u1.Flags._bf_3 & 2) != 0 )
      MiUpdatePagingFileMinimum(v6, v7);
    v9 = (v6->_bf_cc & 0x50) == 0;
    goto LABEL_24;
  }
  v9 = 1;
  if( (PageExpand->u1.Flags._bf_3 & 1) == 0 )
  {
    TotalCommittedPages = Partition->Vp.TotalCommittedPages;
    TotalCommitLimit = Partition->Vp.TotalCommitLimit;
    v12 = RequestedExpansionSize + TotalCommittedPages + Partition->Commit.SystemCommitReserve;
    if( v12 < TotalCommittedPages )
      return;
    if( v12 <= TotalCommitLimit )
    {
      PageExpand->ActualExpansion = 1i64;
      return;
    }
    RequestedExpansionSize = v12 - TotalCommitLimit;
  }
  v13 = 0i64;
  PagingFile = Partition->Vp.PagingFile;
  v15 = Partition->Vp.NumberOfPagingFiles;
  do
  {
    if( ((*PagingFile)->_bf_cc & 0x50) == 0 )
      v13 += (*PagingFile)->MaximumSize - (*PagingFile)->Size;
    ++PagingFile;
    --v15;
  }
  while( v15 );
  if( v13 >= RequestedExpansionSize )
  {
    v8 = 0i64;
    v16 = 0;
    v17 = (UINT64 *)Partition->Vp.PagingFile;
    do
    {
      if( (*(_BYTE *)(*v17 + 204) & 0x50) == 0 )
      {
        LODWORD(v18) = MiAttemptPageFileExtension((_MMPAGING_FILE *)PageExpand, *v17);
        v8 += v18;
        if( v8 >= RequestedExpansionSize )
          break;
      }
      ++v16;
      ++v17;
    }
    while( v16 < NumberOfPagingFiles );
LABEL_24:
    if( v8 )
    {
      PageExpand->ActualExpansion = v8;
      if( v9 )
        MiIncreaseCommitLimits(Partition, v8, 0i64, 0i64, 0i64);
    }
  }
}

Referenced by:

MiProcessDereferenceList