EtwpWriteBufferCompressed

INT64 __fastcall EtwpWriteBufferCompressed(INT64 a1, UINT8 *a2){
  __int64 v2; 
  int v3; 
  unsigned int v4; 
  __int64 v7; 
  int v8; 
  UINT8 *v9; 
  int v10; 
  unsigned int v11; 
  int v12; 
  unsigned int v13; 
  unsigned int v14; 
  __int64 v15; 
  __int64 v16; 
  int v17; 
  ULONG v18; 
  ULONG Length; 
  NTSTATUS v20; 
  int v21; 
  int v22; 
  int v23; 
  int v24; 
  __int64 v25; 
  int v26; 
  int v27; 
  unsigned int v28; 
  int v29; 
  int v30; 
  UINT8 *v31; 
  PIO_STATUS_BLOCK IoStatusBlock; 
  UINT64 UncompressedChunkSize; 
  struct _IO_STATUS_BLOCK v35; 
  UINT64 v36; 
  v2 = *(unsigned int *)(a1 + 52);
  v3 = 0;
  v4 = *(_DWORD *)(a1 + 16);
  v7 = *(_QWORD *)(a1 + 40) + 72i64;
  v8 = *(_DWORD *)(a1 + 48) - v2;
  LODWORD(v36) = 0;
  v9 = (UINT8 *)(v2 + v7);
  v10 = *((_DWORD *)a2 + 12);
  v11 = v8 - 72;
  v35 = 0i64;
  if( v11 >= v4 )
    v11 = v4;
  LODWORD(UncompressedChunkSize) = 0;
  LODWORD(IoStatusBlock) = v11;
  v12 = RtlCompressBuffer(
          3u,
          a2 + 72,
          (unsigned int)(v10 - 72),
          v9,
          (UINT64)IoStatusBlock,
          UncompressedChunkSize,
          &v36,
          *(VOID **)(a1 + 32));
  v13 = v12;
  if( v12 == -1073741789 )
  {
    v14 = *((_DWORD *)a2 + 12);
    memmove((UINT8 *)(*(_QWORD *)(a1 + 40) + *(unsigned int *)(a1 + 52)), a2, v14);
  }
  else
  {
    if( v12 < 0 )
    {
      ++*(_DWORD *)(a1 + 24);
      return v13;
    }
    *((_WORD *)a2 + 26) |= 0x40u;
    v15 = *(unsigned int *)(a1 + 52);
    v16 = *(_QWORD *)(a1 + 40);
    *(_OWORD *)(v15 + v16) = *(_OWORD *)a2;
    *(_OWORD *)(v15 + v16 + 16) = *((_OWORD *)a2 + 1);
    *(_OWORD *)(v15 + v16 + 32) = *((_OWORD *)a2 + 2);
    *(_OWORD *)(v15 + v16 + 48) = *((_OWORD *)a2 + 3);
    *(_QWORD *)(v15 + v16 + 64) = *((_QWORD *)a2 + 8);
    v14 = v36 + 72;
  }
  *(_DWORD *)(*(unsigned int *)(a1 + 52) + *(_QWORD *)(a1 + 40)) = v14;
  v17 = *(_DWORD *)(a1 + 52);
  ++*(_DWORD *)(a1 + 56);
  v18 = v14 + v17;
  Length = *(_DWORD *)(a1 + 16);
  *(_DWORD *)(a1 + 52) = v18;
  if( v18 >= Length )
  {
    v20 = ZwWriteFile(
            *(HANDLE *)a1,
            0i64,
            0i64,
            0i64,
            &v35,
            *(PVOID *)(a1 + 40),
            Length,
            (PLARGE_INTEGER)(a1 + 8),
            0i64);
    v21 = *(_DWORD *)(a1 + 56);
    v13 = v20;
    if( v20 < 0 )
    {
      v22 = *(_DWORD *)(a1 + 24) + v21;
      v23 = *(_DWORD *)(a1 + 60);
      *(_DWORD *)(a1 + 52) = v23;
      LOBYTE(v3) = v23 != 0;
      v24 = v22 - 1;
      if( !v23 )
        v24 = v22;
      *(_DWORD *)(a1 + 24) = v24;
      goto LABEL_16;
    }
    v25 = *(unsigned int *)(a1 + 16);
    v26 = *(_DWORD *)(a1 + 52);
    v27 = *(_DWORD *)(a1 + 20);
    *(_QWORD *)(a1 + 8) += v25;
    v28 = v26 - v25;
    *(_DWORD *)(a1 + 52) = v28;
    *(_DWORD *)(a1 + 60) = v28;
    v29 = v21 + v27;
    if( !v28 )
    {
      *(_DWORD *)(a1 + 20) = v29;
LABEL_16:
      *(_DWORD *)(a1 + 56) = v3;
      return v13;
    }
    v30 = v29 - 1;
    v31 = *(UINT8 **)(a1 + 40);
    *(_DWORD *)(a1 + 20) = v30;
    *(_DWORD *)(a1 + 56) = 1;
    memmove(v31, &v31[v25], v28);
  }
  return v13;
}

Referenced by:

EtwpSavePersistedLogger