EtwpInitializeCompression

NTSTATUS __fastcall EtwpInitializeCompression(__int64 a1){
  NTSTATUS result; 
  NTSTATUS v3; 
  VOID *v4; 
  unsigned int v5; 
  _DWORD *PoolWithTag; 
  SIZE_T NumberOfBytes; 
  ULONG v8; 
  *(_DWORD *)(a1 + 1156) = 5;
  LODWORD(NumberOfBytes) = 0;
  v8 = 0;
  *(_DWORD *)(a1 + 1160) = 3;
  *(_QWORD *)(a1 + 1104) = EtwpCompressionProc;
  *(_QWORD *)(a1 + 1112) = a1;
  *(_QWORD *)(a1 + 1088) = 0i64;
  result = RtlGetCompressionWorkSpaceSize(3u, (PULONG)&NumberOfBytes, &v8);
  v3 = result;
  if( result >= 0 )
  {
    if( !(_DWORD)NumberOfBytes
      || (v4 = ExAllocatePoolWithTag(NonPagedPoolNx, (unsigned int)NumberOfBytes, 0x5A777445ui64),
          (*(_QWORD *)(a1 + 1144) = v4) != 0i64) )
    {
      *(_QWORD *)(a1 + 1128) = 0i64;
      *(_QWORD *)(a1 + 1200) = EtwpCompressionDpc;
      *(_DWORD *)(a1 + 1176) = 275;
      v5 = 0;
      *(_QWORD *)(a1 + 1208) = a1;
      *(_QWORD *)(a1 + 1232) = 0i64;
      *(_QWORD *)(a1 + 1192) = 0i64;
      *(_QWORD *)(a1 + 1168) = 0i64;
      if( *(_DWORD *)(a1 + 1156) )
      {
        while( 1 )
        {
          PoolWithTag = ExAllocatePoolWithTag((_POOL_TYPE)*(_DWORD *)(a1 + 316), 0x48ui64, 0x42777445ui64);
          if( !PoolWithTag )
            break;
          PoolWithTag[11] = 6;
          ++v5;
          *((_QWORD *)PoolWithTag + 4) = *(_QWORD *)(a1 + 1168);
          *(_QWORD *)(a1 + 1168) = PoolWithTag + 8;
          if( v5 >= *(_DWORD *)(a1 + 1156) )
            goto LABEL_8;
        }
        v3 = -1073741801;
        EtwpFreePlaceholderList(a1);
      }
      else
      {
LABEL_8:
        _InterlockedExchange((volatile __int32 *)(a1 + 1152), 1);
      }
      return v3;
    }
    else
    {
      return -1073741801;
    }
  }
  return result;
}

Referenced by:

EtwpInitLoggerContext