private void ContinouslyPostAccessReports(SandboxedProcessMacKext process, CancellationToken token, List <ReportInstruction> instructions = null)
        {
            Analysis.IgnoreResult(
                Task.Run(async() =>
            {
                int count = 0;

                while (true)
                {
                    if (token.IsCancellationRequested)
                    {
                        break;
                    }

                    if (instructions != null && count < instructions.Count)
                    {
                        PostAccessReport(instructions[count].Process, instructions[count].Operation,
                                         instructions[count].Stats, instructions[count].Pid,
                                         instructions[count].Path, instructions[count].Allowed);

                        // Advance the minimum enqueue time
                        s_connection.MinReportQueueEnqueueTime = instructions[count].Stats.EnqueueTime;

                        count++;
                    }

                    await Task.Delay(100);
                }
            }, token)
                , justification: "Fire and forget"
                );
        }
        private SandboxedProcessMacKext CreateAndStartSandboxedProcess(SandboxedProcessInfo info, bool?measureTime = null)
        {
            var process = new SandboxedProcessMacKext(info, overrideMeasureTime: measureTime);

            process.Start();
            return(process);
        }
        private static Sandbox.AccessReport PostAccessReport(SandboxedProcessMacKext proc, FileOperation operation, Sandbox.AccessReportStatistics stats,
                                                             int pid = 1234, string path = "/dummy/path", bool allowed = true)
        {
            var report = new Sandbox.AccessReport
            {
                Operation  = operation,
                Statistics = stats,
                Pid        = pid,
                Path       = path,
                Status     = allowed ? (uint)FileAccessStatus.Allowed : (uint)FileAccessStatus.Denied
            };

            proc.PostAccessReport(report);
            return(report);
        }
 public bool NotifyKextProcessFinished(long pipId, SandboxedProcessMacKext process)
 {
     return(true);
 }
 public bool NotifyKextPipStarted(FileAccessManifest fam, SandboxedProcessMacKext process)
 {
     return(true);
 }