示例#1
0
        ProcessData GetProcessData(TraceEvent obj)
        {
            ProcessData process = null;

            ProcessDataMap.TryGetValue(obj.ProcessID, out process);
            return(process);
        }
示例#2
0
 private void ETWCollector_ProcessEvent(ProcessData obj)
 {
     Application.Current.Dispatcher.Invoke((Action)(() =>
     {
         lock (GroupLock)
         {
             Group.Add(obj);
         }
     }));
 }
示例#3
0
        private void Kernel_ProcessStop(Microsoft.Diagnostics.Tracing.Parsers.Kernel.ProcessTraceData obj)
        {
            ProcessData ev = null;

            if (ProcessDataMap.TryGetValue(obj.ProcessID, out ev))
            {
                ev.Finish = obj.TimeStamp;
                ev.Result = obj.ExitStatus;
                ProcessDataMap.Remove(obj.ProcessID);
            }
        }
示例#4
0
        ThreadData GetThreadData(TraceEvent obj)
        {
            ThreadData  thread  = null;
            ProcessData process = GetProcessData(obj);

            if (process != null)
            {
                process.Threads.TryGetValue(obj.ThreadID, out thread);
            }
            return(thread);
        }
示例#5
0
        private void Kernel_ThreadStart(Microsoft.Diagnostics.Tracing.Parsers.Kernel.ThreadTraceData obj)
        {
            ProcessData process = GetProcessData(obj);

            if (process != null)
            {
                process.Threads[obj.ThreadID] = new ThreadData()
                {
                    ThreadID = obj.ThreadID,
                    Start    = obj.TimeStamp,
                };
            }
        }
示例#6
0
        private void Kernel_ImageLoad(Microsoft.Diagnostics.Tracing.Parsers.Kernel.ImageLoadTraceData obj)
        {
            ProcessData process = GetProcessData(obj);

            if (process != null)
            {
                process.Images.Add(new ImageData()
                {
                    FileName      = obj.FileName,
                    DefaultBase   = obj.DefaultBase,
                    ImageBase     = obj.ImageBase,
                    ImageChecksum = obj.ImageChecksum,
                    ImageSize     = obj.ImageSize
                });
            }
        }
示例#7
0
        private static void CollectArtifacts(ProcessData ev)
        {
            for (int start = ev.CommandLine.IndexOf('@'); start != -1; start = ev.CommandLine.IndexOf('@', start + 1))
            {
                int    finish = Math.Max(ev.CommandLine.IndexOf(' ', start), ev.CommandLine.Length);
                String path   = ev.CommandLine.Substring(start + 1, finish - start - 1);
                path = path.Trim(CharacterToTrim);

                try
                {
                    String text = File.ReadAllText(path);
                    ev.AddArtifact(path, text);
                }
                catch (FileNotFoundException) { }
            }
        }
示例#8
0
        private void Kernel_ProcessStart(Microsoft.Diagnostics.Tracing.Parsers.Kernel.ProcessTraceData obj)
        {
            if (Filters.Contains(obj.ImageFileName))
            {
                ProcessData ev = new ProcessData()
                {
                    Name        = obj.ImageFileName,
                    CommandLine = obj.CommandLine,
                    Start       = obj.TimeStamp,
                    ProcessID   = obj.ProcessID,
                    UniqueKey   = obj.UniqueProcessKey,
                };

                ProcessDataMap.Add(obj.ProcessID, ev);

                ProcessEvent?.Invoke(ev);

                Task.Run(() => CollectArtifacts(ev));
            }
        }
示例#9
0
 public void Add(ProcessData process)
 {
     Processes.Add(process);
 }