EtwpSendBufferToDebugger

VOID __stdcall EtwpSendBufferToDebugger(_WMI_BUFFER_HEADER *Buffer){
  unsigned int v2; 
  __int128 v3; 
  unsigned int v4; 
  __int128 v5; 
  unsigned int v6; 
  __int128 v7; 
  __int128 v8; 
  int v9; 
  int NextEventOffsetType; 
  _KD_TRACE_DATA_DESCRIPTOR TraceData[2]; 
  unsigned int v12; 
  __int64 v13; 
  int v14; 
  __int128 v15[3]; 
  __int128 v16; 
  __int64 v17; 
  UINT64 EventSize; 

  LODWORD(EventSize) = 0;
  v2 = *((_DWORD *)Buffer + 12);
  if( v2 > KdTransportMaxPacketSize - 64 )
  {
    v3 = *(_OWORD *)Buffer;
    v4 = 72;
    v5 = *((_OWORD *)Buffer + 1);
    v6 = KdTransportMaxPacketSize - 136;
    *(_QWORD *)TraceData = v15;
    v15[0] = v3;
    v7 = *((_OWORD *)Buffer + 2);
    v12 = 72;
    v15[1] = v5;
    v8 = *((_OWORD *)Buffer + 3);
    v15[2] = v7;
    v17 = *((_QWORD *)Buffer + 8);
    v16 = v8;
    do
    {
      v13 = (__int64)Buffer + v4;
      NextEventOffsetType = EtwpGetNextEventOffsetType(Buffer, v4, &EventSize);
      if( !NextEventOffsetType )
        break;
      while( v9 + (int)EventSize <= v6 )
      {
        v4 += EventSize;
        NextEventOffsetType = EtwpGetNextEventOffsetType(Buffer, v4, &EventSize);
        if( !NextEventOffsetType )
          goto LABEL_10;
      }
      if( (unsigned int)EventSize > v6 )
        v4 += EventSize;
LABEL_10:
      if( v9 )
      {
        v14 = v9;
        LODWORD(v16) = v9 + 72;
        LODWORD(v15[0]) = v9 + 72;
        KdSendTraceData(TraceData, 2ui64);
      }
    }
    while( NextEventOffsetType );
  }
  else
  {
    v12 = v2;
    *(_QWORD *)TraceData = Buffer;
    KdSendTraceData(TraceData, 1ui64);
  }
}

Referenced by:

EtwpSendDbgId