MiReturnPhysicalPoolPages

VOID __stdcall MiReturnPhysicalPoolPages(_MMPFN *PfnList){
  char v1; 
  _MMPFN *PfnDb; 
  _MMPFN *v3; 
  $559D8309DABD45803AD694472C7FC28A *v4; 
  __int64 v5; 
  char v6; 
  __int64 v7; 
  __int64 v8; 
  INT64 v9; 
  UINT64 v10; 
  unsigned __int64 v11; 
  _MMPFN *v12; 
  unsigned __int64 v13; 
  _QWORD *v14; 
  $559D8309DABD45803AD694472C7FC28A *v15; 
  $559D8309DABD45803AD694472C7FC28A *v16; 
  _MMPFN *bf_0; 
  _KLOCK_QUEUE_HANDLE LockHandle; 
  UINT64 v19[2]; 
  __int128 v20; 
  __int128 v21; 
  int v22; 
  int v23; 
  unsigned int v24; 
  _MMPFN *v25; 

  PfnDb = MmGetPfnDb();
  v3 = PfnList;
  v25 = 0i64;
  v4 = 0i64;
  v5 = 0i64;
  v6 = v1;
  memset(&LockHandle, 0, sizeof(LockHandle));
  *(_OWORD *)v19 = 0i64;
  v20 = 0i64;
  v21 = 0i64;
  LODWORD(v7) = MiSearchNumaNodeTable((PVOID)(PfnList - PfnDb));
  v24 = *(_DWORD *)(v7 + 8);
  v23 = v6 & 1;
  v22 = v6 & 2;
  do
  {
    bf_0 = (_MMPFN *)v3->u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0;
    v16 = v4;
    v15 = v4;
    v8 = v3 - PfnDb;
    v11 = MiLockPageInline(v3);
    if( !v22 )
    {
      v13 = v3->u2._bf_0 & 0xC000000000000001ui64;
      v3->u3.ReferenceCount = 1;
      v3->u2._bf_0 = v13 | 1;
    }
    if( !v23 && (*((_BYTE *)&v3->u3 + 3) & 0x10) != 0 )
    {
      ++v5;
      v4 = ($559D8309DABD45803AD694472C7FC28A *)v3;
      v12 = v3;
      *((_BYTE *)&v3->u3 + 2) = *(_BYTE *)(&v3->u3 + 1) & 0xF8 | 5;
      v3->u2._bf_0 &= 0xC000000000000000ui64;
      v3->u3.ReferenceCount = 0;
      if( v15 )
        v4 = v16;
      v3->PteLong = -8i64;
      v3->u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0 = (__int64)v25;
      v25 = v3;
    }
    else
    {
      v3->u3.ReferenceCount = 0;
      v3->u2._bf_0 &= 0xC000000000000000ui64;
      MiInsertPageInFreeOrZeroedList(v8, 2ui64, v9, v10, (UINT64)v4, (UINT64)v4);
      v12 = v25;
      ++v19[0];
      ++*((_QWORD *)&v20 + 1);
    }
    _InterlockedAnd64(&v3->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
    __writecr8(v11);
    PfnDb = MmGetPfnDb();
    v3 = bf_0;
  }
  while( bf_0 );
  if( v5 )
  {
    v14 = (_QWORD *)(*(&stru_140C4DB30 + 22) + 176i64 * v24);
    KeAcquireInStackQueuedSpinLock(v14 + 18, &LockHandle);
    v4->_bf_0 = v14[19];
    v14[17] += v5;
    v14[19] = v12;
    KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
    __writecr8(LockHandle.OldIrql);
  }
  MiReturnPoolCharges(v19, (unsigned int)(2 * v23));
}

Referenced by:

MiAddExpansionNonPagedPool
MiClearNonPagedPtes
MiGetPoolPages
MiReturnExcessPoolCommit