MiReturnPhysicalPoolPages

VOID __stdcall MiReturnPhysicalPoolPages(_MMPFN *PfnList){
  char v1; 
  _MMPFN *PfnDb; 
  _MMPFN *v3; 
  _MMPFN *v4; 
  __int64 v5; 
  char v6; 
  __int64 v7; 
  __int64 v8; 
  unsigned __int64 v9; 
  _MMPFN *v10; 
  unsigned __int64 v11; 
  _QWORD *v12; 
  _MMPFN *v13; 
  _MMPFN *v14; 
  _MMPFN *v15; 
  struct _KLOCK_QUEUE_HANDLE LockHandle; 
  UINT64 v17[2]; 
  __int128 v18; 
  __int128 v19; 
  int v20; 
  int v21; 
  unsigned int v22; 
  _MMPFN *v23; 
  PfnDb = MmGetPfnDb();
  v3 = PfnList;
  v23 = 0i64;
  v4 = 0i64;
  v5 = 0i64;
  v6 = v1;
  memset(&LockHandle, 0, sizeof(LockHandle));
  *(_OWORD *)v17 = 0i64;
  v18 = 0i64;
  v19 = 0i64;
  LODWORD(v7) = MiSearchNumaNodeTable((PVOID)((PfnList - PfnDb) / 48));
  v22 = *(_DWORD *)(v7 + 8);
  v21 = v6 & 1;
  v20 = v6 & 2;
  do
  {
    v15 = *(_MMPFN **)v3;
    v14 = v4;
    v13 = v4;
    v8 = (v3 - PfnDb) / 48;
    v9 = (unsigned __int8)MiLockPageInline((INT64)v3);
    if( !v20 )
    {
      v11 = *((_QWORD *)v3 + 3) & 0xC000000000000001ui64;
      *((_WORD *)v3 + 16) = 1;
      *((_QWORD *)v3 + 3) = v11 | 1;
    }
    if( !v21 && (*((_BYTE *)v3 + 35) & 0x10) != 0 )
    {
      ++v5;
      v4 = v3;
      v10 = v3;
      *((_BYTE *)v3 + 34) = *((_BYTE *)v3 + 34) & 0xF8 | 5;
      *((_QWORD *)v3 + 3) &= 0xC000000000000000ui64;
      *((_WORD *)v3 + 16) = 0;
      if( v13 )
        v4 = v14;
      *((_QWORD *)v3 + 1) = -8i64;
      *(_QWORD *)v3 = v23;
      v23 = v3;
    }
    else
    {
      *((_WORD *)v3 + 16) = 0;
      *((_QWORD *)v3 + 3) &= 0xC000000000000000ui64;
      MiInsertPageInFreeOrZeroedList(v8, 2ui64);
      v10 = v23;
      ++v17[0];
      ++*((_QWORD *)&v18 + 1);
    }
    _InterlockedAnd64((volatile signed __int64 *)v3 + 3, 0x7FFFFFFFFFFFFFFFui64);
    __writecr8(v9);
    PfnDb = MmGetPfnDb();
    v3 = v15;
  }
  while( v15 );
  if( v5 )
  {
    v12 = (_QWORD *)((char *)SListHead + 176 * v22);
    KeAcquireInStackQueuedSpinLock(v12 + 18, &LockHandle);
    *(_QWORD *)v4 = v12[19];
    v12[17] += v5;
    v12[19] = v10;
    KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
    __writecr8(LockHandle.OldIrql);
  }
  MiReturnPoolCharges(v17, (unsigned int)(2 * v21));
}

Referenced by:

MiAddExpansionNonPagedPool
MiClearNonPagedPtes
MiGetPoolPages
MiReturnExcessPoolCommit