PfpCopyEvent

INT64 __fastcall PfpCopyEvent(INT64 *Src){
  unsigned __int64 v1; 
  int v2; 
  __int64 v4; 
  unsigned __int8 v5; 
  __int64 v6; 
  __int64 v7; 
  INT64 v8; 
  INT64 v9; 
  INT64 *v10; 
  unsigned __int64 v11; 
  __int64 v13; 
  __int64 v14; 
  _EPROCESS *v15; 
  unsigned __int64 v16; 
  INT64 a5; 
  _BYTE a3[16]; 
  INT64 a2; 
  _EPROCESS *Process; 
  v1 = *Src;
  v2 = *Src;
  Process = 0i64;
  LODWORD(a2) = 0;
  if( (v2 & 0x1F000) != 40960i64 )
  {
    v13 = (v1 >> 2) & 0x3FF;
    v14 = PfTAcquireLogEntry((__int64)&qword_140C4F918, &a2, (v1 >> 2) & 0x3FF);
    if( !v14 )
      return 3221225626i64;
    memmove(
      (UINT8 *)(((v14 + 31) & 0xFFFFFFFFFFFFFFF8ui64) + 16i64 * (unsigned int)a2),
      (UINT8 *)Src,
      (unsigned int)(16 * v13));
    return 0i64;
  }
  v4 = Src[4];
  v5 = v4;
  *(_OWORD *)a3 = 0i64;
  if( (v4 & 0x7FFFFFFFFFFFFFFFui64) >= 0xFF )
    v5 = -1;
  v6 = 2i64;
  if( v4 >= 0 )
    v6 = 4098i64;
  v7 = (_DWORD)Src[6] & 0xFF000000;
  LODWORD(a5) = 1;
  *(_DWORD *)&a3[8] = v5 | (*((_DWORD *)Src + 12) << 8);
  v8 = Src[5];
  v9 = Src[3] << 12;
  *(_QWORD *)a3 = v6 & 0xFFFFFFFF00FFFFFFui64 | v7;
  a2 = v9 | 1;
  v10 = PfpLogPageAccess(v8, &a2, a3, (INT64)(Src + 3), a5);
  if( !v10 )
    return 3221225864i64;
  v11 = ((qword_140C4F958 + 47) & 0xFFFFFFFFFFFFFFF8ui64)
      + 40i64 * (*((unsigned __int16 *)v10 + 5) - (unsigned int)*(unsigned __int16 *)(qword_140C4F958 + 36));
  if( (*(_BYTE *)(v11 + 8) & 4) == 0
    || PsLookupProcessByProcessId((HANDLE)*((unsigned int *)Src + 13), (PEPROCESS *)&Process) < 0 )
  {
    return 0i64;
  }
  v15 = Process;
  if( ((*((_QWORD *)Process + 136) ^ *((_QWORD *)Process + 141)) & 0x1FFFFFFFFFFFFFFFi64) == Src[5]
    && PfpIsProcessInfoPresent((__int64)Process) )
  {
    v16 = *(_QWORD *)(v11 + 8) & 0xFFFFFFFFFFFFFFF8ui64 | 1;
    *(_QWORD *)(v11 + 8) = v16;
    *(_QWORD *)(v11 + 8) = v16 & 7 | (8i64 * (*((_QWORD *)v15 + 136) ^ *((_QWORD *)v15 + 141)));
    *(_DWORD *)(v11 + 28) = *((_DWORD *)v15 + 381);
    *(_DWORD *)(v11 + 24) = *((_DWORD *)v15 + 272);
    *(_QWORD *)(v11 + 16) = v15;
  }
  ObfDereferenceObjectWithTag(v15, 0x746C6644ui64);
  return 0i64;
}

Referenced by:

PfpFlushBuffers
PfpFlushEventBuffers