PfFbBufferListCleanup

VOID __stdcall PfFbBufferListCleanup(_PFFB_BUFFER_LIST *BufferList){
  _SLIST_HEADER *i; 
  UINT32 v3; 
  PSLIST_ENTRY v4; 
  UINT32 v5; 
  PSLIST_ENTRY v6; 
  PSLIST_ENTRY v7; 

  for( i = (_SLIST_HEADER *)(BufferList + 8); ; i = (_SLIST_HEADER *)(BufferList + 8) )
  {
    v4 = RtlpInterlockedPopEntrySList(i);
    if( !v4 )
      break;
    if( (*((_DWORD *)&v4[2].Next + 3) & 1) != 0 )
    {
      v3 = BufferList[17];
      BufferList[26] += (_DWORD)v4 - LODWORD(v4[2].Next);
      ExFreePoolWithTag(v4, v3);
    }
  }
  while( 1 )
  {
    v6 = RtlpInterlockedPopEntrySList((PSLIST_HEADER)BufferList + 1);
    if( !v6 )
      break;
    if( (*((_DWORD *)&v6[2].Next + 3) & 1) != 0 )
    {
      v5 = BufferList[17];
      BufferList[26] += (_DWORD)v6 - LODWORD(v6[2].Next);
      ExFreePoolWithTag(v6, v5);
    }
  }
  while( 1 )
  {
    v7 = RtlpInterlockedPopEntrySList((PSLIST_HEADER)BufferList + 3);
    if( !v7 )
      break;
    BufferList[26] -= *((_DWORD *)&v7[1].Next + 2);
    ExFreePoolWithTag(v7, BufferList[17]);
  }
}

Referenced by:

PfTCleanup