private Dictionary <ReportedProcess, int> CreateAndSerializeProcessMap(BuildXLWriter writer) { var processMap = new Dictionary <ReportedProcess, int>(); PopulateProcesses(Processes); PopulateProcesses(SurvivingChildProcesses); PopulateProcesses(FileAccesses?.Select(f => f.Process)); PopulateProcesses(ExplicitlyReportedFileAccesses?.Select(f => f.Process)); PopulateProcesses(AllUnexpectedFileAccesses?.Select(f => f.Process)); ReportedProcess[] processes = new ReportedProcess[processMap.Count]; foreach (var process in processMap) { processes[process.Value] = process.Key; } writer.WriteReadOnlyList(processes, (w, v) => v.Serialize(w)); return(processMap); void PopulateProcesses(IEnumerable <ReportedProcess> processesToPopulate) { if (processesToPopulate != null) { foreach (var process in processesToPopulate) { if (!processMap.ContainsKey(process)) { processMap.Add(process, processMap.Count); } } } } }
public static extern SafeFileHandle CreateFile( string lpFileName, FileAccesses dwDesiredAccess, FileShares dwShareMode, IntPtr lpSecurityAttributes, CreationDispositions dwCreationDisposition, FileOperateAttributes dwFlagsAndAttributes, IntPtr hTemplateFile);