internal static ProcessData Create(Process process)
        {
            if (process == null)
            {
                return(null);
            }

            return(new ProcessData {
                HasExited = process.HasExited,
                PriorityBoostEnabled = process.PriorityBoostEnabled,
                Responding = process.Responding,
                Handle = process.Handle,
                HandleCount = process.HandleCount,
                MainWindowHandle = process.MainWindowHandle,
                MainWindowTitle = process.MainWindowTitle,
                SynchronizingObjectType = (process.SynchronizingObject == null) ? null : process.SynchronizingObject.GetType(),
                ExitTime = process.ExitTime,
                StartTime = process.StartTime,
                BasePriority = process.BasePriority,
                ExitCode = process.ExitCode,
                Id = process.Id,
                SessionId = process.SessionId,
                ProcessorUsage = ProcessorUsageData.Create(process),
                MemoryUsage = MemoryUsageData.Create(process),
                MachineName = process.MachineName,
                ProcessName = process.ProcessName,
            });
        }
        internal static ProcessorUsageData Create(Process process)
        {
            ProcessorUsageData result = new ProcessorUsageData {
                ProcessorAffinity       = process.ProcessorAffinity.ToInt64(),
                PrivilegedProcessorTime = process.PrivilegedProcessorTime,
                TotalProcessorTime      = process.TotalProcessorTime,
                UserProcessorTime       = process.UserProcessorTime,
            };

            return(result);
        }