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