PfTFreeBufferList
VOID __stdcall PfTFreeBufferList(_PFP_BUFFER_MANAGER *BufferMgr){
__int32 bf_0;
_PFP_BUFFER_MANAGER *v2;
_PFP_BUFFER_MANAGER **v3;
unsigned __int32 v5;
_PFP_BUFFER_MANAGER **v6;
_PFP_BUFFER_MANAGER **v7;
bf_0 = BufferMgr->_bf_0;
v2 = BufferMgr + 1;
v3 = *(_PFP_BUFFER_MANAGER ***)&BufferMgr[1].FreeBufferThreshold;
v5 = (unsigned __int32)BufferMgr->_bf_0 >> 4;
v6 = *(_PFP_BUFFER_MANAGER ***)&BufferMgr[1]._bf_0;
if( v6 != v3 )
{
do
{
if( *v3 != v2 || (v7 = (_PFP_BUFFER_MANAGER **)v3[1], *v7 != (_PFP_BUFFER_MANAGER *)v3) )
__fastfail(3u);
*(_QWORD *)&v2->FreeBufferThreshold = v7;
*v7 = v2;
if( (BufferMgr->_bf_0 & 0xF) != 0 )
{
memset(v3, 0i64, v5);
v3[1] = (_PFP_BUFFER_MANAGER *)v3;
*v3 = (_PFP_BUFFER_MANAGER *)v3;
*((_DWORD *)v3 + 8) = 2048;
}
else
{
PfTLbInitialize(v3, v5, 1);
}
*v3 = *(_PFP_BUFFER_MANAGER **)BufferMgr->ActiveBufferListHead;
++BufferMgr->FreeBufferCount;
*(_QWORD *)BufferMgr->ActiveBufferListHead = v3;
v6 = *(_PFP_BUFFER_MANAGER ***)&v2->_bf_0;
v3 = *(_PFP_BUFFER_MANAGER ***)&v2->FreeBufferThreshold;
}
while( *(_PFP_BUFFER_MANAGER ***)&v2->_bf_0 != v3 );
bf_0 = BufferMgr->_bf_0;
}
if( (bf_0 & 0xF) == 0 )
PfTLbInitialize(v6, v5, 1);
}Referenced by:
PfTCreateTraceDump