MiTransferPartitionPageRun

UINT64 __stdcall MiTransferPartitionPageRun(
        _MI_PARTITION *FromPartition,
        _MI_PARTITION *ToPartition,
        UINT64 BasePage,
        UINT64 NumberOfPages,
        UINT8 OldIrql){
  ULONG_PTR v5; 
  __int16 v8; 
  UINT64 v9; 
  unsigned __int16 v10; 
  int v11; 
  char *v12; 
  unsigned __int8 v13; 
  unsigned __int64 v14; 
  unsigned __int64 v15; 
  unsigned int v16; 
  _RTL_ATOM_TABLE *v17; 
  unsigned __int64 v18; 
  unsigned __int64 v19; 
  struct _KPRCB *CurrentPrcb; 
  __int64 v21; 
  bool v22; 
  signed __int32 v23; 
  _MMPFN *BaseResidentPage; 
  __int64 v25; 
  __int64 PfnPageSizeIndex; 
  __int64 v27; 
  UINT64 v29; 
  __int16 v30; 
  unsigned __int16 v31; 
  int v32; 
  v5 = BasePage;
  if( ToPartition == (_MI_PARTITION *)&MiSystemPartition )
    _InterlockedExchangeAdd64(&qword_140C4E390, -(__int64)NumberOfPages);
  v8 = *(_WORD *)FromPartition;
  v9 = 0i64;
  v10 = *(_WORD *)ToPartition;
  v11 = 0;
  v30 = *(_WORD *)FromPartition;
  v31 = *(_WORD *)ToPartition;
  v29 = BasePage + NumberOfPages;
  if( BasePage != BasePage + NumberOfPages )
  {
    while( 1 )
    {
      v32 = v11 + 1;
      if( (((_BYTE)v11 + 1) & 0xF) == 0 && (*((_DWORD *)FromPartition + 50) & 0x40000000) != 0 )
        break;
      if( KeShouldYieldProcessor() )
        break;
      v12 = (char *)MmGetPfnDb() + 48 * v5;
      v13 = MiLockPageInline((INT64)v12);
      v14 = *((_QWORD *)v12 + 5);
      v15 = v13;
      if( ((v14 >> 39) & 0x3FF) == v8 )
      {
        v16 = v12[34] & 7;
        if( v16 == 5 )
        {
          if( !MiIsPageOnBadList((INT64)v12) )
          {
            if( !MiInvalidPteConforms(*((_QWORD *)v12 + 2)) )
              goto LABEL_55;
            if( qword_140C4DC80 )
            {
              if( (v18 & 0x10) != 0 )
                v18 &= ~0x10ui64;
              else
                v18 &= ~qword_140C4DC80;
            }
            if( HIDWORD(v18) != 4294967294 )
              goto LABEL_55;
            _InterlockedAnd64((volatile signed __int64 *)v12 + 3, 0x7FFFFFFFFFFFFFFFui64);
            __writecr8(v15);
            MiDrainZeroLookasides(FromPartition, 0i64, 0i64, 0i64);
            goto LABEL_51;
          }
          MiUnlinkPageFromBadList(v17);
          MiAcquireNonPagedResources(ToPartition, 1ui64);
          MiReturnCommit(FromPartition, 1ui64);
          v19 = 1i64;
          if( FromPartition != (_MI_PARTITION *)&MiSystemPartition )
            goto LABEL_30;
          CurrentPrcb = KeGetCurrentPrcb();
          v21 = *((int *)CurrentPrcb + 8391);
          if( (_DWORD)v21 == -1 )
            goto LABEL_30;
          do
          {
            if( (unsigned __int64)(v21 + 1) > 0x100 )
              break;
            v23 = _InterlockedCompareExchange((volatile signed __int32 *)CurrentPrcb + 8391, v21 + 1, v21);
            v22 = (_DWORD)v21 == v23;
            v21 = v23;
            if( v22 )
              goto LABEL_31;
          }
          while( v23 != -1 );
          if( (int)v21 > 192
            && (_DWORD)v21 != -1
            && (_DWORD)v21 == _InterlockedCompareExchange((volatile signed __int32 *)CurrentPrcb + 8391, 192, v21) )
          {
            v19 = (int)v21 - 192 + 1i64;
          }
          if( v19 )
LABEL_30:
            _InterlockedExchangeAdd64((volatile signed __int64 *)FromPartition + 896, v19);
LABEL_31:
          *((_QWORD *)v12 + 5) ^= (*((_QWORD *)v12 + 5) ^ ((unsigned __int64)v10 << 39)) & 0x1FF8000000000i64;
          if( ToPartition != (_MI_PARTITION *)&MiSystemPartition )
          {
            ++*((_QWORD *)ToPartition + 866);
            *((_BYTE *)ToPartition + 12) = 1;
          }
          --*((_QWORD *)FromPartition + 866);
          *((_BYTE *)FromPartition + 12) = 1;
          MiInsertPageInList((_MMPFN *)v12, 0x20ui64);
          ++v9;
          _InterlockedAnd64((volatile signed __int64 *)v12 + 3, 0x7FFFFFFFFFFFFFFFui64);
          __writecr8(v15);
        }
        else if( (v14 & 0x1000000000i64) != 0 )
        {
          BaseResidentPage = MiGetBaseResidentPage((_MMPFN *)v12);
          v16 = *((_BYTE *)BaseResidentPage + 34) & 7;
          PfnPageSizeIndex = (unsigned int)MiGetPfnPageSizeIndex((INT64)BaseResidentPage);
          if( (char *)v25 != v12 )
            _InterlockedAnd64((volatile signed __int64 *)(v25 + 24), 0x7FFFFFFFFFFFFFFFui64);
          if( v16 > 1 )
          {
LABEL_55:
            MiUnlockPage((_MMPFN *)v12, v15);
            KeBugCheckEx(0x1Au, 0x41000ui64, v5, v16, 0i64);
          }
          _InterlockedAnd64((volatile signed __int64 *)v12 + 3, 0x7FFFFFFFFFFFFFFFui64);
          __writecr8(v15);
          v27 = MiLargePageSizes[PfnPageSizeIndex];
          if( ToPartition != (_MI_PARTITION *)&MiSystemPartition )
          {
            *((_QWORD *)ToPartition + 866) += v27;
            *((_BYTE *)ToPartition + 12) = 1;
          }
          if( (unsigned int)MiMoveLargeFreePage(v5, (unsigned int)PfnPageSizeIndex, FromPartition) == 1 )
          {
            v5 += v27;
            *((_BYTE *)FromPartition + 12) = 1;
            v9 += v27;
            *((_QWORD *)FromPartition + 866) -= v27;
          }
          else if( ToPartition != (_MI_PARTITION *)&MiSystemPartition )
          {
            *((_QWORD *)ToPartition + 866) -= v27;
            *((_BYTE *)ToPartition + 12) = 1;
          }
          v10 = v31;
LABEL_51:
          --v5;
        }
        else
        {
          if( v16 > 1 )
            goto LABEL_55;
          MiUnlinkFreeOrZeroedPage(v5, 0i64, 0i64);
          if( ToPartition != (_MI_PARTITION *)&MiSystemPartition )
          {
            ++*((_QWORD *)ToPartition + 866);
            *((_BYTE *)ToPartition + 12) = 1;
          }
          --*((_QWORD *)FromPartition + 866);
          *((_BYTE *)FromPartition + 12) = 1;
          if( (v12[35] & 0x40) != 0 )
            MiMoveBadPageCrossPartition((INT64)v12, (INT64)FromPartition, (UINT64 *)ToPartition);
          *((_QWORD *)v12 + 5) ^= (*((_QWORD *)v12 + 5) ^ ((unsigned __int64)v10 << 39)) & 0x1FF8000000000i64;
          MiInsertPageInFreeOrZeroedList(v5, (unsigned int)((*((_DWORD *)v12 + 4) & 0x3E0) != 0i64) + 1);
          _InterlockedAnd64((volatile signed __int64 *)v12 + 3, 0x7FFFFFFFFFFFFFFFui64);
          __writecr8(v15);
          ++v9;
        }
LABEL_52:
        v8 = v30;
        goto LABEL_53;
      }
      _InterlockedAnd64((volatile signed __int64 *)v12 + 3, 0x7FFFFFFFFFFFFFFFui64);
      __writecr8(v13);
LABEL_53:
      v11 = v32;
      if( ++v5 == v29 )
        return v9;
    }
    ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)FromPartition + 25);
    __writecr8(OldIrql);
    --v5;
    OldIrql = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)FromPartition + 50);
    goto LABEL_52;
  }
  return v9;
}

Referenced by:

MiActOnPartitionNodePages