PfFbBufferListInsertInFree
VOID __fastcall PfFbBufferListInsertInFree(SLIST_ENTRY *RunRef, struct SLIST_ENTRY *P, INT64 a3, INT64 a4, INT64 a5){
__int64 v7;
char *v8;
if( (a4 & 1) != 0 && LOWORD(RunRef[1].Next) + (unsigned int)LOWORD(RunRef[2].Next) >= (int)KeNumberProcessors_0 + 1 )
{
_InterlockedExchangeAdd((volatile signed __int32 *)&RunRef[6].Next + 2, -(int)a3);
ExFreePoolWithTag(P, HIDWORD(RunRef[4].Next));
}
else
{
P[1].Next = RunRef;
P[2].Next = (struct SLIST_ENTRY *)((char *)P + (int)a3);
v7 = *((unsigned int *)&RunRef[4].Next + 3);
*((_DWORD *)&P[2].Next + 2) = 0;
v8 = (char *)P + v7;
*((_QWORD *)&P[1].Next + 1) = v8;
*((_DWORD *)&P[2].Next + 3) = a4;
memset((INT64)v8, 0i64);
RtlpInterlockedPushEntrySList((PSLIST_HEADER)&RunRef[1], P);
}
if( (_DWORD)a5 )
ExReleaseRundownProtection((PEX_RUNDOWN_REF)RunRef);
}Referenced by:
PfFbBufferListAllocate
PfFbBufferListAllocateTemporary
PfFbBufferListFlushStandby
PfTCleanup
PfTFullEventListAdd
PfpFlushEventBuffers
PfpRepurposeNameLoggingTrace