MiMoveBadPageCrossPartition

NTSTATUS __stdcall MiMoveBadPageCrossPartition(INT64 a1, INT64 a2, UINT64 *a3){
  __int64 v5; 
  __int64 v6; 
  __int64 v7; 
  __int64 v8; 
  UINT64 v9; 
  unsigned __int64 v10; 
  _MI_PARTITION *v11; 
  struct _KPRCB *CurrentPrcb; 
  __int64 CachedResidentAvailable; 
  bool v14; 
  _KLOCK_QUEUE_HANDLE LockQueue[2]; 

  *(_QWORD *)&LockQueue[0].OldIrql = 0i64;
  LODWORD(v5) = MiSearchNumaNodeTable((PVOID)((a1 - (__int64)MmGetPfnDb()) / 48));
  v6 = *(_QWORD *)(a2 + 16);
  v7 = *(unsigned int *)(v5 + 8);
  LockQueue[0].LockQueue.Next = 0i64;
  v8 = 4544 * v7;
  LockQueue[0].LockQueue.Lock = (unsigned __int64 *volatile)(4544 * v7 + v6 + 4328);
  KxAcquireQueuedSpinLock(&LockQueue[0].LockQueue, LockQueue[0].LockQueue.Lock);
  --*(_QWORD *)(v8 + v6 + 4352);
  KeReleaseInStackQueuedSpinLockFromDpcLevel(LockQueue);
  v9 = a3[2];
  LockQueue[0].LockQueue.Next = 0i64;
  LockQueue[0].LockQueue.Lock = (unsigned __int64 *volatile)(v8 + v9 + 4328);
  KxAcquireQueuedSpinLock(&LockQueue[0].LockQueue, LockQueue[0].LockQueue.Lock);
  v10 = 1i64;
  ++*(_QWORD *)(v8 + v9 + 4352);
  KeReleaseInStackQueuedSpinLockFromDpcLevel(LockQueue);
  MiAcquireNonPagedResources((_MI_PARTITION *)a3, 1ui64);
  MiReturnCommit((_MI_PARTITION *)a2, 1ui64);
  v11 = &Irp;
  if( (_MI_PARTITION *)a2 != &Irp )
    goto LABEL_12;
  CurrentPrcb = KeGetCurrentPrcb();
  CachedResidentAvailable = (int)CurrentPrcb->CachedResidentAvailable;
  if( (_DWORD)CachedResidentAvailable == -1 )
    goto LABEL_12;
  if( (unsigned __int64)(CachedResidentAvailable + 1) > 0x100 )
  {
LABEL_7:
    if( (int)CachedResidentAvailable > 192 && (_DWORD)CachedResidentAvailable != -1 )
    {
      LODWORD(v11) = _InterlockedCompareExchange(
                       (volatile signed __int32 *)&CurrentPrcb->CachedResidentAvailable,
                       192,
                       CachedResidentAvailable);
      if( (_DWORD)CachedResidentAvailable == (_DWORD)v11 )
      {
        LODWORD(v11) = CachedResidentAvailable - 192;
        v10 = (int)CachedResidentAvailable - 192 + 1i64;
      }
    }
    if( !v10 )
      return(int)v11;
LABEL_12:
    _InterlockedExchangeAdd64((volatile signed __int64 *)(a2 + 7168), v10);
    return(int)v11;
  }
  while( 1 )
  {
    LODWORD(v11) = _InterlockedCompareExchange(
                     (volatile signed __int32 *)&CurrentPrcb->CachedResidentAvailable,
                     CachedResidentAvailable + 1,
                     CachedResidentAvailable);
    v14 = (_DWORD)CachedResidentAvailable == (_DWORD)v11;
    CachedResidentAvailable = (int)v11;
    if( v14 )
      return(int)v11;
    if( (_DWORD)v11 != -1 )
    {
      LODWORD(v11) = (_DWORD)v11 + 1;
      if( (unsigned __int64)(CachedResidentAvailable + 1) <= 0x100 )
        continue;
    }
    goto LABEL_7;
  }
}

Referenced by:

MiActOnPartitionNodePages
MiMoveLargeFreePage
MiTransferPartitionPageRun