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