KdSendTraceData

VOID __fastcall KdSendTraceData(INT64 a1, UINT64 a2){
  __int64 v2; 
  unsigned int v4; 
  _DWORD *v5; 
  __int64 v6; 
  UINT8 v7; 
  CHAR(__fastcall *v8)(INT64, UINT64); 
  UINT8 **v9; 
  __int64 v10; 
  __int128 v11; 
  __int128 v12; 
  int result; 
  __int16 result_4; 
  __int16 result_6; 
  unsigned int v16; 
  v2 = (unsigned int)a2;
  v11 = 0i64;
  v12 = 0i64;
  memset((INT64)&result, 0i64);
  v4 = 0;
  if( (_DWORD)v2 )
  {
    v5 = (_DWORD *)(a1 + 8);
    v6 = (unsigned int)v2;
    do
    {
      v4 += *v5;
      v5 += 4;
      --v6;
    }
    while( v6 );
  }
  if( v4 <= KdTransportMaxPacketSize - 64 )
  {
    v7 = KdEnterDebugger(0i64, 0i64);
    v8 = KdpMessageBuffer;
    if( (_DWORD)v2 )
    {
      v9 = (UINT8 **)(a1 + 8);
      do
      {
        memmove((UINT8 *)v8, *(v9 - 1), *(unsigned int *)v9);
        v10 = *(unsigned int *)v9;
        v9 += 2;
        v8 = (CHAR(__fastcall *)(INT64, UINT64))((char *)v8 + v10);
        --v2;
      }
      while( v2 );
    }
    result_4 = KeProcessorLevel;
    result = 13104;
    result_6 = *((_DWORD *)KeGetPcr() + 105);
    *((_QWORD *)&v12 + 1) = &result;
    v16 = v4;
    LOWORD(v12) = 64;
    LOWORD(v11) = v4;
    *((_QWORD *)&v11 + 1) = KdpMessageBuffer;
    KdSendPacket(9i64, &v12, &v11, &KdpContext);
    KdExitDebugger(v7);
  }
}

Referenced by:

EtwpSendBufferToDebugger
EtwpSendTraceEvent