PfFbBufferListCleanup

PSLIST_ENTRY __fastcall PfFbBufferListCleanup(INT64 a1){
  union _SLIST_HEADER *i; 
  ULONG v3; 
  PSLIST_ENTRY v4; 
  ULONG v5; 
  PSLIST_ENTRY v6; 
  PSLIST_ENTRY result; 
  for( i = (union _SLIST_HEADER *)(a1 + 32); ; i = (union _SLIST_HEADER *)(a1 + 32) )
  {
    v4 = RtlpInterlockedPopEntrySList(i);
    if( !v4 )
      break;
    if( (*((_DWORD *)&v4[2].Next + 3) & 1) != 0 )
    {
      v3 = *(_DWORD *)(a1 + 68);
      *(_DWORD *)(a1 + 104) += (_DWORD)v4 - LODWORD(v4[2].Next);
      ExFreePoolWithTag(v4, v3);
    }
  }
  while( 1 )
  {
    v6 = RtlpInterlockedPopEntrySList((PSLIST_HEADER)(a1 + 16));
    if( !v6 )
      break;
    if( (*((_DWORD *)&v6[2].Next + 3) & 1) != 0 )
    {
      v5 = *(_DWORD *)(a1 + 68);
      *(_DWORD *)(a1 + 104) += (_DWORD)v6 - LODWORD(v6[2].Next);
      ExFreePoolWithTag(v6, v5);
    }
  }
  while( 1 )
  {
    result = RtlpInterlockedPopEntrySList((PSLIST_HEADER)(a1 + 48));
    if( !result )
      break;
    *(_DWORD *)(a1 + 104) -= *((_DWORD *)&result[1].Next + 2);
    ExFreePoolWithTag(result, *(_DWORD *)(a1 + 68));
  }
  return result;
}

Referenced by:

PfTCleanup