/// <summary> /// Prepares a pip to be serialized. /// </summary> /// <param name="pip"></param> /// <param name="pathTable"></param> /// <param name="stringTable"></param> /// <param name="symbolTable"></param> /// <param name="pipGraph"></param> /// <returns>Serialized Pip object.</returns> public static SerializedPip CreateObjectForSerialization(Pip pip, PathTable pathTable, StringTable stringTable, SymbolTable symbolTable, PipGraph pipGraph) { SerializedPip serializedPip = new SerializedPip { PipMetaData = CreatePipMetadata(pip, pathTable, stringTable, pipGraph, symbolTable) }; switch (pip.PipType) { case PipType.CopyFile: serializedPip.CopyFileSpecificDetails = CreateCopyFileSpecificDetails((CopyFile)pip, pathTable); break; case PipType.Process: serializedPip.ProcessSpecificDetails = CreateProcessSpecificDetails((Process)pip, pathTable, stringTable); break; case PipType.Ipc: serializedPip.IpcSpecificDetails = CreateIpcSpecificDetails((IpcPip)pip, pathTable, stringTable); break; case PipType.Value: serializedPip.ValueSpecificDetails = CreateValueSpecificDetails((ValuePip)pip, pathTable, symbolTable); break; case PipType.SpecFile: serializedPip.SpecFileSpecificDetails = CreateSpecFileSpecificDetails((SpecFilePip)pip, pathTable); break; case PipType.Module: serializedPip.ModuleSpecificDetails = CreateModuleSpecificDetails((ModulePip)pip, pathTable, stringTable); break; case PipType.HashSourceFile: serializedPip.HashSourceFileSpecificDetails = CreateHashSourceFileSpecificDetails((HashSourceFile)pip, pathTable); break; case PipType.SealDirectory: serializedPip.SealDirectorySpecificDetails = CreateSealDirectorySpecificDetails((SealDirectory)pip, pathTable); break; case PipType.WriteFile: serializedPip.WriteFileSpecificDetails = CreateWriteFileSpecificDetails((WriteFile)pip, pathTable); break; default: Contract.Assert(false, $"Specified pip type '{pip.PipType}' does not match any known pip types."); break; } return(serializedPip); }
/// <summary> /// Prepares a pip to be serialized. /// </summary> /// <param name="pip"></param> /// <param name="dynamicData"></param> /// <param name="pathTable"></param> /// <param name="stringTable"></param> /// <param name="symbolTable"></param> /// <param name="pipGraph"></param> /// <returns>Serialized Pip object.</returns> public static SerializedPip CreateObjectForSerialization(Pip pip, ProcessExecutionMonitoringReportedEventData?dynamicData, PathTable pathTable, StringTable stringTable, SymbolTable symbolTable, PipGraph pipGraph) { SerializedPip serializedPip = new SerializedPip { PipMetaData = CreatePipMetadata(pip, pathTable, stringTable, pipGraph, symbolTable) }; switch (pip.PipType) { case PipType.CopyFile: serializedPip.CopyFileSpecificDetails = CreateCopyFileSpecificDetails((CopyFile)pip, pathTable); break; case PipType.Process: serializedPip.ProcessSpecificDetails = CreateProcessSpecificDetails((Process)pip, pathTable, stringTable, pipGraph); break; case PipType.Ipc: serializedPip.IpcSpecificDetails = CreateIpcSpecificDetails((IpcPip)pip, pathTable, stringTable); break; case PipType.Value: serializedPip.ValueSpecificDetails = CreateValueSpecificDetails((ValuePip)pip, pathTable, symbolTable); break; case PipType.SpecFile: serializedPip.SpecFileSpecificDetails = CreateSpecFileSpecificDetails((SpecFilePip)pip, pathTable); break; case PipType.Module: serializedPip.ModuleSpecificDetails = CreateModuleSpecificDetails((ModulePip)pip, pathTable, stringTable); break; case PipType.HashSourceFile: serializedPip.HashSourceFileSpecificDetails = CreateHashSourceFileSpecificDetails((HashSourceFile)pip, pathTable); break; case PipType.SealDirectory: serializedPip.SealDirectorySpecificDetails = CreateSealDirectorySpecificDetails((SealDirectory)pip, pathTable); break; case PipType.WriteFile: serializedPip.WriteFileSpecificDetails = CreateWriteFileSpecificDetails((WriteFile)pip, pathTable); break; default: Contract.Assert(false, $"Specified pip type '{pip.PipType}' does not match any known pip types."); break; } if (dynamicData.HasValue) { if (dynamicData.Value.ReportedProcesses != null && dynamicData.Value.ReportedProcesses.Count > 0) { serializedPip.ReportedProcesses = new List <ReportedProcessData>(); foreach (var reportedProcess in dynamicData.Value.ReportedProcesses) { serializedPip.ReportedProcesses.Add(CreateReportedProcessData(reportedProcess)); } } if (dynamicData.Value.ReportedFileAccesses != null && dynamicData.Value.ReportedFileAccesses.Count > 0) { serializedPip.ReportedFileAccesses = new List <ReportedFileAccessData>(); foreach (var reportedFileAccess in dynamicData.Value.ReportedFileAccesses) { serializedPip.ReportedFileAccesses.Add(CreateReportedFileAccessData(reportedFileAccess, pathTable)); } } } return(serializedPip); }