From 812bf5f300d3d5c0f1f50c8d1af3e6fcc83fc0d4 Mon Sep 17 00:00:00 2001 From: wj32 Date: Fri, 18 Sep 2009 06:34:45 +0000 Subject: [PATCH] * fixed relative start time sort order * removed GetDateTimeFromLongTime; use DateTime.FromFileTime instead * ProcessHandle.GetCreateTime and GetExitTime both return DateTimes now git-svn-id: svn://svn.code.sf.net/p/processhacker/code@1892 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- trunk/CHANGELOG.txt | 1 + trunk/ProcessHacker.Common/Utils.cs | 9 ------- trunk/ProcessHacker.Native/Api/Functions.cs | 25 +++++++++---------- trunk/ProcessHacker.Native/Api/LsaEnums.cs | 2 ++ trunk/ProcessHacker.Native/Api/Structs.cs | 15 ----------- .../Objects/FileHandle.cs | 8 +++--- .../Objects/ProcessHandle.cs | 14 +++++------ .../ProcessTree/ProcessTreeModel.cs | 6 +++-- .../Forms/HiddenProcessesWindow.cs | 4 +-- trunk/ProcessHacker/Forms/RunWindow.cs | 5 ++-- trunk/ProcessHacker/Program/Save.cs | 2 +- .../Providers/ProcessSystemProvider.cs | 2 +- 12 files changed, 36 insertions(+), 57 deletions(-) diff --git a/trunk/CHANGELOG.txt b/trunk/CHANGELOG.txt index c0bb813d0..6cd30fa2d 100644 --- a/trunk/CHANGELOG.txt +++ b/trunk/CHANGELOG.txt @@ -26,6 +26,7 @@ Process Hacker * Crash when viewing error details in the event of a corrupt configuration file * Notification icons were fixed at 16x16 size + * Sort order for the relative start time column 1.5 * NEW/IMPROVED: diff --git a/trunk/ProcessHacker.Common/Utils.cs b/trunk/ProcessHacker.Common/Utils.cs index 23ae0c7b7..e35bd81fb 100644 --- a/trunk/ProcessHacker.Common/Utils.cs +++ b/trunk/ProcessHacker.Common/Utils.cs @@ -770,15 +770,6 @@ namespace ProcessHacker.Common return data; } - /// - /// Converts a 64-bit Windows time value to a DateTime object. - /// - /// The Windows time value. - public static DateTime GetDateTimeFromLongTime(long time) - { - return (new DateTime(1601, 1, 1)).AddTicks(time).ToLocalTime(); - } - /// /// Converts a 32-bit Unix time value into a DateTime object. /// diff --git a/trunk/ProcessHacker.Native/Api/Functions.cs b/trunk/ProcessHacker.Native/Api/Functions.cs index e9f5cf604..6f82bd6d4 100644 --- a/trunk/ProcessHacker.Native/Api/Functions.cs +++ b/trunk/ProcessHacker.Native/Api/Functions.cs @@ -1486,10 +1486,10 @@ namespace ProcessHacker.Native.Api [return: MarshalAs(UnmanagedType.Bool)] public static extern bool GetProcessTimes( [In] IntPtr ProcessHandle, - [Out] out FileTime CreationTime, - [Out] out FileTime ExitTime, - [Out] out FileTime KernelTime, - [Out] out FileTime UserTime + [Out] out LargeInteger CreationTime, + [Out] out LargeInteger ExitTime, + [Out] out LargeInteger KernelTime, + [Out] out LargeInteger UserTime ); [DllImport("kernel32.dll", SetLastError = true)] @@ -1502,20 +1502,19 @@ namespace ProcessHacker.Native.Api [DllImport("kernel32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool GetSystemTimes( - [Out] out FileTime IdleTime, - [Out] out FileTime KernelTime, - [Out] out FileTime UserTime + [Out] out LargeInteger IdleTime, + [Out] out LargeInteger KernelTime, + [Out] out LargeInteger UserTime ); - // From MSDN: Do not cast a pointer to a FILETIME structure to either a ULARGE_INTEGER* or __int64* value because it can cause alignment faults on 64-bit Windows. [DllImport("kernel32.dll")] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool GetThreadTimes( - [In] IntPtr hThread, - [Out] out FileTime lpCreationTime, - [Out] out FileTime lpExitTime, - [Out] out FileTime lpKernelTime, - [Out] out FileTime lpUserTime + [In] IntPtr ThreadHandle, + [Out] out LargeInteger CreationTime, + [Out] out LargeInteger ExitTime, + [Out] out LargeInteger KernelTime, + [Out] out LargeInteger UserTime ); #endregion diff --git a/trunk/ProcessHacker.Native/Api/LsaEnums.cs b/trunk/ProcessHacker.Native/Api/LsaEnums.cs index 0c72bee75..9dca920ef 100644 --- a/trunk/ProcessHacker.Native/Api/LsaEnums.cs +++ b/trunk/ProcessHacker.Native/Api/LsaEnums.cs @@ -27,6 +27,7 @@ using System.Text; namespace ProcessHacker.Native.Api { + [Flags] public enum LsaOperationalMode { PasswordProtected = 0x1, @@ -85,6 +86,7 @@ namespace ProcessHacker.Native.Api CachedUnlock } + [Flags] public enum SecuritySystemAccess : int { Interactive = 0x1, diff --git a/trunk/ProcessHacker.Native/Api/Structs.cs b/trunk/ProcessHacker.Native/Api/Structs.cs index da76d6a7e..0977c765a 100644 --- a/trunk/ProcessHacker.Native/Api/Structs.cs +++ b/trunk/ProcessHacker.Native/Api/Structs.cs @@ -78,21 +78,6 @@ namespace ProcessHacker.Native.Api public ServiceStatusProcess ServiceStatusProcess; } - [StructLayout(LayoutKind.Sequential)] - public struct FileTime - { - public uint LowDateTime; - public int HighDateTime; - - public static implicit operator long(FileTime fileTime) - { - LargeInteger integer = new LargeInteger(); - integer.LowPart = fileTime.LowDateTime; - integer.HighPart = fileTime.HighDateTime; - return integer.QuadPart; - } - } - [StructLayout(LayoutKind.Sequential)] public struct FpoData { diff --git a/trunk/ProcessHacker.Native/Objects/FileHandle.cs b/trunk/ProcessHacker.Native/Objects/FileHandle.cs index a3073c2eb..fc2456316 100644 --- a/trunk/ProcessHacker.Native/Objects/FileHandle.cs +++ b/trunk/ProcessHacker.Native/Objects/FileHandle.cs @@ -775,10 +775,10 @@ namespace ProcessHacker.Native.Objects if (!callback(new FileEntry( name, info.FileIndex, - Utils.GetDateTimeFromLongTime(info.CreationTime), - Utils.GetDateTimeFromLongTime(info.LastAccessTime), - Utils.GetDateTimeFromLongTime(info.LastWriteTime), - Utils.GetDateTimeFromLongTime(info.ChangeTime), + DateTime.FromFileTime(info.CreationTime), + DateTime.FromFileTime(info.LastAccessTime), + DateTime.FromFileTime(info.LastWriteTime), + DateTime.FromFileTime(info.ChangeTime), info.EndOfFile, info.AllocationSize, info.FileAttributes diff --git a/trunk/ProcessHacker.Native/Objects/ProcessHandle.cs b/trunk/ProcessHacker.Native/Objects/ProcessHandle.cs index 8c4e0a34c..3e3a17a58 100644 --- a/trunk/ProcessHacker.Native/Objects/ProcessHandle.cs +++ b/trunk/ProcessHacker.Native/Objects/ProcessHandle.cs @@ -934,9 +934,9 @@ namespace ProcessHacker.Native.Objects /// /// Gets the creation time of the process. /// - public long GetCreateTime() + public DateTime GetCreateTime() { - return this.GetTimes()[0]; + return DateTime.FromFileTime(this.GetTimes()[0]); } /// @@ -1111,9 +1111,9 @@ namespace ProcessHacker.Native.Objects /// /// Gets the exit time of the process. /// - public long GetExitTime() + public DateTime GetExitTime() { - return this.GetTimes()[1]; + return DateTime.FromFileTime(this.GetTimes()[1]); } /// @@ -1713,12 +1713,12 @@ namespace ProcessHacker.Native.Objects } /// - /// Gets an array of FileTimes for the process. + /// Gets an array of times for the process. /// /// An array of times: creation time, exit time, kernel time, user time. - private FileTime[] GetTimes() + private LargeInteger[] GetTimes() { - FileTime[] times = new FileTime[4]; + LargeInteger[] times = new LargeInteger[4]; if (!Win32.GetProcessTimes(this, out times[0], out times[1], out times[2], out times[3])) Win32.ThrowLastError(); diff --git a/trunk/ProcessHacker/Components/ProcessTree/ProcessTreeModel.cs b/trunk/ProcessHacker/Components/ProcessTree/ProcessTreeModel.cs index e7095ffb4..4264d4782 100644 --- a/trunk/ProcessHacker/Components/ProcessTree/ProcessTreeModel.cs +++ b/trunk/ProcessHacker/Components/ProcessTree/ProcessTreeModel.cs @@ -218,7 +218,7 @@ namespace ProcessHacker public int ModifySort(int sortResult, SortOrder order) { if (order == SortOrder.Ascending) - return sortResult * -1; + return -sortResult; else if (order == SortOrder.Descending) return sortResult; else @@ -314,8 +314,10 @@ namespace ProcessHacker case "page priority": return ModifySort(n1.PagePriority.CompareTo(n2.PagePriority), sortO); case "start time": - case "start time (relative)": return ModifySort(n1.ProcessItem.CreateTime.CompareTo(n2.ProcessItem.CreateTime), sortO); + case "start time (relative)": + // Invert the order - bigger dates are actually smaller if we use the relative time span. + return -ModifySort(n1.ProcessItem.CreateTime.CompareTo(n2.ProcessItem.CreateTime), sortO); case "total cpu time": return ModifySort((n1.ProcessItem.Process.KernelTime + n1.ProcessItem.Process.UserTime). CompareTo(n2.ProcessItem.Process.KernelTime + n2.ProcessItem.Process.UserTime), sortO); diff --git a/trunk/ProcessHacker/Forms/HiddenProcessesWindow.cs b/trunk/ProcessHacker/Forms/HiddenProcessesWindow.cs index ec5f5a213..06bf1e67c 100644 --- a/trunk/ProcessHacker/Forms/HiddenProcessesWindow.cs +++ b/trunk/ProcessHacker/Forms/HiddenProcessesWindow.cs @@ -97,12 +97,12 @@ namespace ProcessHacker // Check if the process has terminated. This is possible because // a process can be terminated while its object is still being // referenced. - long exitTime = -1; + DateTime exitTime = DateTime.MinValue; try { exitTime = phandle.GetExitTime(); } catch { } - if (exitTime != 0) + if (exitTime.ToFileTime() == 0) { item.BackColor = Color.DarkGray; item.ForeColor = Color.White; diff --git a/trunk/ProcessHacker/Forms/RunWindow.cs b/trunk/ProcessHacker/Forms/RunWindow.cs index 890d055cc..aeb2569f8 100644 --- a/trunk/ProcessHacker/Forms/RunWindow.cs +++ b/trunk/ProcessHacker/Forms/RunWindow.cs @@ -55,10 +55,9 @@ namespace ProcessHacker try { - using (var policy = - new LsaPolicyHandle(LsaPolicyAccess.LookupNames | LsaPolicyAccess.ViewLocalInformation)) + using (var phandle = new LsaPolicyHandle(LsaPolicyAccess.ViewLocalInformation)) { - foreach (var sid in policy.GetAccounts()) + foreach (var sid in phandle.GetAccounts()) if (sid.NameUse == SidNameUse.User) users.Add(sid.GetFullName(true)); } diff --git a/trunk/ProcessHacker/Program/Save.cs b/trunk/ProcessHacker/Program/Save.cs index b49fe0a2f..5087761a6 100644 --- a/trunk/ProcessHacker/Program/Save.cs +++ b/trunk/ProcessHacker/Program/Save.cs @@ -265,7 +265,7 @@ namespace ProcessHacker sb.AppendLine("Version info section failed! " + ex2.Message); } - sb.AppendLine("Started: " + Utils.GetDateTimeFromLongTime(phandle.GetCreateTime()).ToString()); + sb.AppendLine("Started: " + phandle.GetCreateTime().ToString()); var memoryInfo = phandle.GetMemoryStatistics(); diff --git a/trunk/ProcessHacker/Providers/ProcessSystemProvider.cs b/trunk/ProcessHacker/Providers/ProcessSystemProvider.cs index 484d1ceaa..233c31a56 100644 --- a/trunk/ProcessHacker/Providers/ProcessSystemProvider.cs +++ b/trunk/ProcessHacker/Providers/ProcessSystemProvider.cs @@ -939,7 +939,7 @@ namespace ProcessHacker try { - item.CreateTime = Utils.GetDateTimeFromLongTime(processInfo.CreateTime); + item.CreateTime = DateTime.FromFileTime(processInfo.CreateTime); } catch { }