コード例 #1
0
        private bool ProcessDetouringStatusReceived(string data, out string errorMessage)
        {
            if (!ProcessDetouringStatusReportLine.TryParse(
                    data,
                    out var processId,
                    out var reportStatus,
                    out var processName,
                    out var startApplicationName,
                    out var startCommandLine,
                    out var needsInjection,
                    out var isCurrent64BitProcess,
                    out var isCurrentWow64Process,
                    out var isProcessWow64,
                    out var needsRemoteInjection,
                    out var hJob,
                    out var disableDetours,
                    out var creationFlags,
                    out var detoured,
                    out var error,
                    out var createProcessStatusReturn,
                    out errorMessage))
            {
                return(false);
            }

            var detouringStatusData = new ProcessDetouringStatusData(
                processId,
                reportStatus,
                processName,
                startApplicationName,
                startCommandLine,
                needsInjection,
                isCurrent64BitProcess,
                isCurrentWow64Process,
                isProcessWow64,
                needsRemoteInjection,
                hJob,
                disableDetours,
                creationFlags,
                detoured,
                error,
                createProcessStatusReturn);

            // If there is a listener registered and not a process message and notifications allowed, notify over the interface.
            if (m_detoursEventListener != null && (m_detoursEventListener.GetMessageHandlingFlags() & MessageHandlingFlags.ProcessDetoursStatusNotify) != 0)
            {
                m_detoursEventListener.HandleProcessDetouringStatus(detouringStatusData);
            }

            // If there is a listener registered that disables the collection of data in the collections, just exit.
            if (m_detoursEventListener != null && (m_detoursEventListener.GetMessageHandlingFlags() & MessageHandlingFlags.ProcessDetoursStatusCollect) == 0)
            {
                return(true);
            }

            ProcessDetoursStatuses.Add(detouringStatusData);

            return(true);
        }
コード例 #2
0
        /// <summary>
        /// Deserialize result from reader
        /// </summary>
        public static IReadOnlyCollection <ProcessDetouringStatusData> Deserialize(BuildXLReader reader)
        {
            int processDetouringStatusStatusesCount = reader.ReadInt32Compact();
            var processDetouringStatuses            = new ProcessDetouringStatusData[processDetouringStatusStatusesCount];

            for (int i = 0; i < processDetouringStatusStatusesCount; i++)
            {
                processDetouringStatuses[i] = ReadReportedProcessDetouringStatusData(reader);
            }

            return(processDetouringStatuses);
        }
