Exemplo n.º 1
0
        /// <summary>
        /// Mocks <see cref="IRestartManagerService.GetProcesses(int, out int, ref int, RM_PROCESS_INFO[], out RebootReason)"/>.
        /// </summary>
        /// <param name="sessionId">Optional session ID to use. The default is 0.</param>
        /// <param name="processes">Optional array of <see cref="RM_PROCESS_INFO"/>. The default is <see cref="DefaultProcesses"/>.</param>
        /// <param name="rebootReason">Optional <see cref="RebootReason"/>. The default is <see cref="RebootReason.None"/>.</param>
        /// <param name="error">Optional error code to return for the first call. The default is 0 (no error).</param>
        /// <returns>The current instance for fluent calls.</returns>
        public MockRestartManagerService GetProcesses(int sessionId = DefaultSessionId, RM_PROCESS_INFO[] processes = null, RebootReason rebootReason = RebootReason.None, int error = NativeMethods.ERROR_SUCCESS)
        {
            processes = processes ?? DefaultProcesses;

            var processesLengthRequired = processes.Length;
            var processesLength         = 0;

            var sequence = new MockSequence();

            Mock.Setup(x => x.GetProcesses(sessionId, out processesLengthRequired, ref processesLength, null, out rebootReason))
            .Returns(error == NativeMethods.ERROR_SUCCESS ? NativeMethods.ERROR_MORE_DATA : error)
            .Verifiable();

            if (error == NativeMethods.ERROR_SUCCESS)
            {
                processesLength = processesLengthRequired;
                Mock.Setup(x => x.GetProcesses(sessionId, out processesLengthRequired, ref processesLength, It.IsAny <RM_PROCESS_INFO[]>(), out rebootReason))
                .OutCallback((int sessionId_, out int processesLengthRequired_, ref int processesLengt_, RM_PROCESS_INFO[] processes_, out RebootReason rebootReason_) =>
                {
                    processesLengthRequired_ = processesLengthRequired;
                    rebootReason_            = rebootReason;

                    processes.CopyTo(processes_, 0);
                })
                .Returns(NativeMethods.ERROR_SUCCESS)
                .Verifiable();
            }

            return(this);
        }
Exemplo n.º 2
0
        public ProcessInfo[] GetList(out RebootReason reason)
        {
            UInt32 needed = 10;
            UInt32 size   = needed;

            ProcessInfo.Native[] narr;
            for (; ;)
            {
                size = needed;
                narr = new ProcessInfo.Native[size];
                var result = RmGetList(handle, ref needed, ref size, narr, out reason);
                if (result == Result.MoreData)
                {
                    continue;
                }
                CheckResult(result);
                break;
            }

            ProcessInfo[] marr = new ProcessInfo[needed];
            for (var i = 0; i < needed; ++i)
            {
                marr[i] = narr[i].AsNative();
            }
            return(marr);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ProcessInfo"/> class.
        /// </summary>
        /// <param name="process">The <see cref="RM_PROCESS_INFO"/> to adapt.</param>
        /// <param name="reason">The <see cref="RebootReason"/> of why the computer must be restarted.</param>
        internal ProcessInfo(RM_PROCESS_INFO process, RebootReason reason)
        {
            var fileTime = ((long)process.Process.ProcessStartTime.dwHighDateTime << 32) + process.Process.ProcessStartTime.dwLowDateTime;

            Id                = process.Process.dwProcessId;
            StartTime         = DateTimeOffset.FromFileTime(fileTime);
            Description       = process.strAppName;
            ServiceName       = process.strServiceShortName;
            ApplicationType   = process.ApplicationType;
            ApplicationStatus = process.AppStatus;
            IsRestartable     = process.bRestartable;
            RebootReason      = reason;
        }
 /// <inheritdoc/>
 public int GetProcesses(int sessionId, out int processesLengthRequired, ref int processesLength, RM_PROCESS_INFO[] processes, out RebootReason rebootReason) =>
 NativeMethods.RmGetList(sessionId, out processesLengthRequired, ref processesLength, processes, out rebootReason);
Exemplo n.º 5
0
 /// <summary>
 /// Gets a collection of default <see cref="IProcessInfo"/>.
 /// </summary>
 /// <param name="rebootReason">The <see cref="RebootReason"/> for each <see cref="IProcessInfo"/>.</param>
 /// <returns>A collection of default <see cref="IProcessInfo"/> from <see cref="DefaultProcesses"/>.</returns>
 public static IEnumerable <IProcessInfo> GetDefaultProcessesInfo(RebootReason rebootReason = RebootReason.None) =>
 DefaultProcesses.Select(process => new ProcessInfo(process, rebootReason));
Exemplo n.º 6
0
 int IRestartManagerService.GetProcesses(int sessionId, out int processesLengthRequired, ref int processesLength, RM_PROCESS_INFO[] processes, out RebootReason rebootReason)
 {
     return(Object.GetProcesses(sessionId, out processesLengthRequired, ref processesLength, processes, out rebootReason));
 }
Exemplo n.º 7
0
 private static extern Result RmGetList(UIntPtr handle,
                                        ref UInt32 nProcInfoNeeded, ref UInt32 nProcInfo,
                                        [In, Out][MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPStruct)] ProcessInfo.Native[] affectedApps,
                                        out RebootReason reason
                                        );
Exemplo n.º 8
0
 internal static extern int RmGetList(
     [MarshalAs(UnmanagedType.U4)] int dwSessionHandle,
     [MarshalAs(UnmanagedType.U4)] out int pnProcInfoNeeded,
     [MarshalAs(UnmanagedType.U4)] ref int pnProcInfo,
     [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2), Out] RM_PROCESS_INFO[] rgAffectedApps,
     [MarshalAs(UnmanagedType.U4)] out RebootReason lpdwRebootReasons);