PfpCopyEvent

NTSTATUS __fastcall PfpCopyEvent(VOID *Src){
  unsigned __int64 v1; 
  int v2; 
  __int64 v4; 
  unsigned __int8 v5; 
  __int64 v6; 
  __int64 v7; 
  __int64 v8; 
  __int64 v9; 
  unsigned __int64 *v10; 
  unsigned __int64 v11; 
  __int64 v13; 
  __int64 v14; 
  _EPROCESS *v15; 
  unsigned __int64 v16; 
  __int128 v17; 
  __int64 v18; 
  _EPROCESS *Process; 

  v1 = *(_QWORD *)Src;
  v2 = *(_QWORD *)Src;
  Process = 0i64;
  LODWORD(v18) = 0;
  if( (v2 & 0x1F000) != 40960i64 )
  {
    v13 = (v1 >> 2) & 0x3FF;
    v14 = PfTAcquireLogEntry((_PFP_BUFFER_MANAGER *)&stru_140C4DB30 + 319, &v18, (v1 >> 2) & 0x3FF);
    if( !v14 )
      return -1073741670;
    memmove((VOID *)(((v14 + 31) & 0xFFFFFFFFFFFFFFF8ui64) + 16i64 * (unsigned int)v18), Src, 16 * v13);
    return 0;
  }
  v4 = *((_QWORD *)Src + 4);
  v5 = v4;
  v17 = 0i64;
  if( (v4 & 0x7FFFFFFFFFFFFFFFui64) >= 0xFF )
    v5 = -1;
  v6 = 2i64;
  if( v4 >= 0 )
    v6 = 4098i64;
  v7 = *((_DWORD *)Src + 12) & 0xFF000000;
  DWORD2(v17) = v5 | (*((_DWORD *)Src + 12) << 8);
  v8 = *((_QWORD *)Src + 5);
  v9 = *((_QWORD *)Src + 3) << 12;
  *(_QWORD *)&v17 = v6 & 0xFFFFFFFF00FFFFFFui64 | v7;
  v18 = v9 | 1;
  v10 = PfpLogPageAccess(v8, &v18, &v17, (__int64)Src + 24, 1);
  if( !v10 )
    return -1073741432;
  v11 = ((*(&stru_140C4DB30 + 965) + 47i64) & 0xFFFFFFFFFFFFFFF8ui64)
      + 40i64 * (*((unsigned __int16 *)v10 + 5) - (unsigned int)*(unsigned __int16 *)(*(&stru_140C4DB30 + 965) + 36i64));
  if( (*(_BYTE *)(v11 + 8) & 4) == 0 || PsLookupProcessByProcessId((VOID *)*((unsigned int *)Src + 13), &Process) < 0 )
    return 0;
  v15 = Process;
  if( (((__int64)Process->UniqueProcessId ^ Process->CreateTime.QuadPart) & 0x1FFFFFFFFFFFFFFFi64) == *((_QWORD *)Src + 5) )
  {
    if( (unsigned int)PfpIsProcessInfoPresent(Process) )
    {
      v16 = *(_QWORD *)(v11 + 8) & 0xFFFFFFFFFFFFFFF8ui64 | 1;
      *(_QWORD *)(v11 + 8) = v16;
      *(_QWORD *)(v11 + 8) = v16 & 7 | (8 * ((__int64)v15->UniqueProcessId ^ v15->CreateTime.QuadPart));
      *(_DWORD *)(v11 + 28) = v15->ImagePathHash;
      *(_DWORD *)(v11 + 24) = v15->UniqueProcessId;
      *(_QWORD *)(v11 + 16) = v15;
    }
  }
  ObfDereferenceObjectWithTag(v15, 0x746C6644ui64);
  return 0;
}

Referenced by:

PfpFlushBuffers
PfpFlushEventBuffers