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>()); }
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; }