diff --git a/trunk/CHANGELOG.txt b/trunk/CHANGELOG.txt index 11cea6ee7..38d5e09c2 100644 --- a/trunk/CHANGELOG.txt +++ b/trunk/CHANGELOG.txt @@ -59,6 +59,7 @@ Process Hacker * Memory searching now uses KProcessHacker if possible * Incorrect labeling of process files which can't be read (due to permissions) as packed + * Insane memory usage on Windows XP * Now uses the proper method of detecting .NET processes * System Information now runs on a separate thread * Disables "Show one graph per CPU" in System Information if there is only one CPU diff --git a/trunk/ProcessHacker/Components/VistaMenu/OwnerDrawnMenu.cs b/trunk/ProcessHacker/Components/VistaMenu/OwnerDrawnMenu.cs index 4683565d0..10cab6d31 100644 --- a/trunk/ProcessHacker/Components/VistaMenu/OwnerDrawnMenu.cs +++ b/trunk/ProcessHacker/Components/VistaMenu/OwnerDrawnMenu.cs @@ -136,7 +136,7 @@ namespace wyDay.Controls } else { - Image drawImg = GetImage(((MenuItem)sender)); + Image drawImg = EnsurePropertiesExists((MenuItem)sender).PreVistaBitmap; if (drawImg != null) { diff --git a/trunk/ProcessHacker/Components/VistaMenu/VistaMenu.cs b/trunk/ProcessHacker/Components/VistaMenu/VistaMenu.cs index f256b8e06..f353d9cc7 100644 --- a/trunk/ProcessHacker/Components/VistaMenu/VistaMenu.cs +++ b/trunk/ProcessHacker/Components/VistaMenu/VistaMenu.cs @@ -18,6 +18,7 @@ namespace wyDay.Controls { public Image Image; public IntPtr renderBmpHbitmap = IntPtr.Zero; + public Bitmap PreVistaBitmap; } //enum WindowsType { VistaOrLater, XP, PreXP } @@ -80,6 +81,8 @@ namespace wyDay.Controls { if (((Properties)de.Value).renderBmpHbitmap != IntPtr.Zero) DeleteObject(((Properties)de.Value).renderBmpHbitmap); + if (((Properties)de.Value).PreVistaBitmap != null) + ((Properties)de.Value).PreVistaBitmap.Dispose(); } @@ -170,12 +173,30 @@ namespace wyDay.Controls AddVistaMenuItem(mnuItem); } } - - - //for every Pre-Vista Windows, add the parent of the menu item to the list of parents - if (!DesignMode && !isVistaOrLater && formHasBeenIntialized) + else if (!DesignMode && !isVistaOrLater) { - AddPreVistaMenuItem(mnuItem); + if (prop.PreVistaBitmap != null) + { + prop.PreVistaBitmap.Dispose(); + prop.PreVistaBitmap = null; + } + + if (value == null) + return; + + Bitmap bmp = new Bitmap(value.Width, value.Height); + Graphics g = Graphics.FromImage(bmp); + + g.DrawImage(value, 0, 0, value.Width, value.Height); + g.Dispose(); + + prop.PreVistaBitmap = bmp; + + //for every Pre-Vista Windows, add the parent of the menu item to the list of parents + if (formHasBeenIntialized) + { + AddPreVistaMenuItem(mnuItem); + } } } diff --git a/trunk/ProcessHacker/Forms/HackerWindow.Designer.cs b/trunk/ProcessHacker/Forms/HackerWindow.Designer.cs index f60449f8c..f40b64fe2 100644 --- a/trunk/ProcessHacker/Forms/HackerWindow.Designer.cs +++ b/trunk/ProcessHacker/Forms/HackerWindow.Designer.cs @@ -89,9 +89,7 @@ this.verifyFileSignatureMenuItem = new System.Windows.Forms.MenuItem(); this.windowMenuItem = new System.Windows.Forms.MenuItem(); this.helpMenu = new System.Windows.Forms.MenuItem(); - this.debugPHMenuItem = new System.Windows.Forms.MenuItem(); this.freeMemoryMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem6 = new System.Windows.Forms.MenuItem(); this.logMenuItem = new System.Windows.Forms.MenuItem(); this.helpMenuItem = new System.Windows.Forms.MenuItem(); this.aboutMenuItem = new System.Windows.Forms.MenuItem(); @@ -111,12 +109,12 @@ this.listNetwork = new ProcessHacker.NetworkList(); this.menuService = new System.Windows.Forms.ContextMenu(); this.goToProcessServiceMenuItem = new System.Windows.Forms.MenuItem(); - this.performAdminServiceMenuItem = new System.Windows.Forms.MenuItem(); this.startServiceMenuItem = new System.Windows.Forms.MenuItem(); this.continueServiceMenuItem = new System.Windows.Forms.MenuItem(); this.pauseServiceMenuItem = new System.Windows.Forms.MenuItem(); this.stopServiceMenuItem = new System.Windows.Forms.MenuItem(); this.deleteServiceMenuItem = new System.Windows.Forms.MenuItem(); + this.performAdminServiceMenuItem = new System.Windows.Forms.MenuItem(); this.propertiesServiceMenuItem = new System.Windows.Forms.MenuItem(); this.menuItem8 = new System.Windows.Forms.MenuItem(); this.copyServiceMenuItem = new System.Windows.Forms.MenuItem(); @@ -139,6 +137,8 @@ this.shutdownTrayMenuItem = new System.Windows.Forms.MenuItem(); this.exitTrayMenuItem = new System.Windows.Forms.MenuItem(); this.vistaMenu = new wyDay.Controls.VistaMenu(this.components); + this.menuItem1 = new System.Windows.Forms.MenuItem(); + this.reanalyzeProcessMenuItem = new System.Windows.Forms.MenuItem(); ((System.ComponentModel.ISupportInitialize)(this.statusGeneral)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.statusCPU)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.statusMemory)).BeginInit(); @@ -178,6 +178,7 @@ this.propertiesProcessMenuItem, this.menuItem7, this.searchProcessMenuItem, + this.reanalyzeProcessMenuItem, this.copyProcessMenuItem, this.selectAllProcessMenuItem}); this.menuProcess.Popup += new System.EventHandler(this.menuProcess_Popup); @@ -330,12 +331,12 @@ // copyProcessMenuItem // this.vistaMenu.SetImage(this.copyProcessMenuItem, global::ProcessHacker.Properties.Resources.page_copy); - this.copyProcessMenuItem.Index = 13; + this.copyProcessMenuItem.Index = 14; this.copyProcessMenuItem.Text = "&Copy"; // // selectAllProcessMenuItem // - this.selectAllProcessMenuItem.Index = 14; + this.selectAllProcessMenuItem.Index = 15; this.selectAllProcessMenuItem.Text = "Select &All"; this.selectAllProcessMenuItem.Click += new System.EventHandler(this.selectAllProcessMenuItem_Click); // @@ -565,31 +566,19 @@ // this.helpMenu.Index = 4; this.helpMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { - this.debugPHMenuItem, - this.menuItem6, + this.freeMemoryMenuItem, + this.menuItem1, this.logMenuItem, this.helpMenuItem, this.aboutMenuItem}); this.helpMenu.Text = "H&elp"; // - // debugPHMenuItem - // - this.debugPHMenuItem.Index = 0; - this.debugPHMenuItem.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { - this.freeMemoryMenuItem}); - this.debugPHMenuItem.Text = "Debug"; - // // freeMemoryMenuItem // this.freeMemoryMenuItem.Index = 0; this.freeMemoryMenuItem.Text = "Free Memory"; this.freeMemoryMenuItem.Click += new System.EventHandler(this.freeMemoryMenuItem_Click); // - // menuItem6 - // - this.menuItem6.Index = 1; - this.menuItem6.Text = "-"; - // // logMenuItem // this.vistaMenu.SetImage(this.logMenuItem, global::ProcessHacker.Properties.Resources.page_white_text); @@ -767,12 +756,6 @@ this.goToProcessServiceMenuItem.Text = "&Go to Process"; this.goToProcessServiceMenuItem.Click += new System.EventHandler(this.goToProcessServiceMenuItem_Click); // - // performAdminServiceMenuItem - // - this.performAdminServiceMenuItem.Index = 6; - this.performAdminServiceMenuItem.Text = "Perform Administrative Tasks"; - this.performAdminServiceMenuItem.Click += new System.EventHandler(this.performAdminServiceMenuItem_Click); - // // startServiceMenuItem // this.vistaMenu.SetImage(this.startServiceMenuItem, global::ProcessHacker.Properties.Resources.control_play_blue); @@ -807,6 +790,12 @@ this.deleteServiceMenuItem.Text = "Delete"; this.deleteServiceMenuItem.Click += new System.EventHandler(this.deleteServiceMenuItem_Click); // + // performAdminServiceMenuItem + // + this.performAdminServiceMenuItem.Index = 6; + this.performAdminServiceMenuItem.Text = "Perform Administrative Tasks"; + this.performAdminServiceMenuItem.Click += new System.EventHandler(this.performAdminServiceMenuItem_Click); + // // propertiesServiceMenuItem // this.propertiesServiceMenuItem.DefaultItem = true; @@ -945,6 +934,17 @@ // this.vistaMenu.ContainerControl = this; // + // menuItem1 + // + this.menuItem1.Index = 1; + this.menuItem1.Text = "-"; + // + // reanalyzeProcessMenuItem + // + this.reanalyzeProcessMenuItem.Index = 13; + this.reanalyzeProcessMenuItem.Text = "Re-analyze"; + this.reanalyzeProcessMenuItem.Click += new System.EventHandler(this.reanalyzeProcessMenuItem_Click); + // // HackerWindow // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -1082,10 +1082,10 @@ private System.Windows.Forms.MenuItem uacSeparatorMenuItem; private System.Windows.Forms.MenuItem runMenuItem; private System.Windows.Forms.MenuItem runAsMenuItem; - private System.Windows.Forms.MenuItem debugPHMenuItem; private System.Windows.Forms.MenuItem freeMemoryMenuItem; - private System.Windows.Forms.MenuItem menuItem6; private System.Windows.Forms.MenuItem performAdminServiceMenuItem; + private System.Windows.Forms.MenuItem menuItem1; + private System.Windows.Forms.MenuItem reanalyzeProcessMenuItem; } } diff --git a/trunk/ProcessHacker/Forms/HackerWindow.cs b/trunk/ProcessHacker/Forms/HackerWindow.cs index d25541138..795b52872 100644 --- a/trunk/ProcessHacker/Forms/HackerWindow.cs +++ b/trunk/ProcessHacker/Forms/HackerWindow.cs @@ -543,7 +543,7 @@ namespace ProcessHacker processItem.MenuItems.AddRange(new MenuItem[] { terminateItem, suspendItem, resumeItem, propertiesItem }); processesMenuItem.MenuItems.Add(processItem); - //vistaMenu.SetImage(processItem, (treeProcesses.Tree.Model as ProcessTreeModel).Nodes[process.PID].Icon); + vistaMenu.SetImage(processItem, (treeProcesses.Tree.Model as ProcessTreeModel).Nodes[process.PID].Icon); } } catch @@ -1059,6 +1059,16 @@ namespace ProcessHacker } } + private void reanalyzeProcessMenuItem_Click(object sender, EventArgs e) + { + try + { + processP.QueueFileProcessing(processSelectedPID); + } + catch + { } + } + private void selectAllProcessMenuItem_Click(object sender, EventArgs e) { Misc.SelectAll(treeProcesses.Tree.AllNodes); @@ -2222,6 +2232,6 @@ namespace ProcessHacker this.Visible = false; } } - } + } } } diff --git a/trunk/ProcessHacker/Providers/ProcessSystemProvider.cs b/trunk/ProcessHacker/Providers/ProcessSystemProvider.cs index d07af5666..066870d9c 100644 --- a/trunk/ProcessHacker/Providers/ProcessSystemProvider.cs +++ b/trunk/ProcessHacker/Providers/ProcessSystemProvider.cs @@ -290,6 +290,12 @@ namespace ProcessHacker _fpResults.Enqueue(fpResult); } + public void QueueFileProcessing(int pid) + { + (new ProcessFileDelegate(this.ProcessFile)).BeginInvoke(pid, this.Dictionary[pid].FileName, + r => { }, null); + } + private void UpdateOnce() { this.UpdatePerformance(); diff --git a/trunk/ProcessHacker/Win32/Win32.cs b/trunk/ProcessHacker/Win32/Win32.cs index d5d765528..79124fa1a 100644 --- a/trunk/ProcessHacker/Win32/Win32.cs +++ b/trunk/ProcessHacker/Win32/Win32.cs @@ -349,6 +349,7 @@ namespace ProcessHacker result = StatusToVerifyResult(winTrustResult); CryptCATAdminReleaseCatalogContext(catAdmin, catInfo, 0); + CryptCATAdminReleaseContext(catAdmin, 0); } }