/// <inheritdoc /> public bool NotifyPipStarted(FileAccessManifest fam, SandboxedProcessMac process) { Contract.Requires(process.Started); Contract.Requires(fam.PipId != 0); if (!m_pipProcesses.TryAdd(fam.PipId, process)) { throw new BuildXLException($"Process with PidId {fam.PipId} already exists"); } var setup = new FileAccessSetup() { DllNameX64 = string.Empty, DllNameX86 = string.Empty, ReportPath = process.ExecutableAbsolutePath, // piggybacking on ReportPath to pass full executable path }; using (var wrapper = Pools.MemoryStreamPool.GetInstance()) { var debugFlags = true; ArraySegment <byte> manifestBytes = fam.GetPayloadBytes( setup, wrapper.Instance, timeoutMins: 10, // don't care because on Mac we don't kill the process from the Kext once it times out debugFlagsMatch: ref debugFlags); Contract.Assert(manifestBytes.Offset == 0); var result = Sandbox.SendPipStarted( processId: process.ProcessId, pipId: fam.PipId, famBytes: manifestBytes.Array, famBytesLength: manifestBytes.Count, type: Sandbox.ConnectionType.Kext, info: ref m_kextConnectionInfo); return(result); } }