PfTCleanupBuffers

VOID __stdcall PfTCleanupBuffers(_PFP_BUFFER_MANAGER *BufferMgr){
  _PFP_BUFFER_MANAGER *v2; 
  _QWORD *v3; 
  __int64 v4; 
  _QWORD *v5; 
  void *v6; 

  v2 = BufferMgr + 1;
  while( 1 )
  {
    v3 = *(_QWORD **)&v2->_bf_0;
    if( *(_PFP_BUFFER_MANAGER **)&v2->_bf_0 == v2 )
      break;
    if( (_PFP_BUFFER_MANAGER *)v3[1] != v2 || (v4 = *v3, *(_QWORD **)(*v3 + 8i64) != v3) )
      __fastfail(3u);
    *(_QWORD *)&v2->_bf_0 = v4;
    *(_QWORD *)(v4 + 8) = v2;
    ExFreePoolWithTag(v3, 0);
  }
  v5 = *(_QWORD **)BufferMgr->ActiveBufferListHead;
  if( v5 )
  {
    *(_QWORD *)BufferMgr->ActiveBufferListHead = *v5;
    do
    {
      v6 = v5;
      v5 = *(_QWORD **)BufferMgr->ActiveBufferListHead;
      if( v5 )
        *(_QWORD *)BufferMgr->ActiveBufferListHead = *v5;
      ExFreePoolWithTag(v6, 0);
    }
    while( v5 );
  }
  BufferMgr->FreeBufferCount = 0;
}

Referenced by:

PfTCleanup