diff --git a/trunk/NProcessHacker/NProcessHacker.vcproj b/trunk/NProcessHacker/NProcessHacker.vcproj
index 64577a36c..b5720bb26 100644
--- a/trunk/NProcessHacker/NProcessHacker.vcproj
+++ b/trunk/NProcessHacker/NProcessHacker.vcproj
@@ -59,7 +59,7 @@
/>
@@ -131,7 +131,7 @@
/>
1)
+ sharedCount++;
+ if (block.ShareCount == 0)
+ privateCount++;
+ if (block.Shared)
+ shareableCount++;
}
+
+ PhFree(wsInfo);
+
+ switch (WsInformationClass)
+ {
+ case WsCount:
+ *(PULONG)WsInformation = count;
+ break;
+ case WsPrivateCount:
+ *(PULONG)WsInformation = privateCount;
+ break;
+ case WsSharedCount:
+ *(PULONG)WsInformation = sharedCount;
+ break;
+ case WsShareableCount:
+ *(PULONG)WsInformation = shareableCount;
+ break;
+ case WsAllCounts:
+ {
+ PWS_ALL_COUNTS allCounts = (PWS_ALL_COUNTS)WsInformation;
+
+ allCounts->Count = count;
+ allCounts->PrivateCount = privateCount;
+ allCounts->SharedCount = sharedCount;
+ allCounts->ShareableCount = shareableCount;
+ break;
+ }
+ }
+
+ return STATUS_SUCCESS;
}
- default:
+ break;
+ default:
return STATUS_INVALID_PARAMETER;
}
}
diff --git a/trunk/NProcessHacker/process.h b/trunk/NProcessHacker/process.h
index 3f4479eff..6b3a3d8db 100644
--- a/trunk/NProcessHacker/process.h
+++ b/trunk/NProcessHacker/process.h
@@ -31,7 +31,6 @@ typedef enum _WS_INFORMATION_CLASS
WsPrivateCount,
WsSharedCount,
WsShareableCount,
- WsLockedCount,
WsAllCounts
} WS_INFORMATION_CLASS, *PWS_INFORMATION_CLASS;
@@ -41,7 +40,6 @@ typedef struct _WS_ALL_COUNTS
ULONG PrivateCount;
ULONG SharedCount;
ULONG ShareableCount;
- ULONG LockedCount;
} WS_ALL_COUNTS, *PWS_ALL_COUNTS;
#endif
\ No newline at end of file
diff --git a/trunk/ProcessHacker/Components/ProcessTree/ProcessNode.cs b/trunk/ProcessHacker/Components/ProcessTree/ProcessNode.cs
index ebfa8d488..204bdcafe 100644
--- a/trunk/ProcessHacker/Components/ProcessTree/ProcessNode.cs
+++ b/trunk/ProcessHacker/Components/ProcessTree/ProcessNode.cs
@@ -37,7 +37,7 @@ namespace ProcessHacker
public ProcessNode(ProcessItem pitem)
{
_pitem = pitem;
- this.Tag = pitem.PID;
+ this.Tag = pitem.Pid;
if (_pitem.Icon == null)
{
@@ -151,8 +151,8 @@ namespace ProcessHacker
{
get
{
- if (_pitem.PID >= 0)
- return _pitem.PID.ToString();
+ if (_pitem.Pid >= 0)
+ return _pitem.Pid.ToString();
else
return "";
}
@@ -160,12 +160,12 @@ namespace ProcessHacker
public int PID
{
- get { return _pitem.PID; }
+ get { return _pitem.Pid; }
}
public int PPID
{
- get { if (_pitem.PID == _pitem.ParentPid) return -1; else return _pitem.ParentPid; }
+ get { if (_pitem.Pid == _pitem.ParentPid) return -1; else return _pitem.ParentPid; }
}
public string PvtMemory
@@ -175,7 +175,10 @@ namespace ProcessHacker
public string WorkingSet
{
- get { return Misc.GetNiceSizeName(_pitem.Process.VirtualMemoryCounters.WorkingSetSize); }
+ get
+ {
+ return Misc.GetNiceSizeName(_pitem.Process.VirtualMemoryCounters.WorkingSetSize);
+ }
}
public string PeakWorkingSet
@@ -183,6 +186,63 @@ namespace ProcessHacker
get { return Misc.GetNiceSizeName(_pitem.Process.VirtualMemoryCounters.PeakWorkingSetSize); }
}
+ private int GetWorkingSetNumber(NProcessHacker.WS_INFORMATION_CLASS WsInformationClass)
+ {
+ int wsInfo;
+ int retLen;
+
+ try
+ {
+ using (var phandle = new Win32.ProcessHandle(_pitem.Pid,
+ Win32.PROCESS_RIGHTS.PROCESS_QUERY_INFORMATION |
+ Win32.PROCESS_RIGHTS.PROCESS_VM_READ))
+ {
+ if ((retLen = NProcessHacker.PhpQueryProcessWs(phandle, WsInformationClass, out wsInfo,
+ 4, out retLen)) == 0)
+ return wsInfo * Program.ProcessProvider.System.PageSize;
+ }
+ }
+ catch
+ { }
+
+ return 0;
+ }
+
+ public int WorkingSetNumber
+ {
+ get { return this.GetWorkingSetNumber(NProcessHacker.WS_INFORMATION_CLASS.WsCount); }
+ }
+
+ public int PrivateWorkingSetNumber
+ {
+ get { return this.GetWorkingSetNumber(NProcessHacker.WS_INFORMATION_CLASS.WsPrivateCount); }
+ }
+
+ public string PrivateWorkingSet
+ {
+ get { return Misc.GetNiceSizeName(this.PrivateWorkingSetNumber); }
+ }
+
+ public int SharedWorkingSetNumber
+ {
+ get { return this.GetWorkingSetNumber(NProcessHacker.WS_INFORMATION_CLASS.WsSharedCount); }
+ }
+
+ public string SharedWorkingSet
+ {
+ get { return Misc.GetNiceSizeName(this.SharedWorkingSetNumber); }
+ }
+
+ public int ShareableWorkingSetNumber
+ {
+ get { return this.GetWorkingSetNumber(NProcessHacker.WS_INFORMATION_CLASS.WsShareableCount); }
+ }
+
+ public string ShareableWorkingSet
+ {
+ get { return Misc.GetNiceSizeName(this.ShareableWorkingSetNumber); }
+ }
+
public string VirtualSize
{
get { return Misc.GetNiceSizeName(_pitem.Process.VirtualMemoryCounters.VirtualSize); }
diff --git a/trunk/ProcessHacker/Components/ProcessTree/ProcessTree.Designer.cs b/trunk/ProcessHacker/Components/ProcessTree/ProcessTree.Designer.cs
index 29567e5da..f1df06f9a 100644
--- a/trunk/ProcessHacker/Components/ProcessTree/ProcessTree.Designer.cs
+++ b/trunk/ProcessHacker/Components/ProcessTree/ProcessTree.Designer.cs
@@ -34,6 +34,7 @@
this.columnPvtMemory = new Aga.Controls.Tree.TreeColumn();
this.columnWorkingSet = new Aga.Controls.Tree.TreeColumn();
this.columnPeakWorkingSet = new Aga.Controls.Tree.TreeColumn();
+ this.columnPrivateWorkingSet = new Aga.Controls.Tree.TreeColumn();
this.columnVirtualSize = new Aga.Controls.Tree.TreeColumn();
this.columnPeakVirtualSize = new Aga.Controls.Tree.TreeColumn();
this.columnPagefileUsage = new Aga.Controls.Tree.TreeColumn();
@@ -80,6 +81,11 @@
this.nodeIoTotal = new Aga.Controls.Tree.NodeControls.NodeTextBox();
this.nodeIoReadOther = new Aga.Controls.Tree.NodeControls.NodeTextBox();
this.nodeIoWrite = new Aga.Controls.Tree.NodeControls.NodeTextBox();
+ this.nodePrivateWorkingSet = new Aga.Controls.Tree.NodeControls.NodeTextBox();
+ this.columnSharedWorkingSet = new Aga.Controls.Tree.TreeColumn();
+ this.columnShareableWorkingSet = new Aga.Controls.Tree.TreeColumn();
+ this.nodeSharedWorkingSet = new Aga.Controls.Tree.NodeControls.NodeTextBox();
+ this.nodeShareableWorkingSet = new Aga.Controls.Tree.NodeControls.NodeTextBox();
this.SuspendLayout();
//
// treeProcesses
@@ -91,6 +97,9 @@
this.treeProcesses.Columns.Add(this.columnPvtMemory);
this.treeProcesses.Columns.Add(this.columnWorkingSet);
this.treeProcesses.Columns.Add(this.columnPeakWorkingSet);
+ this.treeProcesses.Columns.Add(this.columnPrivateWorkingSet);
+ this.treeProcesses.Columns.Add(this.columnSharedWorkingSet);
+ this.treeProcesses.Columns.Add(this.columnShareableWorkingSet);
this.treeProcesses.Columns.Add(this.columnVirtualSize);
this.treeProcesses.Columns.Add(this.columnPeakVirtualSize);
this.treeProcesses.Columns.Add(this.columnPagefileUsage);
@@ -129,6 +138,9 @@
this.treeProcesses.NodeControls.Add(this.nodePeakWorkingSet);
this.treeProcesses.NodeControls.Add(this.nodeVirtualSize);
this.treeProcesses.NodeControls.Add(this.nodePeakVirtualSize);
+ this.treeProcesses.NodeControls.Add(this.nodePrivateWorkingSet);
+ this.treeProcesses.NodeControls.Add(this.nodeSharedWorkingSet);
+ this.treeProcesses.NodeControls.Add(this.nodeShareableWorkingSet);
this.treeProcesses.NodeControls.Add(this.nodePagefileUsage);
this.treeProcesses.NodeControls.Add(this.nodePeakPagefileUsage);
this.treeProcesses.NodeControls.Add(this.nodePageFaults);
@@ -202,6 +214,16 @@
this.columnPeakWorkingSet.TooltipText = null;
this.columnPeakWorkingSet.Width = 70;
//
+ // columnPrivateWorkingSet
+ //
+ this.columnPrivateWorkingSet.Header = "Private WS";
+ this.columnPrivateWorkingSet.IsVisible = false;
+ this.columnPrivateWorkingSet.Sortable = true;
+ this.columnPrivateWorkingSet.SortOrder = System.Windows.Forms.SortOrder.None;
+ this.columnPrivateWorkingSet.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
+ this.columnPrivateWorkingSet.TooltipText = null;
+ this.columnPrivateWorkingSet.Width = 70;
+ //
// columnVirtualSize
//
this.columnVirtualSize.Header = "Virtual Size";
@@ -640,6 +662,56 @@
this.nodeIoWrite.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
this.nodeIoWrite.Trimming = System.Drawing.StringTrimming.EllipsisCharacter;
//
+ // nodePrivateWorkingSet
+ //
+ this.nodePrivateWorkingSet.DataPropertyName = "PrivateWorkingSet";
+ this.nodePrivateWorkingSet.EditEnabled = false;
+ this.nodePrivateWorkingSet.IncrementalSearchEnabled = true;
+ this.nodePrivateWorkingSet.LeftMargin = 3;
+ this.nodePrivateWorkingSet.ParentColumn = this.columnPrivateWorkingSet;
+ this.nodePrivateWorkingSet.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
+ this.nodePrivateWorkingSet.Trimming = System.Drawing.StringTrimming.EllipsisCharacter;
+ //
+ // columnSharedWorkingSet
+ //
+ this.columnSharedWorkingSet.Header = "Shared WS";
+ this.columnSharedWorkingSet.IsVisible = false;
+ this.columnSharedWorkingSet.Sortable = true;
+ this.columnSharedWorkingSet.SortOrder = System.Windows.Forms.SortOrder.None;
+ this.columnSharedWorkingSet.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
+ this.columnSharedWorkingSet.TooltipText = null;
+ this.columnSharedWorkingSet.Width = 70;
+ //
+ // columnShareableWorkingSet
+ //
+ this.columnShareableWorkingSet.Header = "Shareable WS";
+ this.columnShareableWorkingSet.IsVisible = false;
+ this.columnShareableWorkingSet.Sortable = true;
+ this.columnShareableWorkingSet.SortOrder = System.Windows.Forms.SortOrder.None;
+ this.columnShareableWorkingSet.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
+ this.columnShareableWorkingSet.TooltipText = null;
+ this.columnShareableWorkingSet.Width = 70;
+ //
+ // nodeSharedWorkingSet
+ //
+ this.nodeSharedWorkingSet.DataPropertyName = "SharedWorkingSet";
+ this.nodeSharedWorkingSet.EditEnabled = false;
+ this.nodeSharedWorkingSet.IncrementalSearchEnabled = true;
+ this.nodeSharedWorkingSet.LeftMargin = 3;
+ this.nodeSharedWorkingSet.ParentColumn = this.columnSharedWorkingSet;
+ this.nodeSharedWorkingSet.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
+ this.nodeSharedWorkingSet.Trimming = System.Drawing.StringTrimming.EllipsisCharacter;
+ //
+ // nodeShareableWorkingSet
+ //
+ this.nodeShareableWorkingSet.DataPropertyName = "ShareableWorkingSet";
+ this.nodeShareableWorkingSet.EditEnabled = false;
+ this.nodeShareableWorkingSet.IncrementalSearchEnabled = true;
+ this.nodeShareableWorkingSet.LeftMargin = 3;
+ this.nodeShareableWorkingSet.ParentColumn = this.columnShareableWorkingSet;
+ this.nodeShareableWorkingSet.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
+ this.nodeShareableWorkingSet.Trimming = System.Drawing.StringTrimming.EllipsisCharacter;
+ //
// ProcessTree
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@@ -706,5 +778,11 @@
private Aga.Controls.Tree.NodeControls.NodeTextBox nodeIoTotal;
private Aga.Controls.Tree.NodeControls.NodeTextBox nodeIoReadOther;
private Aga.Controls.Tree.NodeControls.NodeTextBox nodeIoWrite;
+ private Aga.Controls.Tree.TreeColumn columnPrivateWorkingSet;
+ private Aga.Controls.Tree.NodeControls.NodeTextBox nodePrivateWorkingSet;
+ private Aga.Controls.Tree.TreeColumn columnSharedWorkingSet;
+ private Aga.Controls.Tree.TreeColumn columnShareableWorkingSet;
+ private Aga.Controls.Tree.NodeControls.NodeTextBox nodeSharedWorkingSet;
+ private Aga.Controls.Tree.NodeControls.NodeTextBox nodeShareableWorkingSet;
}
}
diff --git a/trunk/ProcessHacker/Components/ProcessTree/ProcessTree.cs b/trunk/ProcessHacker/Components/ProcessTree/ProcessTree.cs
index 24691ba3b..201eff010 100644
--- a/trunk/ProcessHacker/Components/ProcessTree/ProcessTree.cs
+++ b/trunk/ProcessHacker/Components/ProcessTree/ProcessTree.cs
@@ -265,8 +265,8 @@ namespace ProcessHacker
else if (Properties.Settings.Default.UseColorPackedProcesses && p.IsPacked)
return Properties.Settings.Default.ColorPackedProcesses;
else if (Properties.Settings.Default.UseColorServiceProcesses &&
- Program.HackerWindow.ProcessServices.ContainsKey(p.PID) &&
- Program.HackerWindow.ProcessServices[p.PID].Count > 0)
+ Program.HackerWindow.ProcessServices.ContainsKey(p.Pid) &&
+ Program.HackerWindow.ProcessServices[p.Pid].Count > 0)
return Properties.Settings.Default.ColorServiceProcesses;
else if (Properties.Settings.Default.UseColorSystemProcesses && p.Username == "NT AUTHORITY\\SYSTEM")
return Properties.Settings.Default.ColorSystemProcesses;
@@ -284,7 +284,7 @@ namespace ProcessHacker
{
_treeModel.Add(item);
- TreeNodeAdv node = this.FindTreeNode(item.PID);
+ TreeNodeAdv node = this.FindTreeNode(item.Pid);
if (node != null)
{
@@ -316,7 +316,7 @@ namespace ProcessHacker
if (newItem.FullUpdate)
{
- TreeNodeAdv node = this.FindTreeNode(newItem.PID);
+ TreeNodeAdv node = this.FindTreeNode(newItem.Pid);
if (node != null)
{
@@ -333,7 +333,7 @@ namespace ProcessHacker
{
lock (_listLock)
{
- TreeNodeAdv node = this.FindTreeNode(item.PID);
+ TreeNodeAdv node = this.FindTreeNode(item.Pid);
if (node != null)
{
diff --git a/trunk/ProcessHacker/Components/ProcessTree/ProcessTreeModel.cs b/trunk/ProcessHacker/Components/ProcessTree/ProcessTreeModel.cs
index c3b206bd2..704acdf0c 100644
--- a/trunk/ProcessHacker/Components/ProcessTree/ProcessTreeModel.cs
+++ b/trunk/ProcessHacker/Components/ProcessTree/ProcessTreeModel.cs
@@ -48,14 +48,14 @@ namespace ProcessHacker
else
_roots.Add(itemNode);
- _processes.Add(item.PID, itemNode);
+ _processes.Add(item.Pid, itemNode);
ProcessNode[] rootNodes = _roots.ToArray();
// find this process' children
foreach (ProcessNode node in rootNodes)
{
- if (node.ProcessItem.HasParent && node.PPID == item.PID)
+ if (node.ProcessItem.HasParent && node.PPID == item.Pid)
{
_roots.Remove(node);
itemNode.Children.Add(node);
@@ -67,7 +67,7 @@ namespace ProcessHacker
public void Modify(ProcessItem oldItem, ProcessItem newItem)
{
- ProcessNode node = _processes[newItem.PID];
+ ProcessNode node = _processes[newItem.Pid];
node.ProcessItem = newItem;
@@ -79,7 +79,7 @@ namespace ProcessHacker
public void Remove(ProcessItem item)
{
- ProcessNode targetNode = _processes[item.PID];
+ ProcessNode targetNode = _processes[item.Pid];
ProcessNode[] nodes = _roots.ToArray();
ProcessNode[] targetChildren = null;
@@ -87,7 +87,7 @@ namespace ProcessHacker
foreach (ProcessNode node in nodes)
{
- if (node.PID == item.PID)
+ if (node.PID == item.Pid)
{
_roots.Remove(node);
this.MoveChildrenToRoot(node);
@@ -107,7 +107,7 @@ namespace ProcessHacker
}
}
- _processes.Remove(item.PID);
+ _processes.Remove(item.Pid);
this.StructureChanged(this, new TreePathEventArgs(new TreePath()));
foreach (ProcessNode n in targetChildren)
diff --git a/trunk/ProcessHacker/Forms/HackerWindow.cs b/trunk/ProcessHacker/Forms/HackerWindow.cs
index a9e0817b7..689293b82 100644
--- a/trunk/ProcessHacker/Forms/HackerWindow.cs
+++ b/trunk/ProcessHacker/Forms/HackerWindow.cs
@@ -511,7 +511,7 @@ namespace ProcessHacker
{
foreach (var process in processP.Dictionary.Values)
{
- if (process.PID > 0)
+ if (process.Pid > 0)
{
processes.Add(process);
}
@@ -548,14 +548,14 @@ namespace ProcessHacker
MenuItem resumeItem = new MenuItem();
MenuItem propertiesItem = new MenuItem();
- processItem.Text = process.Name + " (" + process.PID.ToString() + ")";
+ processItem.Text = process.Name + " (" + process.Pid.ToString() + ")";
processItem.Tag = process;
terminateItem.Click += new EventHandler((sender_, e_) =>
{
ProcessItem item = (ProcessItem)((MenuItem)sender_).Parent.Tag;
- ProcessActions.Terminate(this, new int[] { item.PID }, new string[] { item.Name }, true);
+ ProcessActions.Terminate(this, new int[] { item.Pid }, new string[] { item.Name }, true);
});
terminateItem.Text = "Terminate";
@@ -563,7 +563,7 @@ namespace ProcessHacker
{
ProcessItem item = (ProcessItem)((MenuItem)sender_).Parent.Tag;
- ProcessActions.Suspend(this, new int[] { item.PID }, new string[] { item.Name }, true);
+ ProcessActions.Suspend(this, new int[] { item.Pid }, new string[] { item.Name }, true);
});
suspendItem.Text = "Suspend";
@@ -571,7 +571,7 @@ namespace ProcessHacker
{
ProcessItem item = (ProcessItem)((MenuItem)sender_).Parent.Tag;
- ProcessActions.Resume(this, new int[] { item.PID }, new string[] { item.Name }, true);
+ ProcessActions.Resume(this, new int[] { item.Pid }, new string[] { item.Name }, true);
});
resumeItem.Text = "Resume";
@@ -581,7 +581,7 @@ namespace ProcessHacker
{
ProcessItem item = (ProcessItem)((MenuItem)sender_).Parent.Tag;
- ProcessWindow pForm = Program.GetProcessWindow(processP.Dictionary[item.PID],
+ ProcessWindow pForm = Program.GetProcessWindow(processP.Dictionary[item.Pid],
new Program.PWindowInvokeAction(delegate(ProcessWindow f)
{
f.Show();
@@ -599,7 +599,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
@@ -1261,7 +1261,7 @@ namespace ProcessHacker
{
parent = processP.Dictionary[item.ParentPid];
- parentText += " started by " + parent.Name + " (PID " + parent.PID.ToString() + ")";
+ parentText += " started by " + parent.Name + " (PID " + parent.Pid.ToString() + ")";
}
catch (Exception ex)
{
@@ -1269,25 +1269,25 @@ namespace ProcessHacker
}
}
- this.QueueMessage("New Process: " + item.Name + " (PID " + item.PID.ToString() + ")" + parentText, item.Icon);
+ this.QueueMessage("New Process: " + item.Name + " (PID " + item.Pid.ToString() + ")" + parentText, item.Icon);
if (NPMenuItem.Checked)
notifyIcon.ShowBalloonTip(2000, "New Process",
- "The process " + item.Name + " (" + item.PID.ToString() +
+ "The process " + item.Name + " (" + item.Pid.ToString() +
") was started" + ((parentText != "") ? " by " +
- parent.Name + " (PID " + parent.PID.ToString() + ")" : "") + ".", ToolTipIcon.Info);
+ parent.Name + " (PID " + parent.Pid.ToString() + ")" : "") + ".", ToolTipIcon.Info);
}
public void processP_DictionaryRemoved(ProcessItem item)
{
- this.QueueMessage("Terminated Process: " + item.Name + " (PID " + item.PID.ToString() + ")", null);
+ this.QueueMessage("Terminated Process: " + item.Name + " (PID " + item.Pid.ToString() + ")", null);
- if (processServices.ContainsKey(item.PID))
- processServices.Remove(item.PID);
+ if (processServices.ContainsKey(item.Pid))
+ processServices.Remove(item.Pid);
if (TPMenuItem.Checked)
notifyIcon.ShowBalloonTip(2000, "Terminated Process",
- "The process " + item.Name + " (" + item.PID.ToString() + ") was terminated.", ToolTipIcon.Info);
+ "The process " + item.Name + " (" + item.Pid.ToString() + ") was terminated.", ToolTipIcon.Info);
}
private void serviceP_Updated()
diff --git a/trunk/ProcessHacker/Forms/ProcessWindow.cs b/trunk/ProcessHacker/Forms/ProcessWindow.cs
index 350a0ae6b..170e79658 100644
--- a/trunk/ProcessHacker/Forms/ProcessWindow.cs
+++ b/trunk/ProcessHacker/Forms/ProcessWindow.cs
@@ -55,7 +55,7 @@ namespace ProcessHacker
InitializeComponent();
_processItem = process;
- _pid = process.PID;
+ _pid = process.Pid;
this.Text = process.Name + " (PID " + _pid.ToString() + ")";
@@ -844,7 +844,7 @@ namespace ProcessHacker
private void buttonTerminate_Click(object sender, EventArgs e)
{
- ProcessActions.Terminate(this, new int[] { _processItem.PID }, new string[] { _processItem.Name }, true);
+ ProcessActions.Terminate(this, new int[] { _processItem.Pid }, new string[] { _processItem.Name }, true);
}
private void buttonEditDEP_Click(object sender, EventArgs e)
diff --git a/trunk/ProcessHacker/Program/NProcessHacker.cs b/trunk/ProcessHacker/Program/NProcessHacker.cs
index 0c6c8b9af..693506bcf 100644
--- a/trunk/ProcessHacker/Program/NProcessHacker.cs
+++ b/trunk/ProcessHacker/Program/NProcessHacker.cs
@@ -29,7 +29,43 @@ namespace ProcessHacker
{
public class NProcessHacker
{
+ public enum WS_INFORMATION_CLASS
+ {
+ WsCount = 0,
+ WsPrivateCount,
+ WsSharedCount,
+ WsShareableCount,
+ WsAllCounts
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct WS_ALL_COUNTS
+ {
+ public int Count;
+ public int PrivateCount;
+ public int SharedCount;
+ public int ShareableCount;
+ }
+
[DllImport("nprocesshacker.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode)]
public static extern Win32.VerifyResult PhvVerifyFile(string FileName);
+
+ [DllImport("nprocesshacker.dll", CallingConvention = CallingConvention.Cdecl, SetLastError = true)]
+ public static extern int PhpQueryProcessWs(
+ int ProcessHandle,
+ WS_INFORMATION_CLASS WsInformationClass,
+ out int WsInformation,
+ int WsInformationLength,
+ out int ReturnLength
+ );
+
+ [DllImport("nprocesshacker.dll", CallingConvention = CallingConvention.Cdecl, SetLastError = true)]
+ public static extern int PhpQueryProcessWs(
+ int ProcessHandle,
+ WS_INFORMATION_CLASS WsInformationClass,
+ out WS_ALL_COUNTS WsInformation,
+ int WsInformationLength,
+ out int ReturnLength
+ );
}
}
diff --git a/trunk/ProcessHacker/Program/Program.cs b/trunk/ProcessHacker/Program/Program.cs
index 07621a8fe..237ac51a0 100644
--- a/trunk/ProcessHacker/Program/Program.cs
+++ b/trunk/ProcessHacker/Program/Program.cs
@@ -911,9 +911,9 @@ namespace ProcessHacker
{
ProcessWindow pw = null;
- if (PWindows.ContainsKey(process.PID))
+ if (PWindows.ContainsKey(process.Pid))
{
- pw = PWindows[process.PID];
+ pw = PWindows[process.Pid];
pw.Invoke(action, pw);
@@ -935,13 +935,13 @@ namespace ProcessHacker
catch
{ }
- Program.PThreads.Remove(process.PID);
+ Program.PThreads.Remove(process.Pid);
}));
t.SetApartmentState(ApartmentState.STA);
t.Start();
- Program.PThreads.Add(process.PID, t);
+ Program.PThreads.Add(process.Pid, t);
}
else
{
diff --git a/trunk/ProcessHacker/Providers/ProcessSystemProvider.cs b/trunk/ProcessHacker/Providers/ProcessSystemProvider.cs
index e01f73b15..dbd9e1ce1 100644
--- a/trunk/ProcessHacker/Providers/ProcessSystemProvider.cs
+++ b/trunk/ProcessHacker/Providers/ProcessSystemProvider.cs
@@ -43,7 +43,7 @@ namespace ProcessHacker
return base.MemberwiseClone();
}
- public int PID;
+ public int Pid;
public Icon Icon;
public string CmdLine;
@@ -542,7 +542,7 @@ namespace ProcessHacker
catch { }
}
- item.PID = pid;
+ item.Pid = pid;
item.Process = processInfo;
item.SessionId = processInfo.SessionId;
item.Threads = procs[pid].Threads;