コード例 #1
0
        public void TraceNewProcess(IEnumerable <string> procargs, bool spawnNewConsoleWindow, TraceOptions traceOptions)
        {
            using (var process = new ProcessCreator(procargs)
            {
                SpawnNewConsoleWindow = spawnNewConsoleWindow
            }) {
                process.StartSuspended();

                using (var kernelTraceCollector = new TraceCollector(KernelTraceEventParser.KernelSessionName))
                    using (var customTraceCollector = new TraceCollector(WinTraceUserTraceSessionName)) {
                        InitializeProcessHandlers(kernelTraceCollector, customTraceCollector,
                                                  process.ProcessId, traceOptions);

                        ThreadPool.QueueUserWorkItem((o) => {
                            process.Join();
                            StopCollectors(kernelTraceCollector, customTraceCollector);
                            stopEvent.Set();
                        });

                        stopTraceCollectors = () => { StopCollectors(kernelTraceCollector, customTraceCollector); };

                        ThreadPool.QueueUserWorkItem((o) => { kernelTraceCollector.Start(); });
                        ThreadPool.QueueUserWorkItem((o) => { customTraceCollector.Start(); });

                        Thread.Sleep(1000);

                        // resume thread
                        process.Resume();

                        stopEvent.WaitOne();
                    }
            }
        }