public IEnumerable <ILockingProcessInfo> GetProcesses()
        {
            if (_registered)
            {
                var num        = 0;
                var pnProcInfo = 0;
                RestartMgr.RmProcessInfo[] array = null;
                do
                {
                    num = RestartMgr.RmGetList(_sessionId, out var pnProcInfoNeeded, ref pnProcInfo, array, out var _);
                    switch (num)
                    {
                    case 234:
                        pnProcInfo = pnProcInfoNeeded;
                        array      = new RestartMgr.RmProcessInfo[pnProcInfo];
                        continue;

                    default:
                        ThrowOnError(num);
                        continue;

                    case 0:
                        break;
                    }
                    break;
                }while (num == 234);
                if (array != null && array.Length != 0)
                {
                    return(array.Select(process => new LockingProcessInfo(process)).ToArray());
                }
            }

            return(Enumerable.Empty <ILockingProcessInfo>());
        }
예제 #2
0
        internal LockingProcessInfo(RestartMgr.RmProcessInfo process)
        {
            var fileTime = ((long)process.Process.ProcessStartTime.dwHighDateTime << 32) + (long)process.Process.ProcessStartTime.dwLowDateTime;

            Id                = process.Process.DwProcessId;
            StartTime         = DateTime.FromFileTime(fileTime);
            Description       = process.strAppName;
            ServiceName       = process.strServiceShortName;
            ApplicationType   = process.ApplicationType;
            ApplicationStatus = process.AppStatus;
            IsRestartable     = process.bRestartable;
        }