/// <summary> /// Start trace collection. /// </summary> /// <param name="processId">Runtime process to trace</param> /// <param name="configuration">buffer size and provider configuration</param> /// <param name="sessionId">session id</param> /// <returns>Stream</returns> public static Stream CollectTracing(int processId, SessionConfiguration configuration, out ulong sessionId) { sessionId = 0; var message = new IpcMessage(DiagnosticsServerCommandSet.EventPipe, (byte)EventPipeCommandId.CollectTracing, configuration.Serialize()); var stream = IpcClient.SendMessage(processId, message, out var response); switch ((DiagnosticsServerCommandId)response.Header.CommandId) { case DiagnosticsServerCommandId.OK: sessionId = BitConverter.ToUInt64(response.Payload); break; case DiagnosticsServerCommandId.Error: // bad... var hr = BitConverter.ToInt32(response.Payload); throw new Exception($"Session start FAILED 0x{hr:X8}"); default: break; } return(stream); }