PfFbBufferListAllocateTemporary

INT64 __fastcall PfFbBufferListAllocateTemporary(INT64 a1, INT64 a2){
  unsigned int v2; 
  INT64 result; 
  struct SLIST_ENTRY *PoolWithTag; 
  INT64 v6; 
  v2 = a2;
  if( (int)a2 + _InterlockedExchangeAdd((volatile signed __int32 *)(a1 + 104), a2) > *(_DWORD *)(a1 + 84) )
  {
    result = 3221225773i64;
LABEL_3:
    _InterlockedExchangeAdd((volatile signed __int32 *)(a1 + 104), -v2);
    return result;
  }
  PoolWithTag = (struct SLIST_ENTRY *)ExAllocatePoolWithTag(
                                        (_POOL_TYPE)*(_DWORD *)(a1 + 72),
                                        (int)a2,
                                        *(unsigned int *)(a1 + 68));
  if( !PoolWithTag )
  {
    result = 3221225626i64;
    goto LABEL_3;
  }
  LODWORD(v6) = 0;
  PfFbBufferListInsertInFree((SLIST_ENTRY *)a1, PoolWithTag, v2, 1i64, v6);
  return 0i64;
}

Referenced by:

PfpEventHandleOutOfBuffers
PfpSectInfoHandleOutOfBuffers