コード例 #3
0
        /// <summary>
        /// Deserializes an instance of <see cref="SandboxedProcessResult"/>.
        /// </summary>
        /// <param name="reader"></param>
        /// <returns></returns>
        public static SandboxedProcessResult Deserialize(BuildXLReader reader)
        {
            int  exitCode = reader.ReadInt32();
            bool killed   = reader.ReadBoolean();
            bool timedOut = reader.ReadBoolean();
            bool hasDetoursInjectionFailures = reader.ReadBoolean();

            IReadOnlyList <ReportedProcess> allReportedProcesses    = reader.ReadReadOnlyList(r => ReportedProcess.Deserialize(r));
            IReadOnlyList <ReportedProcess> survivingChildProcesses = reader.ReadNullable(r => r.ReadReadOnlyList(r2 => allReportedProcesses[r2.ReadInt32()]));
            ProcessTimes primaryProcessTimes = reader.ReadNullable(r => ProcessTimes.Deserialize(r));

            JobObject.AccountingInformation?           jobAccountingInformation       = reader.ReadNullableStruct(r => JobObject.AccountingInformation.Deserialize(r));
            SandboxedProcessOutput                     standardOutput                 = reader.ReadNullable(r => SandboxedProcessOutput.Deserialize(r));
            SandboxedProcessOutput                     standardError                  = reader.ReadNullable(r => SandboxedProcessOutput.Deserialize(r));
            IReadOnlyList <ReportedFileAccess>         fileAccesses                   = reader.ReadNullable(r => r.ReadReadOnlyList(r2 => ReportedFileAccess.Deserialize(r2, allReportedProcesses, readPath: null)));
            IReadOnlyList <ReportedFileAccess>         explicitlyReportedFileAccesses = reader.ReadNullable(r => r.ReadReadOnlyList(r2 => ReportedFileAccess.Deserialize(r2, allReportedProcesses, readPath: null)));
            IReadOnlyList <ReportedFileAccess>         allUnexpectedFileAccesses      = reader.ReadNullable(r => r.ReadReadOnlyList(r2 => ReportedFileAccess.Deserialize(r2, allReportedProcesses, readPath: null)));
            IReadOnlyList <ReportedProcess>            processes         = reader.ReadNullable(r => r.ReadReadOnlyList(r2 => allReportedProcesses[r2.ReadInt32()]));
            IReadOnlyList <ProcessDetouringStatusData> detouringStatuses = reader.ReadNullable(r => r.ReadReadOnlyList(r2 => ProcessDetouringStatusData.Deserialize(r2)));
            string dumpFileDirectory                   = reader.ReadNullableString();
            string dumpCreationExceptionMessage        = reader.ReadNullableString();
            string standardInputExceptionMessage       = reader.ReadNullableString();
            int    numberOfPRocessLaunchRetries        = reader.ReadInt32();
            bool   hasReadWriteToReadFileAccessRequest = reader.ReadBoolean();
            string messageProcessingFailureMessage     = reader.ReadNullableString();
            long   processStartTime             = reader.ReadInt64();
            int    warningCount                 = reader.ReadInt32();
            long   detoursMaxHeapSize           = reader.ReadInt64();
            int    lastMessageCount             = reader.ReadInt32();
            bool   messageCountSemaphoreCreated = reader.ReadBoolean();

            return(new SandboxedProcessResult()
            {
                ExitCode = exitCode,
                Killed = killed,
                TimedOut = timedOut,
                HasDetoursInjectionFailures = hasDetoursInjectionFailures,
                SurvivingChildProcesses = survivingChildProcesses,
                PrimaryProcessTimes = primaryProcessTimes,
                JobAccountingInformation = jobAccountingInformation,
                StandardOutput = standardOutput,
                StandardError = standardError,
                FileAccesses = fileAccesses != null ? new HashSet <ReportedFileAccess>(fileAccesses) : null,
                ExplicitlyReportedFileAccesses = explicitlyReportedFileAccesses != null ? new HashSet <ReportedFileAccess>(explicitlyReportedFileAccesses) : null,
                AllUnexpectedFileAccesses = allUnexpectedFileAccesses != null ? new HashSet <ReportedFileAccess>(allUnexpectedFileAccesses) : null,
                Processes = processes,
                DetouringStatuses = detouringStatuses,
                DumpFileDirectory = dumpFileDirectory,
                DumpCreationException = dumpCreationExceptionMessage != null ? new Exception(dumpCreationExceptionMessage) : null,
                StandardInputException = standardInputExceptionMessage != null ? new Exception(standardInputExceptionMessage) : null,
                NumberOfProcessLaunchRetries = numberOfPRocessLaunchRetries,
                HasReadWriteToReadFileAccessRequest = hasReadWriteToReadFileAccessRequest,
                MessageProcessingFailure = messageProcessingFailureMessage != null ? new Failure <string>(messageProcessingFailureMessage) : null,
                ProcessStartTime = processStartTime,
                WarningCount = warningCount,
                DetoursMaxHeapSize = detoursMaxHeapSize,
                LastMessageCount = lastMessageCount,
                MessageCountSemaphoreCreated = messageCountSemaphoreCreated
            });
        }
コード例 #4
0
 /// <summary>
 /// Called to handle detouring status message.
 /// </summary>
 public abstract void HandleProcessDetouringStatus(ProcessDetouringStatusData data);
コード例 #5
0
 private static void WriteReportedProcessDetouringStatus(BuildXLWriter writer, ProcessDetouringStatusData detouringData)
 {
     writer.Write(detouringData.ProcessId);
     writer.Write(detouringData.ReportStatus);
     writer.Write(detouringData.ProcessName);
     writer.Write(detouringData.StartApplicationName);
     writer.Write(detouringData.StartCommandLine);
     writer.Write(detouringData.NeedsInjection);
     writer.Write(detouringData.Job);
     writer.Write(detouringData.DisableDetours);
     writer.Write(detouringData.CreationFlags);
     writer.Write(detouringData.Detoured);
     writer.Write(detouringData.Error);
     writer.Write(detouringData.CreateProcessStatusReturn);
 }