From 4a2fa1dfb2d8f3ea876aa48af92020739fd4e5bf Mon Sep 17 00:00:00 2001 From: wj32 Date: Sun, 28 Dec 2008 07:07:32 +0000 Subject: [PATCH] implement cache for session ID checking in HandleFilter.cs git-svn-id: svn://svn.code.sf.net/p/processhacker/code@446 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- trunk/ProcessHacker/FormHelper/HandleFilter.cs | 17 +++++++++++++++-- trunk/ProcessHacker/Win32/Win32.cs | 2 +- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/trunk/ProcessHacker/FormHelper/HandleFilter.cs b/trunk/ProcessHacker/FormHelper/HandleFilter.cs index ba5f3f348..fded8d8b6 100644 --- a/trunk/ProcessHacker/FormHelper/HandleFilter.cs +++ b/trunk/ProcessHacker/FormHelper/HandleFilter.cs @@ -36,6 +36,7 @@ namespace ProcessHacker.FormHelper public event MatchProgressEvent MatchProgress; private string strFilter; private List listViewItemContainer = new List(100); + private Dictionary isCurrentSessionIdCache = new Dictionary(); public HandleFilter(ISynchronizeInvoke isi, string strFilter) : base(isi) @@ -88,8 +89,20 @@ namespace ProcessHacker.FormHelper { try { - if (Win32.GetProcessSessionId(currhandle.ProcessId) != Program.CurrentSessionId) - return; + if (isCurrentSessionIdCache.ContainsKey(currhandle.ProcessId)) + { + if (!isCurrentSessionIdCache[currhandle.ProcessId]) + return; + } + else + { + bool isCurrentSessionId = Win32.GetProcessSessionId(currhandle.ProcessId) == Program.CurrentSessionId; + + isCurrentSessionIdCache.Add(currhandle.ProcessId, isCurrentSessionId); + + if (!isCurrentSessionId) + return; + } } catch { diff --git a/trunk/ProcessHacker/Win32/Win32.cs b/trunk/ProcessHacker/Win32/Win32.cs index d559f7b94..e6e0077b0 100644 --- a/trunk/ProcessHacker/Win32/Win32.cs +++ b/trunk/ProcessHacker/Win32/Win32.cs @@ -567,7 +567,7 @@ namespace ProcessHacker } catch { - using (ProcessHandle phandle = new ProcessHandle(ProcessId, PROCESS_RIGHTS.PROCESS_QUERY_INFORMATION)) + using (ProcessHandle phandle = new ProcessHandle(ProcessId, Program.MinProcessQueryRights)) { return phandle.GetToken(TOKEN_RIGHTS.TOKEN_QUERY).GetSessionId(); }