mirror of
https://github.com/mirror/processhacker
synced 2026-06-08 16:03:24 +00:00
added module provider
git-svn-id: svn://svn.code.sf.net/p/processhacker/code@406 21ef857c-d57f-4fe0-8362-d861dc6d29cd
This commit is contained in:
@@ -122,8 +122,8 @@ namespace ProcessHacker
|
||||
{
|
||||
if (_provider != null)
|
||||
{
|
||||
_provider.DictionaryAdded -= new Provider<short, HandleItem>.ProviderDictionaryAdded(provider_DictionaryAdded);
|
||||
_provider.DictionaryRemoved -= new Provider<short, HandleItem>.ProviderDictionaryRemoved(provider_DictionaryRemoved);
|
||||
_provider.DictionaryAdded -= new HandleProvider.ProviderDictionaryAdded(provider_DictionaryAdded);
|
||||
_provider.DictionaryRemoved -= new HandleProvider.ProviderDictionaryRemoved(provider_DictionaryRemoved);
|
||||
}
|
||||
|
||||
_provider = value;
|
||||
@@ -138,9 +138,9 @@ namespace ProcessHacker
|
||||
}
|
||||
|
||||
_provider.UseInvoke = true;
|
||||
_provider.Invoke = new Provider<short, HandleItem>.ProviderInvokeMethod(this.BeginInvoke);
|
||||
_provider.DictionaryAdded += new Provider<short, HandleItem>.ProviderDictionaryAdded(provider_DictionaryAdded);
|
||||
_provider.DictionaryRemoved += new Provider<short, HandleItem>.ProviderDictionaryRemoved(provider_DictionaryRemoved);
|
||||
_provider.Invoke = new HandleProvider.ProviderInvokeMethod(this.BeginInvoke);
|
||||
_provider.DictionaryAdded += new HandleProvider.ProviderDictionaryAdded(provider_DictionaryAdded);
|
||||
_provider.DictionaryRemoved += new HandleProvider.ProviderDictionaryRemoved(provider_DictionaryRemoved);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+107
@@ -0,0 +1,107 @@
|
||||
namespace ProcessHacker
|
||||
{
|
||||
partial class ModuleList
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Component Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
this.listModules = new System.Windows.Forms.ListView();
|
||||
this.columnName = new System.Windows.Forms.ColumnHeader();
|
||||
this.columnBaseAddress = new System.Windows.Forms.ColumnHeader();
|
||||
this.columnSize = new System.Windows.Forms.ColumnHeader();
|
||||
this.columnDesc = new System.Windows.Forms.ColumnHeader();
|
||||
this.vistaMenu = new wyDay.Controls.VistaMenu(this.components);
|
||||
((System.ComponentModel.ISupportInitialize)(this.vistaMenu)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// listModules
|
||||
//
|
||||
this.listModules.AllowColumnReorder = true;
|
||||
this.listModules.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
||||
this.columnName,
|
||||
this.columnBaseAddress,
|
||||
this.columnSize,
|
||||
this.columnDesc});
|
||||
this.listModules.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.listModules.FullRowSelect = true;
|
||||
this.listModules.HideSelection = false;
|
||||
this.listModules.Location = new System.Drawing.Point(0, 0);
|
||||
this.listModules.Name = "listModules";
|
||||
this.listModules.ShowItemToolTips = true;
|
||||
this.listModules.Size = new System.Drawing.Size(450, 472);
|
||||
this.listModules.Sorting = System.Windows.Forms.SortOrder.Ascending;
|
||||
this.listModules.TabIndex = 3;
|
||||
this.listModules.UseCompatibleStateImageBehavior = false;
|
||||
this.listModules.View = System.Windows.Forms.View.Details;
|
||||
//
|
||||
// columnName
|
||||
//
|
||||
this.columnName.Text = "Name";
|
||||
this.columnName.Width = 100;
|
||||
//
|
||||
// columnBaseAddress
|
||||
//
|
||||
this.columnBaseAddress.Text = "Base Address";
|
||||
this.columnBaseAddress.Width = 80;
|
||||
//
|
||||
// columnSize
|
||||
//
|
||||
this.columnSize.Text = "Size";
|
||||
this.columnSize.Width = 70;
|
||||
//
|
||||
// columnDesc
|
||||
//
|
||||
this.columnDesc.Text = "Description";
|
||||
this.columnDesc.Width = 200;
|
||||
//
|
||||
// vistaMenu
|
||||
//
|
||||
this.vistaMenu.ContainerControl = this;
|
||||
//
|
||||
// ModuleList
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.listModules);
|
||||
this.DoubleBuffered = true;
|
||||
this.Name = "ModuleList";
|
||||
this.Size = new System.Drawing.Size(450, 472);
|
||||
((System.ComponentModel.ISupportInitialize)(this.vistaMenu)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.ListView listModules;
|
||||
private System.Windows.Forms.ColumnHeader columnBaseAddress;
|
||||
private System.Windows.Forms.ColumnHeader columnName;
|
||||
private System.Windows.Forms.ColumnHeader columnSize;
|
||||
private System.Windows.Forms.ColumnHeader columnDesc;
|
||||
private wyDay.Controls.VistaMenu vistaMenu;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,197 @@
|
||||
/*
|
||||
* Process Hacker
|
||||
*
|
||||
* Copyright (C) 2008 wj32
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using System.Windows.Forms;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace ProcessHacker
|
||||
{
|
||||
public partial class ModuleList : UserControl
|
||||
{
|
||||
ModuleProvider _provider;
|
||||
public new event KeyEventHandler KeyDown;
|
||||
public new event MouseEventHandler MouseDown;
|
||||
public new event MouseEventHandler MouseUp;
|
||||
public new event EventHandler DoubleClick;
|
||||
public event EventHandler SelectedIndexChanged;
|
||||
|
||||
public ModuleList()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
listModules.KeyDown += new KeyEventHandler(ModuleList_KeyDown);
|
||||
listModules.MouseDown += new MouseEventHandler(listModules_MouseDown);
|
||||
listModules.MouseUp += new MouseEventHandler(listModules_MouseUp);
|
||||
listModules.DoubleClick += new EventHandler(listModules_DoubleClick);
|
||||
listModules.SelectedIndexChanged += new System.EventHandler(listModules_SelectedIndexChanged);
|
||||
}
|
||||
|
||||
private void listModules_DoubleClick(object sender, EventArgs e)
|
||||
{
|
||||
if (this.DoubleClick != null)
|
||||
this.DoubleClick(sender, e);
|
||||
}
|
||||
|
||||
private void listModules_MouseUp(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (this.MouseUp != null)
|
||||
this.MouseUp(sender, e);
|
||||
}
|
||||
|
||||
private void listModules_MouseDown(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (this.MouseDown != null)
|
||||
this.MouseDown(sender, e);
|
||||
}
|
||||
|
||||
private void listModules_SelectedIndexChanged(object sender, System.EventArgs e)
|
||||
{
|
||||
if (this.SelectedIndexChanged != null)
|
||||
this.SelectedIndexChanged(sender, e);
|
||||
}
|
||||
|
||||
private void ModuleList_KeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
if (this.KeyDown != null)
|
||||
this.KeyDown(sender, e);
|
||||
}
|
||||
|
||||
#region Properties
|
||||
|
||||
public new bool DoubleBuffered
|
||||
{
|
||||
get
|
||||
{
|
||||
return (bool)typeof(ListView).GetProperty("DoubleBuffered",
|
||||
BindingFlags.NonPublic | BindingFlags.Instance).GetValue(listModules, null);
|
||||
}
|
||||
set
|
||||
{
|
||||
typeof(ListView).GetProperty("DoubleBuffered",
|
||||
BindingFlags.NonPublic | BindingFlags.Instance).SetValue(listModules, value, null);
|
||||
}
|
||||
}
|
||||
|
||||
public override bool Focused
|
||||
{
|
||||
get
|
||||
{
|
||||
return listModules.Focused;
|
||||
}
|
||||
}
|
||||
|
||||
public override ContextMenu ContextMenu
|
||||
{
|
||||
get { return listModules.ContextMenu; }
|
||||
set { listModules.ContextMenu = value; }
|
||||
}
|
||||
|
||||
public override ContextMenuStrip ContextMenuStrip
|
||||
{
|
||||
get { return listModules.ContextMenuStrip; }
|
||||
set { listModules.ContextMenuStrip = value; }
|
||||
}
|
||||
|
||||
public ListView List
|
||||
{
|
||||
get { return listModules; }
|
||||
}
|
||||
|
||||
public ModuleProvider Provider
|
||||
{
|
||||
get { return _provider; }
|
||||
set
|
||||
{
|
||||
if (_provider != null)
|
||||
{
|
||||
_provider.DictionaryAdded -= new ModuleProvider.ProviderDictionaryAdded(provider_DictionaryAdded);
|
||||
_provider.DictionaryRemoved -= new ModuleProvider.ProviderDictionaryRemoved(provider_DictionaryRemoved);
|
||||
}
|
||||
|
||||
_provider = value;
|
||||
|
||||
listModules.Items.Clear();
|
||||
|
||||
if (_provider != null)
|
||||
{
|
||||
foreach (ModuleItem item in _provider.Dictionary.Values)
|
||||
{
|
||||
provider_DictionaryAdded(item);
|
||||
}
|
||||
|
||||
_provider.UseInvoke = true;
|
||||
_provider.Invoke = new ModuleProvider.ProviderInvokeMethod(this.BeginInvoke);
|
||||
_provider.DictionaryAdded += new ModuleProvider.ProviderDictionaryAdded(provider_DictionaryAdded);
|
||||
_provider.DictionaryRemoved += new ModuleProvider.ProviderDictionaryRemoved(provider_DictionaryRemoved);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Core Module List
|
||||
|
||||
private void provider_DictionaryAdded(ModuleItem item)
|
||||
{
|
||||
HighlightedListViewItem litem = new HighlightedListViewItem();
|
||||
|
||||
litem.Name = item.BaseAddress.ToString();
|
||||
litem.Text = item.Name;
|
||||
litem.SubItems.Add(new ListViewItem.ListViewSubItem(litem, "0x" + item.BaseAddress.ToString("x8")));
|
||||
litem.SubItems.Add(new ListViewItem.ListViewSubItem(litem, Misc.GetNiceSizeName(item.Size)));
|
||||
litem.SubItems.Add(new ListViewItem.ListViewSubItem(litem, item.FileDescription));
|
||||
litem.ToolTipText = item.FileName;
|
||||
|
||||
listModules.Items.Add(litem);
|
||||
}
|
||||
|
||||
private void provider_DictionaryRemoved(ModuleItem item)
|
||||
{
|
||||
listModules.Items[item.BaseAddress.ToString()].Remove();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Interfacing
|
||||
|
||||
public void BeginUpdate()
|
||||
{
|
||||
listModules.BeginUpdate();
|
||||
}
|
||||
|
||||
public void EndUpdate()
|
||||
{
|
||||
listModules.EndUpdate();
|
||||
}
|
||||
|
||||
public ListView.ListViewItemCollection Items
|
||||
{
|
||||
get { return listModules.Items; }
|
||||
}
|
||||
|
||||
public ListView.SelectedListViewItemCollection SelectedItems
|
||||
{
|
||||
get { return listModules.SelectedItems; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,123 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="vistaMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
</root>
|
||||
@@ -129,9 +129,9 @@ namespace ProcessHacker
|
||||
{
|
||||
if (_provider != null)
|
||||
{
|
||||
_provider.DictionaryAdded -= new Provider<int, ProcessItem>.ProviderDictionaryAdded(provider_DictionaryAdded);
|
||||
_provider.DictionaryModified -= new Provider<int, ProcessItem>.ProviderDictionaryModified(provider_DictionaryModified);
|
||||
_provider.DictionaryRemoved -= new Provider<int, ProcessItem>.ProviderDictionaryRemoved(provider_DictionaryRemoved);
|
||||
_provider.DictionaryAdded -= new ProcessProvider.ProviderDictionaryAdded(provider_DictionaryAdded);
|
||||
_provider.DictionaryModified -= new ProcessProvider.ProviderDictionaryModified(provider_DictionaryModified);
|
||||
_provider.DictionaryRemoved -= new ProcessProvider.ProviderDictionaryRemoved(provider_DictionaryRemoved);
|
||||
}
|
||||
|
||||
_provider = value;
|
||||
@@ -146,10 +146,10 @@ namespace ProcessHacker
|
||||
}
|
||||
|
||||
_provider.UseInvoke = true;
|
||||
_provider.Invoke = new Provider<int, ProcessItem>.ProviderInvokeMethod(this.BeginInvoke);
|
||||
_provider.DictionaryAdded += new Provider<int, ProcessItem>.ProviderDictionaryAdded(provider_DictionaryAdded);
|
||||
_provider.DictionaryModified += new Provider<int, ProcessItem>.ProviderDictionaryModified(provider_DictionaryModified);
|
||||
_provider.DictionaryRemoved += new Provider<int, ProcessItem>.ProviderDictionaryRemoved(provider_DictionaryRemoved);
|
||||
_provider.Invoke = new ProcessProvider.ProviderInvokeMethod(this.BeginInvoke);
|
||||
_provider.DictionaryAdded += new ProcessProvider.ProviderDictionaryAdded(provider_DictionaryAdded);
|
||||
_provider.DictionaryModified += new ProcessProvider.ProviderDictionaryModified(provider_DictionaryModified);
|
||||
_provider.DictionaryRemoved += new ProcessProvider.ProviderDictionaryRemoved(provider_DictionaryRemoved);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -123,9 +123,9 @@ namespace ProcessHacker
|
||||
{
|
||||
if (_provider != null)
|
||||
{
|
||||
_provider.DictionaryAdded -= new Provider<string, ServiceItem>.ProviderDictionaryAdded(provider_DictionaryAdded);
|
||||
_provider.DictionaryModified -= new Provider<string, ServiceItem>.ProviderDictionaryModified(provider_DictionaryModified);
|
||||
_provider.DictionaryRemoved -= new Provider<string, ServiceItem>.ProviderDictionaryRemoved(provider_DictionaryRemoved);
|
||||
_provider.DictionaryAdded -= new ServiceProvider.ProviderDictionaryAdded(provider_DictionaryAdded);
|
||||
_provider.DictionaryModified -= new ServiceProvider.ProviderDictionaryModified(provider_DictionaryModified);
|
||||
_provider.DictionaryRemoved -= new ServiceProvider.ProviderDictionaryRemoved(provider_DictionaryRemoved);
|
||||
}
|
||||
|
||||
_provider = value;
|
||||
@@ -140,10 +140,10 @@ namespace ProcessHacker
|
||||
}
|
||||
|
||||
_provider.UseInvoke = true;
|
||||
_provider.Invoke = new Provider<string, ServiceItem>.ProviderInvokeMethod(this.BeginInvoke);
|
||||
_provider.DictionaryAdded += new Provider<string, ServiceItem>.ProviderDictionaryAdded(provider_DictionaryAdded);
|
||||
_provider.DictionaryModified += new Provider<string, ServiceItem>.ProviderDictionaryModified(provider_DictionaryModified);
|
||||
_provider.DictionaryRemoved += new Provider<string, ServiceItem>.ProviderDictionaryRemoved(provider_DictionaryRemoved);
|
||||
_provider.Invoke = new ServiceProvider.ProviderInvokeMethod(this.BeginInvoke);
|
||||
_provider.DictionaryAdded += new ServiceProvider.ProviderDictionaryAdded(provider_DictionaryAdded);
|
||||
_provider.DictionaryModified += new ServiceProvider.ProviderDictionaryModified(provider_DictionaryModified);
|
||||
_provider.DictionaryRemoved += new ServiceProvider.ProviderDictionaryRemoved(provider_DictionaryRemoved);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,6 +42,7 @@ namespace ProcessHacker
|
||||
listThreads.SelectedIndexChanged += new System.EventHandler(listThreads_SelectedIndexChanged);
|
||||
|
||||
listThreads.ContextMenu = menuThread;
|
||||
GenericViewMenu.AddMenuItems(copyThreadMenuItem.MenuItems, listThreads, null);
|
||||
}
|
||||
|
||||
private void listThreads_MouseUp(object sender, MouseEventArgs e)
|
||||
@@ -119,9 +120,9 @@ namespace ProcessHacker
|
||||
|
||||
if (_provider != null)
|
||||
{
|
||||
_provider.DictionaryAdded -= new Provider<int, ThreadItem>.ProviderDictionaryAdded(provider_DictionaryAdded);
|
||||
_provider.DictionaryModified -= new Provider<int, ThreadItem>.ProviderDictionaryModified(provider_DictionaryModified);
|
||||
_provider.DictionaryRemoved -= new Provider<int, ThreadItem>.ProviderDictionaryRemoved(provider_DictionaryRemoved);
|
||||
_provider.DictionaryAdded -= new ThreadProvider.ProviderDictionaryAdded(provider_DictionaryAdded);
|
||||
_provider.DictionaryModified -= new ThreadProvider.ProviderDictionaryModified(provider_DictionaryModified);
|
||||
_provider.DictionaryRemoved -= new ThreadProvider.ProviderDictionaryRemoved(provider_DictionaryRemoved);
|
||||
}
|
||||
|
||||
_provider = value;
|
||||
@@ -136,10 +137,10 @@ namespace ProcessHacker
|
||||
}
|
||||
|
||||
_provider.UseInvoke = true;
|
||||
_provider.Invoke = new Provider<int, ThreadItem>.ProviderInvokeMethod(this.BeginInvoke);
|
||||
_provider.DictionaryAdded += new Provider<int, ThreadItem>.ProviderDictionaryAdded(provider_DictionaryAdded);
|
||||
_provider.DictionaryModified += new Provider<int, ThreadItem>.ProviderDictionaryModified(provider_DictionaryModified);
|
||||
_provider.DictionaryRemoved += new Provider<int, ThreadItem>.ProviderDictionaryRemoved(provider_DictionaryRemoved);
|
||||
_provider.Invoke = new ThreadProvider.ProviderInvokeMethod(this.BeginInvoke);
|
||||
_provider.DictionaryAdded += new ThreadProvider.ProviderDictionaryAdded(provider_DictionaryAdded);
|
||||
_provider.DictionaryModified += new ThreadProvider.ProviderDictionaryModified(provider_DictionaryModified);
|
||||
_provider.DictionaryRemoved += new ThreadProvider.ProviderDictionaryRemoved(provider_DictionaryRemoved);
|
||||
|
||||
_pid = _provider.PID;
|
||||
_process = Process.GetProcessById(_pid);
|
||||
|
||||
@@ -63,7 +63,7 @@ namespace ProcessHacker
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
textUser.Text = ex.Message;
|
||||
textUser.Text = "(" + ex.Message + ")";
|
||||
}
|
||||
|
||||
try
|
||||
@@ -72,17 +72,24 @@ namespace ProcessHacker
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
textSessionID.Text = ex.Message;
|
||||
textSessionID.Text = "(" + ex.Message + ")";
|
||||
}
|
||||
|
||||
Win32.TOKEN_ELEVATION_TYPE type = token.GetElevationType();
|
||||
try
|
||||
{
|
||||
Win32.TOKEN_ELEVATION_TYPE type = token.GetElevationType();
|
||||
|
||||
if (type == Win32.TOKEN_ELEVATION_TYPE.TokenElevationTypeDefault)
|
||||
textElevated.Text = "N/A";
|
||||
else if (type == Win32.TOKEN_ELEVATION_TYPE.TokenElevationTypeFull)
|
||||
textElevated.Text = "True";
|
||||
else if (type == Win32.TOKEN_ELEVATION_TYPE.TokenElevationTypeLimited)
|
||||
textElevated.Text = "False";
|
||||
if (type == Win32.TOKEN_ELEVATION_TYPE.TokenElevationTypeDefault)
|
||||
textElevated.Text = "N/A";
|
||||
else if (type == Win32.TOKEN_ELEVATION_TYPE.TokenElevationTypeFull)
|
||||
textElevated.Text = "True";
|
||||
else if (type == Win32.TOKEN_ELEVATION_TYPE.TokenElevationTypeLimited)
|
||||
textElevated.Text = "False";
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
textElevated.Text = "(" + ex.Message + ")";
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
@@ -109,7 +116,7 @@ namespace ProcessHacker
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
textVirtualized.Text = ex.Message;
|
||||
textVirtualized.Text = "(" + ex.Message + ")";
|
||||
}
|
||||
|
||||
try
|
||||
@@ -127,7 +134,7 @@ namespace ProcessHacker
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
textSourceName.Text = ex.Message;
|
||||
textSourceName.Text = "(" + ex.Message + ")";
|
||||
}
|
||||
|
||||
try
|
||||
|
||||
+71
-71
@@ -49,7 +49,6 @@
|
||||
this.suspendMenuItem = new System.Windows.Forms.MenuItem();
|
||||
this.resumeMenuItem = new System.Windows.Forms.MenuItem();
|
||||
this.menuItem5 = new System.Windows.Forms.MenuItem();
|
||||
this.propertiesProcessMenuItem = new System.Windows.Forms.MenuItem();
|
||||
this.affinityProcessMenuItem = new System.Windows.Forms.MenuItem();
|
||||
this.servicesProcessMenuItem = new System.Windows.Forms.MenuItem();
|
||||
this.terminatorProcessMenuItem = new System.Windows.Forms.MenuItem();
|
||||
@@ -63,6 +62,7 @@
|
||||
this.runAsProcessMenuItem = new System.Windows.Forms.MenuItem();
|
||||
this.launchAsUserProcessMenuItem = new System.Windows.Forms.MenuItem();
|
||||
this.launchAsThisUserProcessMenuItem = new System.Windows.Forms.MenuItem();
|
||||
this.propertiesProcessMenuItem = new System.Windows.Forms.MenuItem();
|
||||
this.menuItem7 = new System.Windows.Forms.MenuItem();
|
||||
this.searchProcessMenuItem = new System.Windows.Forms.MenuItem();
|
||||
this.copyProcessMenuItem = new System.Windows.Forms.MenuItem();
|
||||
@@ -125,9 +125,11 @@
|
||||
this.tabControlBig = new System.Windows.Forms.TabControl();
|
||||
this.tabProcesses = new System.Windows.Forms.TabPage();
|
||||
this.splitMain = new System.Windows.Forms.SplitContainer();
|
||||
this.treeProcesses = new ProcessHacker.ProcessTree();
|
||||
this.tabControl = new System.Windows.Forms.TabControl();
|
||||
this.tabProcess = new System.Windows.Forms.TabPage();
|
||||
this.groupSearch = new System.Windows.Forms.GroupBox();
|
||||
this.buttonSearch = new wyDay.Controls.SplitButton();
|
||||
this.treeMisc = new System.Windows.Forms.TreeView();
|
||||
this.tabThreads = new System.Windows.Forms.TabPage();
|
||||
this.tabModules = new System.Windows.Forms.TabPage();
|
||||
@@ -144,7 +146,9 @@
|
||||
this.columnHeader4 = new System.Windows.Forms.ColumnHeader();
|
||||
this.columnHeader5 = new System.Windows.Forms.ColumnHeader();
|
||||
this.tabHandles = new System.Windows.Forms.TabPage();
|
||||
this.listHandles = new ProcessHacker.HandleList();
|
||||
this.tabServices = new System.Windows.Forms.TabPage();
|
||||
this.listServices = new ProcessHacker.ServiceList();
|
||||
this.menuService = new System.Windows.Forms.ContextMenu();
|
||||
this.goToProcessServiceMenuItem = new System.Windows.Forms.MenuItem();
|
||||
this.startServiceMenuItem = new System.Windows.Forms.MenuItem();
|
||||
@@ -174,10 +178,6 @@
|
||||
this.propertiesHandleMenuItem = new System.Windows.Forms.MenuItem();
|
||||
this.menuMisc = new System.Windows.Forms.ContextMenu();
|
||||
this.copyMiscMenuItem = new System.Windows.Forms.MenuItem();
|
||||
this.treeProcesses = new ProcessHacker.ProcessTree();
|
||||
this.buttonSearch = new wyDay.Controls.SplitButton();
|
||||
this.listHandles = new ProcessHacker.HandleList();
|
||||
this.listServices = new ProcessHacker.ServiceList();
|
||||
this.vistaMenu = new wyDay.Controls.VistaMenu(this.components);
|
||||
this.panelProc.SuspendLayout();
|
||||
this.panelVirtualProtect.SuspendLayout();
|
||||
@@ -384,13 +384,6 @@
|
||||
this.menuItem5.Index = 3;
|
||||
this.menuItem5.Text = "-";
|
||||
//
|
||||
// propertiesProcessMenuItem
|
||||
//
|
||||
this.vistaMenu.SetImage(this.propertiesProcessMenuItem, global::ProcessHacker.Properties.Resources.application_form_magnify);
|
||||
this.propertiesProcessMenuItem.Index = 9;
|
||||
this.propertiesProcessMenuItem.Text = "&Properties...";
|
||||
this.propertiesProcessMenuItem.Click += new System.EventHandler(this.inspectProcessMenuItem_Click);
|
||||
//
|
||||
// affinityProcessMenuItem
|
||||
//
|
||||
this.affinityProcessMenuItem.Index = 4;
|
||||
@@ -485,6 +478,13 @@
|
||||
this.launchAsThisUserProcessMenuItem.Text = "Launch As This User...";
|
||||
this.launchAsThisUserProcessMenuItem.Click += new System.EventHandler(this.launchAsThisUserProcessMenuItem_Click);
|
||||
//
|
||||
// propertiesProcessMenuItem
|
||||
//
|
||||
this.vistaMenu.SetImage(this.propertiesProcessMenuItem, global::ProcessHacker.Properties.Resources.application_form_magnify);
|
||||
this.propertiesProcessMenuItem.Index = 9;
|
||||
this.propertiesProcessMenuItem.Text = "&Properties...";
|
||||
this.propertiesProcessMenuItem.Click += new System.EventHandler(this.inspectProcessMenuItem_Click);
|
||||
//
|
||||
// menuItem7
|
||||
//
|
||||
this.menuItem7.Index = 10;
|
||||
@@ -854,7 +854,7 @@
|
||||
//
|
||||
// statusBar
|
||||
//
|
||||
this.statusBar.Location = new System.Drawing.Point(0, 353);
|
||||
this.statusBar.Location = new System.Drawing.Point(0, 426);
|
||||
this.statusBar.Name = "statusBar";
|
||||
this.statusBar.Panels.AddRange(new System.Windows.Forms.StatusBarPanel[] {
|
||||
this.statusGeneral,
|
||||
@@ -898,7 +898,7 @@
|
||||
this.tabControlBig.Location = new System.Drawing.Point(0, 0);
|
||||
this.tabControlBig.Name = "tabControlBig";
|
||||
this.tabControlBig.SelectedIndex = 0;
|
||||
this.tabControlBig.Size = new System.Drawing.Size(804, 353);
|
||||
this.tabControlBig.Size = new System.Drawing.Size(804, 426);
|
||||
this.tabControlBig.TabIndex = 6;
|
||||
//
|
||||
// tabProcesses
|
||||
@@ -907,7 +907,7 @@
|
||||
this.tabProcesses.Location = new System.Drawing.Point(4, 22);
|
||||
this.tabProcesses.Name = "tabProcesses";
|
||||
this.tabProcesses.Padding = new System.Windows.Forms.Padding(3);
|
||||
this.tabProcesses.Size = new System.Drawing.Size(796, 327);
|
||||
this.tabProcesses.Size = new System.Drawing.Size(796, 400);
|
||||
this.tabProcesses.TabIndex = 0;
|
||||
this.tabProcesses.Text = "Processes";
|
||||
this.tabProcesses.UseVisualStyleBackColor = true;
|
||||
@@ -926,10 +926,21 @@
|
||||
// splitMain.Panel2
|
||||
//
|
||||
this.splitMain.Panel2.Controls.Add(this.tabControl);
|
||||
this.splitMain.Size = new System.Drawing.Size(790, 321);
|
||||
this.splitMain.Size = new System.Drawing.Size(790, 394);
|
||||
this.splitMain.SplitterDistance = 348;
|
||||
this.splitMain.TabIndex = 3;
|
||||
//
|
||||
// treeProcesses
|
||||
//
|
||||
this.treeProcesses.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.treeProcesses.Location = new System.Drawing.Point(0, 0);
|
||||
this.treeProcesses.Name = "treeProcesses";
|
||||
this.treeProcesses.Provider = null;
|
||||
this.treeProcesses.Size = new System.Drawing.Size(348, 393);
|
||||
this.treeProcesses.TabIndex = 4;
|
||||
this.treeProcesses.SelectionChanged += new System.EventHandler(this.listProcesses_SelectionChanged);
|
||||
this.treeProcesses.KeyDown += new System.Windows.Forms.KeyEventHandler(this.listProcesses_KeyDown);
|
||||
//
|
||||
// tabControl
|
||||
//
|
||||
this.tabControl.Controls.Add(this.tabProcess);
|
||||
@@ -941,7 +952,7 @@
|
||||
this.tabControl.Location = new System.Drawing.Point(0, 0);
|
||||
this.tabControl.Name = "tabControl";
|
||||
this.tabControl.SelectedIndex = 0;
|
||||
this.tabControl.Size = new System.Drawing.Size(438, 321);
|
||||
this.tabControl.Size = new System.Drawing.Size(438, 394);
|
||||
this.tabControl.TabIndex = 5;
|
||||
this.tabControl.SelectedIndexChanged += new System.EventHandler(this.tabControl_SelectedIndexChanged);
|
||||
//
|
||||
@@ -952,7 +963,7 @@
|
||||
this.tabProcess.Location = new System.Drawing.Point(4, 22);
|
||||
this.tabProcess.Name = "tabProcess";
|
||||
this.tabProcess.Padding = new System.Windows.Forms.Padding(3);
|
||||
this.tabProcess.Size = new System.Drawing.Size(430, 295);
|
||||
this.tabProcess.Size = new System.Drawing.Size(430, 368);
|
||||
this.tabProcess.TabIndex = 4;
|
||||
this.tabProcess.Text = "Process";
|
||||
this.tabProcess.UseVisualStyleBackColor = true;
|
||||
@@ -969,6 +980,18 @@
|
||||
this.groupSearch.TabStop = false;
|
||||
this.groupSearch.Text = "Search";
|
||||
//
|
||||
// buttonSearch
|
||||
//
|
||||
this.buttonSearch.AutoSize = true;
|
||||
this.buttonSearch.Location = new System.Drawing.Point(6, 18);
|
||||
this.buttonSearch.Name = "buttonSearch";
|
||||
this.buttonSearch.Size = new System.Drawing.Size(111, 23);
|
||||
this.buttonSearch.SplitMenu = this.menuSearch;
|
||||
this.buttonSearch.TabIndex = 3;
|
||||
this.buttonSearch.Text = "Search button";
|
||||
this.buttonSearch.UseVisualStyleBackColor = true;
|
||||
this.buttonSearch.Click += new System.EventHandler(this.buttonSearch_Click);
|
||||
//
|
||||
// treeMisc
|
||||
//
|
||||
this.treeMisc.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
@@ -979,7 +1002,7 @@
|
||||
this.treeMisc.Location = new System.Drawing.Point(6, 59);
|
||||
this.treeMisc.Name = "treeMisc";
|
||||
this.treeMisc.ShowNodeToolTips = true;
|
||||
this.treeMisc.Size = new System.Drawing.Size(418, 229);
|
||||
this.treeMisc.Size = new System.Drawing.Size(418, 303);
|
||||
this.treeMisc.TabIndex = 1;
|
||||
//
|
||||
// tabThreads
|
||||
@@ -987,7 +1010,7 @@
|
||||
this.tabThreads.Location = new System.Drawing.Point(4, 22);
|
||||
this.tabThreads.Name = "tabThreads";
|
||||
this.tabThreads.Padding = new System.Windows.Forms.Padding(3);
|
||||
this.tabThreads.Size = new System.Drawing.Size(430, 316);
|
||||
this.tabThreads.Size = new System.Drawing.Size(430, 0);
|
||||
this.tabThreads.TabIndex = 6;
|
||||
this.tabThreads.Text = "Threads";
|
||||
this.tabThreads.UseVisualStyleBackColor = true;
|
||||
@@ -998,7 +1021,7 @@
|
||||
this.tabModules.Location = new System.Drawing.Point(4, 22);
|
||||
this.tabModules.Name = "tabModules";
|
||||
this.tabModules.Padding = new System.Windows.Forms.Padding(3);
|
||||
this.tabModules.Size = new System.Drawing.Size(430, 316);
|
||||
this.tabModules.Size = new System.Drawing.Size(430, 368);
|
||||
this.tabModules.TabIndex = 0;
|
||||
this.tabModules.Text = "Modules";
|
||||
this.tabModules.UseVisualStyleBackColor = true;
|
||||
@@ -1017,7 +1040,7 @@
|
||||
this.listModules.Location = new System.Drawing.Point(3, 3);
|
||||
this.listModules.Name = "listModules";
|
||||
this.listModules.ShowItemToolTips = true;
|
||||
this.listModules.Size = new System.Drawing.Size(424, 310);
|
||||
this.listModules.Size = new System.Drawing.Size(424, 362);
|
||||
this.listModules.TabIndex = 1;
|
||||
this.listModules.UseCompatibleStateImageBehavior = false;
|
||||
this.listModules.View = System.Windows.Forms.View.Details;
|
||||
@@ -1049,7 +1072,7 @@
|
||||
this.tabMemory.Location = new System.Drawing.Point(4, 22);
|
||||
this.tabMemory.Name = "tabMemory";
|
||||
this.tabMemory.Padding = new System.Windows.Forms.Padding(3);
|
||||
this.tabMemory.Size = new System.Drawing.Size(430, 316);
|
||||
this.tabMemory.Size = new System.Drawing.Size(430, 368);
|
||||
this.tabMemory.TabIndex = 1;
|
||||
this.tabMemory.Text = "Memory";
|
||||
this.tabMemory.UseVisualStyleBackColor = true;
|
||||
@@ -1069,7 +1092,7 @@
|
||||
this.listMemory.Location = new System.Drawing.Point(3, 3);
|
||||
this.listMemory.Name = "listMemory";
|
||||
this.listMemory.ShowItemToolTips = true;
|
||||
this.listMemory.Size = new System.Drawing.Size(424, 310);
|
||||
this.listMemory.Size = new System.Drawing.Size(424, 362);
|
||||
this.listMemory.TabIndex = 2;
|
||||
this.listMemory.UseCompatibleStateImageBehavior = false;
|
||||
this.listMemory.View = System.Windows.Forms.View.Details;
|
||||
@@ -1106,22 +1129,43 @@
|
||||
this.tabHandles.Location = new System.Drawing.Point(4, 22);
|
||||
this.tabHandles.Name = "tabHandles";
|
||||
this.tabHandles.Padding = new System.Windows.Forms.Padding(3);
|
||||
this.tabHandles.Size = new System.Drawing.Size(430, 316);
|
||||
this.tabHandles.Size = new System.Drawing.Size(430, 368);
|
||||
this.tabHandles.TabIndex = 7;
|
||||
this.tabHandles.Text = "Handles";
|
||||
this.tabHandles.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// listHandles
|
||||
//
|
||||
this.listHandles.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.listHandles.DoubleBuffered = true;
|
||||
this.listHandles.Location = new System.Drawing.Point(3, 3);
|
||||
this.listHandles.Name = "listHandles";
|
||||
this.listHandles.Provider = null;
|
||||
this.listHandles.Size = new System.Drawing.Size(424, 362);
|
||||
this.listHandles.TabIndex = 0;
|
||||
//
|
||||
// tabServices
|
||||
//
|
||||
this.tabServices.Controls.Add(this.listServices);
|
||||
this.tabServices.Location = new System.Drawing.Point(4, 22);
|
||||
this.tabServices.Name = "tabServices";
|
||||
this.tabServices.Padding = new System.Windows.Forms.Padding(3);
|
||||
this.tabServices.Size = new System.Drawing.Size(796, 348);
|
||||
this.tabServices.Size = new System.Drawing.Size(796, 0);
|
||||
this.tabServices.TabIndex = 1;
|
||||
this.tabServices.Text = "Services";
|
||||
this.tabServices.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// listServices
|
||||
//
|
||||
this.listServices.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.listServices.DoubleBuffered = true;
|
||||
this.listServices.Location = new System.Drawing.Point(3, 3);
|
||||
this.listServices.Name = "listServices";
|
||||
this.listServices.Provider = null;
|
||||
this.listServices.Size = new System.Drawing.Size(790, 0);
|
||||
this.listServices.TabIndex = 0;
|
||||
this.listServices.DoubleClick += new System.EventHandler(this.listServices_DoubleClick);
|
||||
//
|
||||
// menuService
|
||||
//
|
||||
this.menuService.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
|
||||
@@ -1318,50 +1362,6 @@
|
||||
this.copyMiscMenuItem.Text = "&Copy";
|
||||
this.copyMiscMenuItem.Click += new System.EventHandler(this.copyMiscMenuItem_Click);
|
||||
//
|
||||
// treeProcesses
|
||||
//
|
||||
this.treeProcesses.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.treeProcesses.Location = new System.Drawing.Point(0, 0);
|
||||
this.treeProcesses.Name = "treeProcesses";
|
||||
this.treeProcesses.Provider = null;
|
||||
this.treeProcesses.Size = new System.Drawing.Size(348, 320);
|
||||
this.treeProcesses.TabIndex = 4;
|
||||
this.treeProcesses.SelectionChanged += new System.EventHandler(this.listProcesses_SelectionChanged);
|
||||
this.treeProcesses.KeyDown += new System.Windows.Forms.KeyEventHandler(this.listProcesses_KeyDown);
|
||||
//
|
||||
// buttonSearch
|
||||
//
|
||||
this.buttonSearch.AutoSize = true;
|
||||
this.buttonSearch.Location = new System.Drawing.Point(6, 18);
|
||||
this.buttonSearch.Name = "buttonSearch";
|
||||
this.buttonSearch.Size = new System.Drawing.Size(111, 23);
|
||||
this.buttonSearch.SplitMenu = this.menuSearch;
|
||||
this.buttonSearch.TabIndex = 3;
|
||||
this.buttonSearch.Text = "Search button";
|
||||
this.buttonSearch.UseVisualStyleBackColor = true;
|
||||
this.buttonSearch.Click += new System.EventHandler(this.buttonSearch_Click);
|
||||
//
|
||||
// listHandles
|
||||
//
|
||||
this.listHandles.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.listHandles.DoubleBuffered = true;
|
||||
this.listHandles.Location = new System.Drawing.Point(3, 3);
|
||||
this.listHandles.Name = "listHandles";
|
||||
this.listHandles.Provider = null;
|
||||
this.listHandles.Size = new System.Drawing.Size(424, 310);
|
||||
this.listHandles.TabIndex = 0;
|
||||
//
|
||||
// listServices
|
||||
//
|
||||
this.listServices.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.listServices.DoubleBuffered = true;
|
||||
this.listServices.Location = new System.Drawing.Point(3, 3);
|
||||
this.listServices.Name = "listServices";
|
||||
this.listServices.Provider = null;
|
||||
this.listServices.Size = new System.Drawing.Size(790, 342);
|
||||
this.listServices.TabIndex = 0;
|
||||
this.listServices.DoubleClick += new System.EventHandler(this.listServices_DoubleClick);
|
||||
//
|
||||
// vistaMenu
|
||||
//
|
||||
this.vistaMenu.ContainerControl = this;
|
||||
@@ -1370,7 +1370,7 @@
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(804, 375);
|
||||
this.ClientSize = new System.Drawing.Size(804, 448);
|
||||
this.Controls.Add(this.tabControlBig);
|
||||
this.Controls.Add(this.statusBar);
|
||||
this.Controls.Add(this.panelVirtualProtect);
|
||||
|
||||
@@ -2808,10 +2808,10 @@ namespace ProcessHacker
|
||||
listServices.List.EndUpdate();
|
||||
HighlightedListViewItem.StateHighlighting = true;
|
||||
|
||||
serviceP.DictionaryAdded += new Provider<string, ServiceItem>.ProviderDictionaryAdded(serviceP_DictionaryAdded);
|
||||
serviceP.DictionaryModified += new Provider<string, ServiceItem>.ProviderDictionaryModified(serviceP_DictionaryModified);
|
||||
serviceP.DictionaryRemoved += new Provider<string, ServiceItem>.ProviderDictionaryRemoved(serviceP_DictionaryRemoved);
|
||||
serviceP.Updated -= new Provider<string, ServiceItem>.ProviderUpdateOnce(serviceP_Updated);
|
||||
serviceP.DictionaryAdded += new ServiceProvider.ProviderDictionaryAdded(serviceP_DictionaryAdded);
|
||||
serviceP.DictionaryModified += new ServiceProvider.ProviderDictionaryModified(serviceP_DictionaryModified);
|
||||
serviceP.DictionaryRemoved += new ServiceProvider.ProviderDictionaryRemoved(serviceP_DictionaryRemoved);
|
||||
serviceP.Updated -= new ServiceProvider.ProviderUpdateOnce(serviceP_Updated);
|
||||
|
||||
if (processP.RunCount >= 1)
|
||||
this.Invoke(new MethodInvoker(UpdateCommon));
|
||||
@@ -2819,9 +2819,9 @@ namespace ProcessHacker
|
||||
|
||||
private void processP_Updated()
|
||||
{
|
||||
processP.DictionaryAdded += new Provider<int, ProcessItem>.ProviderDictionaryAdded(processP_DictionaryAdded);
|
||||
processP.DictionaryRemoved += new Provider<int, ProcessItem>.ProviderDictionaryRemoved(processP_DictionaryRemoved);
|
||||
processP.Updated -= new Provider<int, ProcessItem>.ProviderUpdateOnce(processP_Updated);
|
||||
processP.DictionaryAdded += new ProcessProvider.ProviderDictionaryAdded(processP_DictionaryAdded);
|
||||
processP.DictionaryRemoved += new ProcessProvider.ProviderDictionaryRemoved(processP_DictionaryRemoved);
|
||||
processP.Updated -= new ProcessProvider.ProviderUpdateOnce(processP_Updated);
|
||||
|
||||
if (processP.RunCount >= 1)
|
||||
this.Invoke(new MethodInvoker(UpdateCommon));
|
||||
@@ -2870,7 +2870,7 @@ namespace ProcessHacker
|
||||
|
||||
processP.Interval = RefreshInterval;
|
||||
treeProcesses.Provider = processP;
|
||||
processP.Updated += new Provider<int, ProcessItem>.ProviderUpdateOnce(processP_Updated);
|
||||
processP.Updated += new ProcessProvider.ProviderUpdateOnce(processP_Updated);
|
||||
processP.Enabled = true;
|
||||
|
||||
HighlightedListViewItem.HighlightingDuration = Properties.Settings.Default.HighlightingDuration;
|
||||
@@ -2878,10 +2878,10 @@ namespace ProcessHacker
|
||||
listServices.List.BeginUpdate();
|
||||
serviceP.Interval = RefreshInterval;
|
||||
listServices.Provider = serviceP;
|
||||
serviceP.DictionaryAdded += new Provider<string, ServiceItem>.ProviderDictionaryAdded(serviceP_DictionaryAdded_Process);
|
||||
serviceP.DictionaryModified += new Provider<string, ServiceItem>.ProviderDictionaryModified(serviceP_DictionaryModified_Process);
|
||||
serviceP.DictionaryRemoved += new Provider<string, ServiceItem>.ProviderDictionaryRemoved(serviceP_DictionaryRemoved_Process);
|
||||
serviceP.Updated += new Provider<string, ServiceItem>.ProviderUpdateOnce(serviceP_Updated);
|
||||
serviceP.DictionaryAdded += new ServiceProvider.ProviderDictionaryAdded(serviceP_DictionaryAdded_Process);
|
||||
serviceP.DictionaryModified += new ServiceProvider.ProviderDictionaryModified(serviceP_DictionaryModified_Process);
|
||||
serviceP.DictionaryRemoved += new ServiceProvider.ProviderDictionaryRemoved(serviceP_DictionaryRemoved_Process);
|
||||
serviceP.Updated += new ServiceProvider.ProviderUpdateOnce(serviceP_Updated);
|
||||
serviceP.Enabled = true;
|
||||
|
||||
statusText.Text = "Waiting...";
|
||||
|
||||
+102
@@ -0,0 +1,102 @@
|
||||
namespace ProcessHacker
|
||||
{
|
||||
partial class ListWindow
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.buttonClose = new System.Windows.Forms.Button();
|
||||
this.listView = new System.Windows.Forms.ListView();
|
||||
this.columnName = new System.Windows.Forms.ColumnHeader();
|
||||
this.columnValue = new System.Windows.Forms.ColumnHeader();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// buttonClose
|
||||
//
|
||||
this.buttonClose.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.buttonClose.FlatStyle = System.Windows.Forms.FlatStyle.System;
|
||||
this.buttonClose.Location = new System.Drawing.Point(424, 275);
|
||||
this.buttonClose.Name = "buttonClose";
|
||||
this.buttonClose.Size = new System.Drawing.Size(75, 23);
|
||||
this.buttonClose.TabIndex = 0;
|
||||
this.buttonClose.Text = "&Close";
|
||||
this.buttonClose.UseVisualStyleBackColor = true;
|
||||
this.buttonClose.Click += new System.EventHandler(this.buttonClose_Click);
|
||||
//
|
||||
// listView
|
||||
//
|
||||
this.listView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.listView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
||||
this.columnName,
|
||||
this.columnValue});
|
||||
this.listView.FullRowSelect = true;
|
||||
this.listView.Location = new System.Drawing.Point(12, 12);
|
||||
this.listView.Name = "listView";
|
||||
this.listView.ShowItemToolTips = true;
|
||||
this.listView.Size = new System.Drawing.Size(487, 257);
|
||||
this.listView.TabIndex = 1;
|
||||
this.listView.UseCompatibleStateImageBehavior = false;
|
||||
this.listView.View = System.Windows.Forms.View.Details;
|
||||
//
|
||||
// columnName
|
||||
//
|
||||
this.columnName.Text = "Name";
|
||||
this.columnName.Width = 150;
|
||||
//
|
||||
// columnValue
|
||||
//
|
||||
this.columnValue.Text = "Value";
|
||||
this.columnValue.Width = 300;
|
||||
//
|
||||
// ListWindow
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(511, 310);
|
||||
this.Controls.Add(this.listView);
|
||||
this.Controls.Add(this.buttonClose);
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
|
||||
this.MaximizeBox = false;
|
||||
this.MinimizeBox = false;
|
||||
this.Name = "ListWindow";
|
||||
this.ShowIcon = false;
|
||||
this.ShowInTaskbar = false;
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
||||
this.Text = "List";
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.Button buttonClose;
|
||||
private System.Windows.Forms.ListView listView;
|
||||
private System.Windows.Forms.ColumnHeader columnName;
|
||||
private System.Windows.Forms.ColumnHeader columnValue;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace ProcessHacker
|
||||
{
|
||||
public partial class ListWindow : Form
|
||||
{
|
||||
public ListWindow(List<KeyValuePair<string, string>> list)
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
foreach (KeyValuePair<string, string> kvp in list)
|
||||
{
|
||||
ListViewItem item = new ListViewItem();
|
||||
|
||||
item.Text = kvp.Key;
|
||||
item.SubItems.Add(new ListViewItem.ListViewSubItem(item, kvp.Value));
|
||||
|
||||
listView.Items.Add(item);
|
||||
}
|
||||
|
||||
listView.ContextMenu = GenericViewMenu.GetMenu(listView);
|
||||
}
|
||||
|
||||
private void buttonClose_Click(object sender, EventArgs e)
|
||||
{
|
||||
this.Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
||||
+114
-23
@@ -41,19 +41,26 @@
|
||||
this.tabControl = new System.Windows.Forms.TabControl();
|
||||
this.tabGeneral = new System.Windows.Forms.TabPage();
|
||||
this.groupProcess = new System.Windows.Forms.GroupBox();
|
||||
this.buttonOpenCurDir = new System.Windows.Forms.Button();
|
||||
this.buttonPEBStrings = new System.Windows.Forms.Button();
|
||||
this.label4 = new System.Windows.Forms.Label();
|
||||
this.textCurrentDirectory = new System.Windows.Forms.TextBox();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.textCmdLine = new System.Windows.Forms.TextBox();
|
||||
this.groupFile = new System.Windows.Forms.GroupBox();
|
||||
this.buttonOpenFileNameFolder = new System.Windows.Forms.Button();
|
||||
this.pictureIcon = new System.Windows.Forms.PictureBox();
|
||||
this.textFileDescription = new System.Windows.Forms.TextBox();
|
||||
this.textFileName = new System.Windows.Forms.TextBox();
|
||||
this.textFileCompany = new System.Windows.Forms.TextBox();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.textFileVersion = new System.Windows.Forms.TextBox();
|
||||
this.tabThreads = new System.Windows.Forms.TabPage();
|
||||
this.listThreads = new ProcessHacker.ThreadList();
|
||||
this.tabToken = new System.Windows.Forms.TabPage();
|
||||
this.tabModules = new System.Windows.Forms.TabPage();
|
||||
this.listModules = new ProcessHacker.ModuleList();
|
||||
this.tabMemory = new System.Windows.Forms.TabPage();
|
||||
this.tabHandles = new System.Windows.Forms.TabPage();
|
||||
this.tabServices = new System.Windows.Forms.TabPage();
|
||||
@@ -65,6 +72,7 @@
|
||||
this.groupFile.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureIcon)).BeginInit();
|
||||
this.tabThreads.SuspendLayout();
|
||||
this.tabModules.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.vistaMenu)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
@@ -108,7 +116,7 @@
|
||||
this.tabControl.Multiline = true;
|
||||
this.tabControl.Name = "tabControl";
|
||||
this.tabControl.SelectedIndex = 0;
|
||||
this.tabControl.Size = new System.Drawing.Size(477, 291);
|
||||
this.tabControl.Size = new System.Drawing.Size(477, 368);
|
||||
this.tabControl.TabIndex = 0;
|
||||
this.tabControl.TabIndexChanged += new System.EventHandler(this.tabControl_TabIndexChanged);
|
||||
//
|
||||
@@ -121,7 +129,7 @@
|
||||
this.tabGeneral.Location = new System.Drawing.Point(4, 42);
|
||||
this.tabGeneral.Name = "tabGeneral";
|
||||
this.tabGeneral.Padding = new System.Windows.Forms.Padding(3);
|
||||
this.tabGeneral.Size = new System.Drawing.Size(469, 245);
|
||||
this.tabGeneral.Size = new System.Drawing.Size(469, 322);
|
||||
this.tabGeneral.TabIndex = 2;
|
||||
this.tabGeneral.Text = "General";
|
||||
this.tabGeneral.UseVisualStyleBackColor = true;
|
||||
@@ -131,15 +139,60 @@
|
||||
this.groupProcess.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.groupProcess.Controls.Add(this.buttonOpenCurDir);
|
||||
this.groupProcess.Controls.Add(this.buttonPEBStrings);
|
||||
this.groupProcess.Controls.Add(this.label4);
|
||||
this.groupProcess.Controls.Add(this.textCurrentDirectory);
|
||||
this.groupProcess.Controls.Add(this.label2);
|
||||
this.groupProcess.Controls.Add(this.textCmdLine);
|
||||
this.groupProcess.Location = new System.Drawing.Point(8, 117);
|
||||
this.groupProcess.Location = new System.Drawing.Point(8, 126);
|
||||
this.groupProcess.Name = "groupProcess";
|
||||
this.groupProcess.Size = new System.Drawing.Size(455, 122);
|
||||
this.groupProcess.Size = new System.Drawing.Size(455, 190);
|
||||
this.groupProcess.TabIndex = 5;
|
||||
this.groupProcess.TabStop = false;
|
||||
this.groupProcess.Text = "Process";
|
||||
//
|
||||
// buttonOpenCurDir
|
||||
//
|
||||
this.buttonOpenCurDir.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.buttonOpenCurDir.Image = global::ProcessHacker.Properties.Resources.folder_go;
|
||||
this.buttonOpenCurDir.Location = new System.Drawing.Point(425, 42);
|
||||
this.buttonOpenCurDir.Name = "buttonOpenCurDir";
|
||||
this.buttonOpenCurDir.Size = new System.Drawing.Size(24, 24);
|
||||
this.buttonOpenCurDir.TabIndex = 4;
|
||||
this.buttonOpenCurDir.UseVisualStyleBackColor = true;
|
||||
this.buttonOpenCurDir.Click += new System.EventHandler(this.buttonOpenCurDir_Click);
|
||||
//
|
||||
// buttonPEBStrings
|
||||
//
|
||||
this.buttonPEBStrings.FlatStyle = System.Windows.Forms.FlatStyle.System;
|
||||
this.buttonPEBStrings.Location = new System.Drawing.Point(6, 71);
|
||||
this.buttonPEBStrings.Name = "buttonPEBStrings";
|
||||
this.buttonPEBStrings.Size = new System.Drawing.Size(102, 23);
|
||||
this.buttonPEBStrings.TabIndex = 4;
|
||||
this.buttonPEBStrings.Text = "PEB Strings...";
|
||||
this.buttonPEBStrings.UseVisualStyleBackColor = true;
|
||||
this.buttonPEBStrings.Click += new System.EventHandler(this.buttonPEBStrings_Click);
|
||||
//
|
||||
// label4
|
||||
//
|
||||
this.label4.AutoSize = true;
|
||||
this.label4.Location = new System.Drawing.Point(6, 48);
|
||||
this.label4.Name = "label4";
|
||||
this.label4.Size = new System.Drawing.Size(89, 13);
|
||||
this.label4.TabIndex = 0;
|
||||
this.label4.Text = "Current Directory:";
|
||||
//
|
||||
// textCurrentDirectory
|
||||
//
|
||||
this.textCurrentDirectory.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.textCurrentDirectory.Location = new System.Drawing.Point(101, 45);
|
||||
this.textCurrentDirectory.Name = "textCurrentDirectory";
|
||||
this.textCurrentDirectory.ReadOnly = true;
|
||||
this.textCurrentDirectory.Size = new System.Drawing.Size(318, 20);
|
||||
this.textCurrentDirectory.TabIndex = 3;
|
||||
//
|
||||
// label2
|
||||
//
|
||||
this.label2.AutoSize = true;
|
||||
@@ -153,29 +206,42 @@
|
||||
//
|
||||
this.textCmdLine.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.textCmdLine.Location = new System.Drawing.Point(92, 19);
|
||||
this.textCmdLine.Location = new System.Drawing.Point(101, 19);
|
||||
this.textCmdLine.Name = "textCmdLine";
|
||||
this.textCmdLine.ReadOnly = true;
|
||||
this.textCmdLine.Size = new System.Drawing.Size(357, 20);
|
||||
this.textCmdLine.Size = new System.Drawing.Size(348, 20);
|
||||
this.textCmdLine.TabIndex = 3;
|
||||
//
|
||||
// groupFile
|
||||
//
|
||||
this.groupFile.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.groupFile.Controls.Add(this.buttonOpenFileNameFolder);
|
||||
this.groupFile.Controls.Add(this.pictureIcon);
|
||||
this.groupFile.Controls.Add(this.textFileDescription);
|
||||
this.groupFile.Controls.Add(this.textFileName);
|
||||
this.groupFile.Controls.Add(this.textFileCompany);
|
||||
this.groupFile.Controls.Add(this.label1);
|
||||
this.groupFile.Controls.Add(this.label3);
|
||||
this.groupFile.Controls.Add(this.textFileVersion);
|
||||
this.groupFile.Location = new System.Drawing.Point(6, 6);
|
||||
this.groupFile.Name = "groupFile";
|
||||
this.groupFile.Size = new System.Drawing.Size(457, 105);
|
||||
this.groupFile.Size = new System.Drawing.Size(457, 114);
|
||||
this.groupFile.TabIndex = 4;
|
||||
this.groupFile.TabStop = false;
|
||||
this.groupFile.Text = "File";
|
||||
//
|
||||
// buttonOpenFileNameFolder
|
||||
//
|
||||
this.buttonOpenFileNameFolder.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.buttonOpenFileNameFolder.Image = global::ProcessHacker.Properties.Resources.folder_go;
|
||||
this.buttonOpenFileNameFolder.Location = new System.Drawing.Point(427, 80);
|
||||
this.buttonOpenFileNameFolder.Name = "buttonOpenFileNameFolder";
|
||||
this.buttonOpenFileNameFolder.Size = new System.Drawing.Size(24, 24);
|
||||
this.buttonOpenFileNameFolder.TabIndex = 4;
|
||||
this.buttonOpenFileNameFolder.UseVisualStyleBackColor = true;
|
||||
this.buttonOpenFileNameFolder.Click += new System.EventHandler(this.buttonOpenFileNameFolder_Click);
|
||||
//
|
||||
// pictureIcon
|
||||
//
|
||||
this.pictureIcon.Location = new System.Drawing.Point(6, 19);
|
||||
@@ -202,10 +268,10 @@
|
||||
//
|
||||
this.textFileName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.textFileName.Location = new System.Drawing.Point(101, 76);
|
||||
this.textFileName.Location = new System.Drawing.Point(101, 83);
|
||||
this.textFileName.Name = "textFileName";
|
||||
this.textFileName.ReadOnly = true;
|
||||
this.textFileName.Size = new System.Drawing.Size(350, 20);
|
||||
this.textFileName.Size = new System.Drawing.Size(320, 20);
|
||||
this.textFileName.TabIndex = 3;
|
||||
//
|
||||
// textFileCompany
|
||||
@@ -221,10 +287,19 @@
|
||||
this.textFileCompany.TabIndex = 2;
|
||||
this.textFileCompany.Text = "File Company";
|
||||
//
|
||||
// label1
|
||||
//
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.Location = new System.Drawing.Point(6, 60);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(77, 13);
|
||||
this.label1.TabIndex = 0;
|
||||
this.label1.Text = "Image Version:";
|
||||
//
|
||||
// label3
|
||||
//
|
||||
this.label3.AutoSize = true;
|
||||
this.label3.Location = new System.Drawing.Point(6, 79);
|
||||
this.label3.Location = new System.Drawing.Point(6, 86);
|
||||
this.label3.Name = "label3";
|
||||
this.label3.Size = new System.Drawing.Size(89, 13);
|
||||
this.label3.TabIndex = 0;
|
||||
@@ -234,14 +309,11 @@
|
||||
//
|
||||
this.textFileVersion.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.textFileVersion.BackColor = System.Drawing.SystemColors.Window;
|
||||
this.textFileVersion.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||
this.textFileVersion.Location = new System.Drawing.Point(6, 57);
|
||||
this.textFileVersion.Location = new System.Drawing.Point(101, 57);
|
||||
this.textFileVersion.Name = "textFileVersion";
|
||||
this.textFileVersion.ReadOnly = true;
|
||||
this.textFileVersion.Size = new System.Drawing.Size(445, 13);
|
||||
this.textFileVersion.Size = new System.Drawing.Size(350, 20);
|
||||
this.textFileVersion.TabIndex = 2;
|
||||
this.textFileVersion.Text = "File Version";
|
||||
//
|
||||
// tabThreads
|
||||
//
|
||||
@@ -249,7 +321,7 @@
|
||||
this.tabThreads.ImageKey = "hourglass";
|
||||
this.tabThreads.Location = new System.Drawing.Point(4, 42);
|
||||
this.tabThreads.Name = "tabThreads";
|
||||
this.tabThreads.Size = new System.Drawing.Size(469, 245);
|
||||
this.tabThreads.Size = new System.Drawing.Size(469, 322);
|
||||
this.tabThreads.TabIndex = 3;
|
||||
this.tabThreads.Text = "Threads";
|
||||
this.tabThreads.UseVisualStyleBackColor = true;
|
||||
@@ -261,7 +333,7 @@
|
||||
this.listThreads.Location = new System.Drawing.Point(0, 0);
|
||||
this.listThreads.Name = "listThreads";
|
||||
this.listThreads.Provider = null;
|
||||
this.listThreads.Size = new System.Drawing.Size(469, 245);
|
||||
this.listThreads.Size = new System.Drawing.Size(469, 322);
|
||||
this.listThreads.TabIndex = 0;
|
||||
//
|
||||
// tabToken
|
||||
@@ -270,27 +342,38 @@
|
||||
this.tabToken.Location = new System.Drawing.Point(4, 42);
|
||||
this.tabToken.Name = "tabToken";
|
||||
this.tabToken.Padding = new System.Windows.Forms.Padding(3);
|
||||
this.tabToken.Size = new System.Drawing.Size(469, 245);
|
||||
this.tabToken.Size = new System.Drawing.Size(469, 322);
|
||||
this.tabToken.TabIndex = 1;
|
||||
this.tabToken.Text = "Token";
|
||||
this.tabToken.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// tabModules
|
||||
//
|
||||
this.tabModules.Controls.Add(this.listModules);
|
||||
this.tabModules.ImageKey = "page_white_wrench";
|
||||
this.tabModules.Location = new System.Drawing.Point(4, 42);
|
||||
this.tabModules.Name = "tabModules";
|
||||
this.tabModules.Size = new System.Drawing.Size(469, 245);
|
||||
this.tabModules.Size = new System.Drawing.Size(469, 322);
|
||||
this.tabModules.TabIndex = 6;
|
||||
this.tabModules.Text = "Modules";
|
||||
this.tabModules.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// listModules
|
||||
//
|
||||
this.listModules.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.listModules.DoubleBuffered = true;
|
||||
this.listModules.Location = new System.Drawing.Point(0, 0);
|
||||
this.listModules.Name = "listModules";
|
||||
this.listModules.Provider = null;
|
||||
this.listModules.Size = new System.Drawing.Size(469, 322);
|
||||
this.listModules.TabIndex = 0;
|
||||
//
|
||||
// tabMemory
|
||||
//
|
||||
this.tabMemory.ImageKey = "database";
|
||||
this.tabMemory.Location = new System.Drawing.Point(4, 42);
|
||||
this.tabMemory.Name = "tabMemory";
|
||||
this.tabMemory.Size = new System.Drawing.Size(469, 245);
|
||||
this.tabMemory.Size = new System.Drawing.Size(469, 322);
|
||||
this.tabMemory.TabIndex = 4;
|
||||
this.tabMemory.Text = "Memory";
|
||||
this.tabMemory.UseVisualStyleBackColor = true;
|
||||
@@ -300,7 +383,7 @@
|
||||
this.tabHandles.ImageKey = "connect";
|
||||
this.tabHandles.Location = new System.Drawing.Point(4, 42);
|
||||
this.tabHandles.Name = "tabHandles";
|
||||
this.tabHandles.Size = new System.Drawing.Size(469, 245);
|
||||
this.tabHandles.Size = new System.Drawing.Size(469, 322);
|
||||
this.tabHandles.TabIndex = 5;
|
||||
this.tabHandles.Text = "Handles";
|
||||
this.tabHandles.UseVisualStyleBackColor = true;
|
||||
@@ -310,7 +393,7 @@
|
||||
this.tabServices.ImageKey = "cog";
|
||||
this.tabServices.Location = new System.Drawing.Point(4, 42);
|
||||
this.tabServices.Name = "tabServices";
|
||||
this.tabServices.Size = new System.Drawing.Size(469, 245);
|
||||
this.tabServices.Size = new System.Drawing.Size(469, 322);
|
||||
this.tabServices.TabIndex = 7;
|
||||
this.tabServices.Text = "Services";
|
||||
this.tabServices.UseVisualStyleBackColor = true;
|
||||
@@ -335,7 +418,7 @@
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(477, 291);
|
||||
this.ClientSize = new System.Drawing.Size(477, 368);
|
||||
this.Controls.Add(this.tabControl);
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow;
|
||||
this.Menu = this.mainMenu;
|
||||
@@ -351,6 +434,7 @@
|
||||
this.groupFile.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureIcon)).EndInit();
|
||||
this.tabThreads.ResumeLayout(false);
|
||||
this.tabModules.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.vistaMenu)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
@@ -383,5 +467,12 @@
|
||||
private System.Windows.Forms.GroupBox groupFile;
|
||||
private System.Windows.Forms.GroupBox groupProcess;
|
||||
private System.Windows.Forms.TabPage tabServices;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.Button buttonPEBStrings;
|
||||
private System.Windows.Forms.Label label4;
|
||||
private System.Windows.Forms.TextBox textCurrentDirectory;
|
||||
private System.Windows.Forms.Button buttonOpenFileNameFolder;
|
||||
private System.Windows.Forms.Button buttonOpenCurDir;
|
||||
private ModuleList listModules;
|
||||
}
|
||||
}
|
||||
@@ -36,6 +36,7 @@ namespace ProcessHacker
|
||||
private Process _process;
|
||||
|
||||
private ThreadProvider _threadP;
|
||||
private ModuleProvider _moduleP;
|
||||
|
||||
private TokenProperties _tokenProps;
|
||||
|
||||
@@ -76,21 +77,51 @@ namespace ProcessHacker
|
||||
listThreads.Provider = _threadP;
|
||||
_threadP.Enabled = true;
|
||||
|
||||
_moduleP = new ModuleProvider(_pid);
|
||||
_moduleP.Interval = Properties.Settings.Default.RefreshInterval;
|
||||
_moduleP.RunOnceAsync();
|
||||
listModules.Provider = _moduleP;
|
||||
_moduleP.Enabled = true;
|
||||
|
||||
try { pictureIcon.Image = Win32.GetProcessIcon(_process, true).ToBitmap(); }
|
||||
catch { }
|
||||
catch { pictureIcon.Image = global::ProcessHacker.Properties.Resources.Process.ToBitmap(); }
|
||||
try
|
||||
{
|
||||
FileVersionInfo info = FileVersionInfo.GetVersionInfo(Misc.GetRealPath(_process.MainModule.FileName));
|
||||
string fileName;
|
||||
|
||||
if (_pid == 4)
|
||||
fileName = Misc.GetKernelFileName();
|
||||
else
|
||||
fileName = Misc.GetRealPath(_process.MainModule.FileName);
|
||||
|
||||
FileVersionInfo info = FileVersionInfo.GetVersionInfo(fileName);
|
||||
|
||||
textFileDescription.Text = info.FileDescription;
|
||||
textFileCompany.Text = info.CompanyName;
|
||||
textFileVersion.Text = info.FileVersion;
|
||||
textFileName.Text = info.FileName;
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
catch (Exception ex)
|
||||
{
|
||||
textFileDescription.Text = "(" + ex.Message + ")";
|
||||
textFileCompany.Text = "";
|
||||
}
|
||||
|
||||
textCmdLine.Text = _processItem.CmdLine;
|
||||
|
||||
try
|
||||
{
|
||||
using (Win32.ProcessHandle phandle
|
||||
= new Win32.ProcessHandle(_pid, Program.MinProcessQueryRights | Win32.PROCESS_RIGHTS.PROCESS_VM_READ))
|
||||
{
|
||||
textCurrentDirectory.Text =
|
||||
phandle.GetPEBString(Win32.ProcessHandle.PEBOffset.CurrentDirectoryPath);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
textCurrentDirectory.Text = "(" + ex.Message + ")";
|
||||
}
|
||||
}
|
||||
|
||||
private void ProcessWindow_FormClosing(object sender, FormClosingEventArgs e)
|
||||
@@ -150,9 +181,76 @@ namespace ProcessHacker
|
||||
private void tabControl_TabIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
_threadP.Enabled = false;
|
||||
_moduleP.Enabled = false;
|
||||
|
||||
if (tabControl.SelectedTab == tabThreads)
|
||||
_threadP.Enabled = true;
|
||||
else if (tabControl.SelectedTab == tabModules)
|
||||
_moduleP.Enabled = true;
|
||||
}
|
||||
|
||||
private void buttonPEBStrings_Click(object sender, EventArgs e)
|
||||
{
|
||||
List<KeyValuePair<string, string>> list = new List<KeyValuePair<string, string>>();
|
||||
|
||||
try
|
||||
{
|
||||
using (Win32.ProcessHandle ph
|
||||
= new Win32.ProcessHandle(_pid, Program.MinProcessQueryRights | Win32.PROCESS_RIGHTS.PROCESS_VM_READ))
|
||||
{
|
||||
list.Add(new KeyValuePair<string, string>("Command Line",
|
||||
ph.GetPEBString(Win32.ProcessHandle.PEBOffset.CommandLine)));
|
||||
list.Add(new KeyValuePair<string, string>("Current Directory Path",
|
||||
ph.GetPEBString(Win32.ProcessHandle.PEBOffset.CurrentDirectoryPath)));
|
||||
list.Add(new KeyValuePair<string, string>("Desktop Name",
|
||||
ph.GetPEBString(Win32.ProcessHandle.PEBOffset.DesktopName)));
|
||||
list.Add(new KeyValuePair<string, string>("Path",
|
||||
ph.GetPEBString(Win32.ProcessHandle.PEBOffset.DllPath)));
|
||||
list.Add(new KeyValuePair<string, string>("Image File Name",
|
||||
ph.GetPEBString(Win32.ProcessHandle.PEBOffset.ImagePathName)));
|
||||
list.Add(new KeyValuePair<string, string>("Runtime Data",
|
||||
ph.GetPEBString(Win32.ProcessHandle.PEBOffset.RuntimeData)));
|
||||
list.Add(new KeyValuePair<string, string>("Shell Info",
|
||||
ph.GetPEBString(Win32.ProcessHandle.PEBOffset.ShellInfo)));
|
||||
list.Add(new KeyValuePair<string, string>("Window Title",
|
||||
ph.GetPEBString(Win32.ProcessHandle.PEBOffset.WindowTitle)));
|
||||
}
|
||||
|
||||
ListWindow window = new ListWindow(list);
|
||||
|
||||
window.TopMost = this.TopMost;
|
||||
window.ShowDialog();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show(ex.Message, "Process Hacker", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
}
|
||||
|
||||
private void buttonOpenFileNameFolder_Click(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
Process.Start("explorer.exe", "/select," + textFileName.Text);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Could not start process:\n\n" + ex.Message, "Process Hacker",
|
||||
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
}
|
||||
|
||||
private void buttonOpenCurDir_Click(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
Process.Start("explorer.exe", "/select," + textCurrentDirectory.Text);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Could not start process:\n\n" + ex.Message, "Process Hacker",
|
||||
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -130,145 +130,141 @@
|
||||
<value>
|
||||
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
|
||||
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
|
||||
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAY
|
||||
IAAAAk1TRnQBSQFMAgEBBwEAAQwBAAEEAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
|
||||
AwABIAMAAQEBAAEgBgABICoAAwoBDQMiATEDIAEvAwUBBxgAAxEBFwGrAWEBNQH/AYUBXwFIAfYDKQE/
|
||||
NAADBgEIAUEBQwFEAW4BXAFoAXYBswFkAYABoAHdAVsBigG3AfQBTQGGAbwB/QE9AXkBswH/AS0BbgGo
|
||||
Af8BIwFjAZ4B/QEgAV0BjgH0ATABWAF7Ad0BQwFWAWMBswE9AUABQgFuAwYBCFAAAxgBIQNQAZ0DdwHw
|
||||
A6EB/wOrAf8DpwH/A5UB/wNqAecDSgGKAxABFgwAAboBcwFCAf8BwAGJAVcB/wG/AYkBWgH/Aa8BZQE/
|
||||
Af8DKgFBMAABYwFzAYUBxAGHAbcB4AH/AZUBxgHmAf8BmwHNAekB/wGcAc0B6QH/AZkBxwHnAf8BlQHB
|
||||
AeQB/wGOAbgB4AH/AYkBsAHdAf8BgQGnAdcB/wFxAZsBzwH/AVsBjAHCAf8BPAF2Aa4B/wE/AVkBbgHE
|
||||
TAADLwFKA4IB9APOAf8D7QH/A/QB/wP1Af8D9AH/A+8B/wPiAf8DugH/A2kB5wMkATUIAAHDAYgBUQH/
|
||||
Ac8BogF1Af8BzQGiAYAB/wHAAYwBXgH/AbABagFBAf8CTgFNAZUDMQFOAyYBOQMWAR4DAwEEHAABYwFz
|
||||
AYUBxAGYAbkB1AH/AcUBxwHEAf8B7AHYAccB/wH2AesB4wH/AfoB9QHxAf8B8wHnAd4B/wHfAb8BpgH/
|
||||
AdABpAGAAf8BywGaAXIB/wHIAZcBbwH/AaMBkwGMAf8BYAF9AZwB/wE/AVkBbgHETAADcgHqA94B/wPz
|
||||
Af8D2wH/A9IB/wPbAf8D1gH/A8AB/wPJAf8D5gH/A8QB/wNpAeoIAANAAXEBzAGZAWkB/wHQAaMBgQH/
|
||||
Ac8BpAGDAf8BygGeAXMB/wG8AYUBVQH/Aa8BaQFBAf8BpwFcATgB/wGeAU8BMAH/AVsCWAHGAwcBCRgA
|
||||
Ah4BHQEqAeYBwwGlAf8B7wHWAcAB/wH7AfIB6gH/Af4B/AH6Av8B/gH9Af8B/gH9AfwB/wH8AfYB8AH/
|
||||
AfgB6AHZAf8B9gHjAdEB/wH2AeIBzgH/AeYByAGtAf8BzgGgAXkB/wMdASpMAANyAeoD8AH/A94B/wPU
|
||||
Af8D0gH/A9sB/wPWAf8DvwH/A7AB/wOzAf8D3gH/A2oB6gwAA0EBcgHOAZ0BbgH/AdUBrAGMAf8BywGb
|
||||
AW4B/wHMAaABdAH/AcgBmwFuAf8BxQGVAWcB/wHAAY8BYQH/AawBZQFAAf8DQgF2HAABgAF1AWwBuQHt
|
||||
AdMBuwH/AfoB8AHlAf8B/QH5AfUB/wH+AfwB+gH/Af4B/QH8Af8B/QH5AfQB/wH2AeMBzwH/AfcB5QHT
|
||||
Af8B9gHjAdEB/wHdAbkBmgH/AXgBaQFgAbhQAANyAeoD8gH/A+IB/wPYAf8D1QH/A9wB/wPYAf8DwAH/
|
||||
A7MB/wO3Af8D4AH/A2wB6hAAA1YBsQHTAagBhgH/AdYBrAGOAf8ByQGYAWkB/wHEAZABYAH/Ab8BigFX
|
||||
Af8BwgGPAV8B/wG/AYsBXAH/AWkBXwFHAfsDHQEpHAABdgFuAWcBsAHmAcUBqQH+AfcB6gHeAf8B/gH6
|
||||
AfcB/wH+AfwB+QH/Af0B9wHyAf8B+gHtAeIB/wHrAdABtwH/Ac4BnwF+Af4BcAFlAV0BrlQAA3IB6gPz
|
||||
Af8D5wH/A90B/wPZAf8D4AH/A9sB/wPEAf8DuAH/A7sB/wPhAf8DbgHqEAADMQFOAdQBowF2Af8B3AG1
|
||||
AZgB/wHQAaEBdQH/AcwBmgFsAf8BzwGkAYMB/wHIAZoBbgH/AXUBjAFcAf8BYgG4AXIB/wGEAVABMgH7
|
||||
A1QBrwMHAQkYAAMnAToBswGiAZEB4QHzAeIB0gH/AfwB9AHtAf8B+wHxAecB/wHpAcwBtQH/AaMBiQF3
|
||||
AdwDJgE4WAADcgHqA/QB/wPqAf8D4QH/A90B/wPjAf8D3gH/A8kB/wO9Af8DvwH/A+IB/wNvAeoQAAMm
|
||||
ATkB2wGrAYkB/wHhAb0BogH/AdYBqgGHAf8B2QGzAZQB/wHOAZ8BcgH/AY0BgQFfAfsBZQG8AXQB/wGT
|
||||
AWcBPgH/AbABbQFHAf8BpAFaATkB/wFiAVwBWgHaAwMBBBwAAZABhAF4AccB9AHjAdAB/wHzAd8BzQH/
|
||||
AYgBeQFvAcNgAAN0AeoD9QH/A+4B/wPmAf8D4gH/A+YB/wPhAf8DzQH/A8IB/wPCAf8D4wH/A28B6hAA
|
||||
AxYBHgHgAbEBjwH/AeYBxAGrAf8B4gG/AaQB/wHYAa0BjgH/AZgBfgFpAfoDQwF3AY0BcAE8AfwBuwGE
|
||||
AVUB/wHAAY8BYQH/AbwBigFZAf8BnAFKAS0B/wMWAR4cAAGMAX8BdAHDAfQB4QHOAf8B8wHfAcwB/wGH
|
||||
AXoBbQHCYAADdgHqA/YB/wPrAf8D3gH/A9YB/wPVAf8D0QH/A8MB/wO8Af8DwAH/A+UB/wNvAeoQAAMD
|
||||
AQQBbQFmAWMB2gHkAbsBnwH/AeQBuwGfAf8BiQGPAXkB/AFuAcEBdwH/AZsBfAFPAfwBxwGWAWcB/wHL
|
||||
AZ4BcwH/AbwBhQFRAf8BwwGSAWQB/wGmAVsBNwH/AyYBORQAAyYBOAGxAZ0BjQHdAfMB3QHJAf8B+gHu
|
||||
AeIB/wH5AesB3gH/Ae0B0AG2Af8BpQGQAX4B2wMmAThYAAN3AeoD9wH/A+cB/wPvAf8D9gH/A/sB/wP6
|
||||
Af8D8AH/A94B/wPDAf8D5gH/A3AB6hQAAwcBCQNUAa8BnQGVAYgB+QFvAcUBggH/AbUBsAGBAf8B2AGw
|
||||
AZIB/wHXAa4BjwH/AckBlwFnAf8BwwGPAV4B/wHIAZsBbgH/AbEBaQFCAf8DMQFOEAABeAFyAWwBrwHy
|
||||
AdMBtgH+AfkB7AHgAf8B/QH4AfQB/wH7AfAB5gH/AfgB5wHXAf8B+QHrAd4B/wHyAdoBxQH/Ad8BtgGU
|
||||
Af4BcwFqAWMBrlQAA3cB6gP4Af8D/hn/A/sB/wPqAf8DcQHqHAADGwEmAbkBqwGGAf0B4gG+AaMB/wHf
|
||||
AbcBmgH/AdUBqAGGAf8B0AGhAXUB/wHLAZoBawH/Ac4BogGAAf8BvwGLAVoB/wJOAU0BlQwAAYMBfAF0
|
||||
AbgB+QHjAc0B/wH7AfMB7AH/Af4B+gH3Af8B/gH7AfgB/wH8AfUB7QH/AfcB5gHVAf8B9gHhAcwB/wH5
|
||||
AewB3wH/AfkB6wHdAf8B6wHOAbQB/wF8AXIBaQG4UAADWQG/A+EB/wP+Gf8D+wH/A88B/wNSAaEgAANC
|
||||
AXYB5AG6AZ0B/wHmAcQBqwH/AeIBvgGkAf8B3gG5AZwB/wHZAbIBkwH/AdEBowF3Af8B0QGmAYUB/wG7
|
||||
AXcBSQH/AykBPwQAAx4BKgHAAcUBzQH/AZoBtwHcAf8BewGmAdUB/wFhAZUBygH/AU0BhwG+Af8BPQF5
|
||||
AbMB/wEtAW4BqAH/ASEBZQGfAf8BHAFhAZgB/wEqAWkBmgH/AVEBgwGnAf8BiAGUAZoB/wMdASpMAAMd
|
||||
ASoDYAHRA9AB/wPoAf8D8wH/A/0B/wP8Af8D7QH/A+AB/wPCAf8DWwHDAxQBGyAAAwcBCQFcAlsBxgHj
|
||||
AbQBkwH/Ad8BsQGOAf8B2gGrAYkB/wHaAa0BjAH/AdwBtQGYAf8B1wGvAZAB/wHMAZsBbAH/AaABcAFM
|
||||
AfoEAAFrAX4BlAHRAYcBtwHgAf8BlQHGAeYB/wGbAc0B6QH/AZwBzQHpAf8BmQHHAecB/wGVAcEB5AH/
|
||||
AY4BuAHgAf8BiQGwAd0B/wGBAacB1wH/AXEBmwHPAf8BWwGMAcIB/wE8AXYBrgH/AT4BXAF1AdFQAAMF
|
||||
AQcDNQFVA1QBrgNjAdYDmwH7A5kB+QNcAc0DUgGpAy0BRgMCAQMoAAMDAQQDFgEeAyYBOQMxBE4BlAHY
|
||||
AacBggH/AdcBrAGLAf8B0wGnAYQB/wGTAXIBVgH2BAABYwFzAYUBxAGHAbcB4AH/AZUBxgHmAf8BnQHP
|
||||
AeoB/wGhAdMB7AH/AaAB0QHrAf8BmwHKAegB/wGWAcIB5QH/AY8BugHiAf8BhwGxAd0B/wF3AaMB1AH/
|
||||
AV8BkAHEAf8BPAF2Aa4B/wE/AVkBbgHEtAADKQE+AbcBkwFlAfsBmwF9AWIB9gMuAUgEAAMGAQgBQQFD
|
||||
AUQBbgFcAWgBdgGzAWkBhAGiAd0BbAGUAcMB9AFuAZ8B0gH9AWcBmQHRAf8BWgGQAcgB/wFNAYYBvAH9
|
||||
AUIBdwGmAfQBQwFoAYoB3QFIAVsBaAGzAT4BQAFCAW4DBgEIRAABCgGdAdkB/wEFAZkB2AH/AQABlAHX
|
||||
Af8BAAGQAdYB/wEAAYwB1QH/AQABiAHUAf8BAAGEAdMB/wEAAYAB0gH/AQABUAHRAf8BAAFNAdEB/wEA
|
||||
AUoB0AH/AQABRwHPAf8BAAFEAc8B/wEAAUIBzgH/YAADOwFjA1gBvwNXAb8DOwFjIAADFQEdAyMBNAMk
|
||||
ATYDJAE2AyQBNgMkATYDJAE2AyQBNgMkATYDJAE2AyQBNgMkATYDIwEzAxUBHQERAaMB2gH/AbwB6wH6
|
||||
Af8BvAHrAfwB/wG/Ae4B/gH/AcYB9AL/Ac4B+AL/AdMB+gL/AdAB+AL/AccB8gL/AboB6QH8Af8BswHk
|
||||
AfkB/wGwAeIB+AH/AbAB4gH4Af8BAAFFAc8B/1QAAx0BKQMKAQ4DAQECA1wB6gO9Af8DsgH/A1wB6gMB
|
||||
AQIDCgEOAx0BKRQAAyMBNAOwAfUD5QH9A/wB/wP8Af8D/AH/A/wB/wP8Af8D/AH/A/wB/wP8Af8D5QH9
|
||||
A6gB8wMjATMBFwGoAdsB/wG/AewB+wH/AS0BzwH1Af8BFQGwAewB/wEAARUBLgH/AQABNQGJAf8BHQGJ
|
||||
Ab4B/wEcAZoByAH/ARwBrgHnAf8BCwGlAeYB/wEAAZoB4QH/AQwBuAHuAf8BsQHjAfgB/wEAAUkB0AH/
|
||||
CAADUgGpAcMBjgFAAf8BwAGLAT4B/wG+AYgBPAH/AbsBhQE5Af8BuQGDATcB/wG0AVYBNAH/AbIBVAEy
|
||||
Af8BsQFTATAB/wGuAVEBLwH/Aa0BTgEuAf8BqwFNASwB/wGpAUsBKwH/AakBSQEpAf8DUgGpDAADUAGb
|
||||
A0MB/QNkAecDEgEZA2QB5wPLAf8DxwH/A2IB5wMSARkDXAHnA0AB/QNPAZsIAAM3AVsBigFqAVIB8AGb
|
||||
AWoBSQH2AeUBtwGaAf8B+wL6Af8D/AH/A/wB/wP8Af8D/AH/A/wB/wP8Af8D/AH/A/wB/wP8Af8D5QH9
|
||||
AyQBNgEdAa0B3AH/AcEB7gH7Af8BMwHTAfcB/wFAAdsB/AH/AQABOwGFAf8BlAHHAfkB/wGRAckB+QH/
|
||||
ARUBhQHJAf8BAAE+Aa4B/wEnAb0B7AH/ARoBvgHvAf8BEAG6Ae4B/wGzAeMB+QH/AQABTQHRAf8IAAHI
|
||||
AZIBRDX/AakBSgEpAf8IAANEAXsDvAH/A94B/wOmAf8DZQH0A38B/gPEAf8DwgH/A20B/gNlAfQDpgH/
|
||||
A9IB/wOAAf8DRAF7BAABjAFwAWIB7wHmAbgBnAH/AekBvwGlAf8B3AGbAWwB/wHlAbgBnQH/A/wB/wP8
|
||||
Af8D/AH/A/sB/wP7Af8D+wH/A/sB/wP7Af8D+wH/A/wB/wMkATYBIgGyAd0B/wHDAe8B+wH/ATkB1gH4
|
||||
Af8BIAG2AewB/wEXAYkBqgH/AeAB8gL/ASgBmgHYAf8BAAFOAb4B/wEdAZgBxQH/AQkBhgHFAf8BBwGb
|
||||
Ad4B/wEWAb4B7wH/AbQB5QH5Af8BAAFSAdIB/wgAAcoBlAFGC/8B/gP/Af0B/wL+Af0B/wL+AfwB/wL+
|
||||
AfwB/wL+AfwB/wL+AfwB/wL+AfoB/wL+AfoB/wL8AfkF/wGqAUsBKwH/CAADRQF9A38B/gPVAf8DxQH/
|
||||
A8sB/wPRAf8DyQH/A8cB/wPMAf8DxQH/A70B/wPLAf8DbgH+A0UBfQQAAasBiAFtAfcB6wHEAa0B/wHs
|
||||
AcgBsgH/AeoBwQGpAf8B3gGeAXAB/wHnAbsBoQH/A/wB/wP7Af8D+wH/A/oB/wP6Af8D+gH/A/oB/wP6
|
||||
Af8D/AH/AyQBNgEnAbcB3gH/AcYB8AH8Af8BPgHZAfgB/wFQAeIB/QH/ATcBtwHZAf8BTgG2AdUB/wGQ
|
||||
AbcB0QH/ASkByQHkAf8BLwHfAfUB/wFMAdAB7QH/ARYBmAHcAf8BGAG6Ae0B/wG2AecB+QH/AQABgwHT
|
||||
Af8IAAHMAZcBRwf/AfwD/wH9Af8C/gH8Af8C/gH8Af8C/gH7Af8C/QH6Af8C/QH6Af8C/QH6Af8C/QH6
|
||||
Af8C/AH3Af8C+wH2Bf8BrAFNASwB/wwAA0gBhQPFAf8DwQH/A8UB/wPHAf8DqgH/A6cB/wPBAf8DvgH/
|
||||
A7UB/wOqAf8DSAGFCAADQgF1AbQBjAFqAfkB7AHHAbAB/wHtAcoBtQH/AesBwwGrAf8B3gGhAXQB/wHn
|
||||
AboBnwH/A/sB/wP7Af8D+wH/A/oB/wP6Af8D+AH/A/gB/wP8Af8DJAE2ASwBuwHfAf8BxwHxAfwB/wFD
|
||||
AdwB+QH/ASoBuwHtAf8BNQG9Ae8B/wFFAcYB5wH/AUYBuAHWAf8BwgH2Af0B/wE3Ad8B9wH/ATEB4gH4
|
||||
Af8BTQHTAfAB/wEXAZcB3AH/AagB3AH1Af8BAAGIAdQB/wgAAdEBnAFLBf8C/gH8Af8C/gH8Af8C/gH8
|
||||
Af8C/QH7Af8C/QH7Af8C/QH6Af8C/QH4Af8C+wH5Af8B+wH6AfcB/wH7AfoB9gH/AfsB+AH0Bf8BsAFS
|
||||
ATAB/wQAA1wBzQNfAeMDYQHuA88B/wPGAf8DzAH/A1sBxgMsAUQDLAFEA1sBxgPBAf8DvAH/A7kB/wNh
|
||||
Ae4DWQHjA1oBzQQAA0MBeAHQAZYBfwH+Ae0ByAGzAf8B7QHNAbgB/wHpAb4BowH/AdYBjgFcAf8D/AH/
|
||||
A/wB/wP8Af8D+wH/A/kB/wP5Af8D+AH/A/wB/wMkATYBMAG/AeAB/wHIAfMB/AH/AUkB3wH5Af8BiQHm
|
||||
Af0B/wGVAecC/wGaAeUC/wFNAcoB5wH/AUsBywHnAf8BxwH3Af0B/wEyAdwB9QH/AS4B4QH3Af8BTwHU
|
||||
AfEB/wEcAZkB3gH/AQABjQHWAf8IAAHUAZ4BTQX/Av4B/AH/Av0B+wH/Av0B/AH/Av0B+wH/Av0B+QH/
|
||||
AvwB+AH/AfsB+QH3Af8B+wH5AfUB/wH7AfgB9AH/AfsB9wHyAf8B+wH1AfIF/wGyAVQBMgH/BAADqAH9
|
||||
A+IB/wPSAf8DxgH/A80B/wOxAf8DLAFECAADLAFEA6gB/wPCAf8DtwH/A8AB/wPSAf8DQAH9BwABAQNM
|
||||
AZIB4AGpAYgB/wHrAccBsAH/Ad0BoQF0Af8BvAGlAZUB/wOsAf8D0AH/A9QB/wPvAf8D+QH/A/YB/wP2
|
||||
Af8D/AH/AyQBNgE0AcIB4QH/AckB8wH8Af8BywHzAf0B/wHUAfYB/gH/AdcB9gL/AdgB9AL/AeAB+AL/
|
||||
AakB4wH1Af8BTQHTAe4B/wHHAfcB/QH/ATMB3AH1Af8BLwHiAfcB/wFOAdYB8gH/ARIBmAHeAf8DIQEw
|
||||
BAAB1QGgAU4F/wL9AfwB/wL9AfsB/wL9AfoB/wL8AfkB/wH8AfsB9wH/AfsB+QH1Af8B+wH4AfQB/wH7
|
||||
AfcB8wH/AfsB9QHyAf8B+gHzAe8B/wH4AfIB7AX/AbUBVgE0Af8EAAOoAf0D6QH/A9YB/wPJAf8DzgH/
|
||||
A6UB/wMsAUQIAAMsAUQDrAH/A8QB/wO6Af8DxgH/A90B/wNBAf0HAAEBAyQBNgHwAdYBxgH/Ad4BrQGQ
|
||||
Af8BxAGvAaMB/wPVAf8DuwH/A6YB/wOgAf8DkAH/A8kB/wPzAf8D8gH/A/wB/wMkATYBNQHDAeEB/wGI
|
||||
AaABqAH/A5EB/wOOAf8BLgG5AdwB/wEpAbgB3wH/ASUBtQHeAf8BIQGxAd0B/wETAbAB3gH/AVAB1AHu
|
||||
Af8BxAH2Af0B/wFAAd0B9gH/AUEBygHtAf8BNwGjAdcB/wFeAmQB7AMbASYB2AGiAVEF/wL9AfoB/wL8
|
||||
AfoB/wH8AfsB+QH/AfsB+gH2Af8B+wH4AfUB/wH7AfcB9AH/AfsB9gHxAf8B+AH0Ae4B/wH3AfIB6wH/
|
||||
AfcB8AHqAf8B9gHsAegF/wG3AYEBNgH/BAADXAHNA18B4wNhAe4D2AH/A80B/wO8Af8DWwHGAywBRAMs
|
||||
AUQDWwHGA8MB/wPCAf8DzQH/A2EB7gNfAeMDXAHNBwABAQMkATYD/AH/A/sB/wOsAf8DywH/A9IB/wPJ
|
||||
Af8D0gH/A8YB/wOPAf8D7wH/A+0B/wP8Af8DJAE2BAADWwHDA8YB/wOUAf8DBgEIEAADNwFaAVIB0wHr
|
||||
Af8BsgHjAfkB/wGLAcAB5wH/Aa4B0wH2Af8BxAHgAfwB/wFmAm0B9wHZAaMBUQX/AfwB+wH5Af8B/AH7
|
||||
AfgB/wH7AfkB9wH/AfsB9wH0Af8B+gH3AfIB/wH5AfUB8AH/AfcB8wHtAf8B9gHvAeoB/wH1AesB5wH/
|
||||
AfMB6gHkAf8B8gHnAd4F/wG6AYUBOAH/DAADSAGFA9QB/wPMAf8DyQH/A7oB/wOcAf8DoQH/A8IB/wPG
|
||||
Af8DwQH/A7cB/wNIAYUPAAEBAyQBNgP8Af8D+wH/A9sB/wOyAf8D1gH/A6AB/wOSAf8DwAH/A4oB/wPq
|
||||
Af8D5gH/A/wB/wMkATYEAANUAa4DxAH/A6EB/wMdASkQAAMdASkBOAGZAakB/wFLAb4B5wH/AbQB0gHw
|
||||
Af8B5QHzAv8BrAHSAe8B/wFXAl8B6AHbAaQBUjX/Ab0BhwE7Af8IAANFAX0DhwH+A9wB/wPUAf8D2QH/
|
||||
A9sB/wPWAf8D1AH/A9kB/wPSAf8DywH/A8gB/wN5Af4DRQF9CwABAQMkATYD/AH/A/kB/wPaAf8DtQH/
|
||||
A+YB/wOaAf8DsAH/A68B/wO9Af8D/AH/A/wB/wP8Af8DJAE2BAADQgF1A7oB/wO/Af8DXgHdAxYBHwME
|
||||
AQUDBAEFAxYBHwNlAeUDqAH/AU8BpAGzAf8BLAGlAdgB/wGFAbEB2wH/ARoBnQHQAf8DOAFeAdwBpwFT
|
||||
Af8B3AGnAVMB/wHcAacBUwH/AdwBpwFTAf8B3AGnAVMB/wHcAacBUwH/AdwBpwFTAf8B3AGnAVMB/wHc
|
||||
AacBUwH/AdwBpwFTAf8B3AGnAVMB/wHcAacBUwH/AdwBpwFTAf8B3AGnAVMB/wHAAYsBPgH/CAADRAF7
|
||||
A9wB/wPtAf8D2wH/A2UB9AOBAf4D1gH/A9QB/wN/Af4DZQH0A8sB/wPnAf8DtwH/A0QBewsAAQEDJAE2
|
||||
A/wB/wP3Af8D7wH/A6YB/wPhAf8D0gH/A7QB/wPqAf8D/AH/A/YB/wP0Af8DTQGRAxcBIAQAAwkBDANf
|
||||
AdsDxAH/A74B/wOhAf8DlgH/A5MB/wOXAf8DrgH/A64B/wNfAdsDBwEJDAACqAGFAf0B6AG5AZIB/wHo
|
||||
AbkBkgH/AegBuQGSAf8B6AG5AZIB/wHoAbkBkgH/AegBuQGSAf8B6AG5AZIB/wHoAbkBkgH/AegBuQGS
|
||||
Af8B6AG5AZIB/wHoAbkBkgH/AegBuQGSAf8B6AG5AZIB/wGoAZABQAH9DAADUAGbA6gB/QNkAecDEgEZ
|
||||
A2QB5wPeAf8D3QH/A2QB5wMSARkDZAHnA6cB/QNQAZsQAAMkATYD5AH9A/QB/wP1Af8D1AH/A6UB/wOd
|
||||
Af8DvgH/A+kB/wP8Af8D5wH/A00BkQMXASADAQECCAADIQEwA2AB3gO8Af8DygH/A8wB/wPKAf8DwgH/
|
||||
A60B/wNgAd4DIQEwEAADPgFrA2UB9AHcAacBUwH/AdwBpgFSAf8B2gGkAVIB/wHYAaIBUQH/AdUBoAFO
|
||||
Af8B1AGeAU0B/wHSAZ0BSwH/Ac8BmgFKAf8BzgGZAUgB/wHLAZYBRwH/AckBlAFEAf8DZQH0Az4BaxAA
|
||||
Ax0BKQMKAQ4DAQECA1wB6gPlAf8D5AH/A1wB6gMBAQIDCgEOAx0BKRQAAyMBMwOWAfAD5AH9A/wB/wP8
|
||||
Af8D/AH/A/wB/wP8Af8D/AH/A/gB/wNNAZEDFwEgAwEBAhAAAwkBDANHAYEDVwG6A1wBzANcAcwDVwG6
|
||||
A0cBgQMJAQxsAAM7AWMDWQG/A1kBvwM7AWMgAAMUARwDIwEzAyQBNgMkATYDJAE2AyQBNgMkATYDJAE2
|
||||
AyQBNgMkATYDFwEgAwEBAggAAUIBTQE+BwABPgMAASgDAAFAAwABIAMAAQEBAAEBBgABARYAA/8BAAH8
|
||||
AT8BDwH/AYABAQIAAeACBwH/AYABAQIAAcABAwEAAT8BgAEBAgABwAEDAQABHwGAAQECAAHAAQMBgAEf
|
||||
AcABAwIAAcABAwHAAQ8B4AEHAgABwAEDAcABAwHwAQ8CAAHAAQMBwAEBAfwBPwIAAcABAwHAAQEB/AE/
|
||||
AgABwAEDAcABAQHwAQ8CAAHAAQMB4AEBAeABBwIAAcABAwH4AQEBwAEDAgABwAEDAfwBAAGAAQECAAHA
|
||||
AQMB/AEAAYABAQIAAeABBwH+AQABgAEBAgAD/wHwAYABAQMAAQMC/wH8AT8BwAIAAQMC/wHgAQcBwAIA
|
||||
AQMBAAEBAcABAwMAAQMBAAEBAYABAQMAAQMBAAEBAYABAQMAAQMBAAEBAcABAwMAAQMBAAEBAgABgAIA
|
||||
AQMBAAIBAoACAAEBAQACAQKABAABAQIAAYABAAGHAYABAAEBAcABAwGAAQABhwGAAQABAQGAAQEBgAEA
|
||||
AYACAAEBAYABAQGAAQABgAEHAQABAQHAAQMBwAEAAcABDwEAAQEB4AEHAcABAQHgAR8C/wH8AT8BwAED
|
||||
Cw==
|
||||
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABa
|
||||
HwAAAk1TRnQBSQFMAgEBBwEAAQwBAAEEAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
|
||||
AwABIAMAAQEBAAEgBgABICoAAwoBDQMiATEDIAEvAwUBBxgAAxEBFwGrAUQBGAH/AWIBXwFIAfYDKQE/
|
||||
NAADBgEIA0ABbgNWAbMDXgHdAVICZQH0AUABhgGoAf0BIAFcAbMB/wEQAVEBqAH/AkABngH9AVIBXQFl
|
||||
AfQCWAFeAd0DVgGzAT8CQAFuAwYBCFAAAxgBIQNQAZ0DXQHwA6EB/wOrAf8DpwH/A5UB/wNkAecDSgGK
|
||||
AxABFgwAAboBVgElAf8BwAGJAToB/wG/AYkBPQH/Aa8BSAEiAf8DKgFBMAADWwHEAYcBtwHgAf8BlQHG
|
||||
AeYB/wGbAc0B6QH/AZwBzQHpAf8BmQHHAecB/wGVAcEB5AH/AY4BuAHgAf8BiQGwAd0B/wGBAacB1wH/
|
||||
AVQBmwHPAf8BPgGMAcIB/wEfAVkBrgH/AlkBWwHETAADLwFKA2UB9APOAf8D7QH/A/QB/wP1Af8D9AH/
|
||||
A+8B/wPiAf8DugH/A2QB5wMkATUIAAHDAYgBNAH/Ac8BogFYAf8BzQGiAYAB/wHAAYwBQQH/AbABTQEk
|
||||
Af8CTgFNAZUDMQFOAyYBOQMWAR4DAwEEHAADWwHEAZgBuQHUAf8BxQHHAcQB/wHsAdgBxwH/AfYB6wHj
|
||||
Af8B+gH1AfEB/wHzAecB3gH/Ad8BvwGmAf8B0AGkAYAB/wHLAZoBVQH/AcgBlwFSAf8BowGTAYwB/wFD
|
||||
AWABnAH/AlkBWwHETAADXAHqA94B/wPzAf8D2wH/A9IB/wPbAf8D1gH/A8AB/wPJAf8D5gH/A8QB/wNc
|
||||
AeoIAANAAXEBzAGZAUwB/wHQAaMBgQH/Ac8BpAGDAf8BygGeAVYB/wG8AYUBOAH/Aa8BTAEkAf8BpwE/
|
||||
ARsB/wGeATIBEwH/AVsCWAHGAwcBCRgAAx0BKgHmAcMBpQH/Ae8B1gHAAf8B+wHyAeoB/wH+AfwB+gL/
|
||||
Af4B/QH/Af4B/QH8Af8B/AH2AfAB/wH4AegB2QH/AfYB4wHRAf8B9gHiAc4B/wHmAcgBrQH/Ac4BoAFc
|
||||
Af8DHQEqTAADXAHqA/AB/wPeAf8D1AH/A9IB/wPbAf8D1gH/A78B/wOwAf8DswH/A94B/wNcAeoMAANB
|
||||
AXIBzgGdAVEB/wHVAawBjAH/AcsBmwFRAf8BzAGgAVcB/wHIAZsBUQH/AcUBlQFKAf8BwAGPAUQB/wGs
|
||||
AUgBIwH/A0IBdhwAA1gBuQHtAdMBuwH/AfoB8AHlAf8B/QH5AfUB/wH+AfwB+gH/Af4B/QH8Af8B/QH5
|
||||
AfQB/wH2AeMBzwH/AfcB5QHTAf8B9gHjAdEB/wHdAbkBmgH/A1cBuFAAA1wB6gPyAf8D4gH/A9gB/wPV
|
||||
Af8D3AH/A9gB/wPAAf8DswH/A7cB/wPgAf8DXAHqEAADVgGxAdMBqAGGAf8B1gGsAY4B/wHJAZgBTAH/
|
||||
AcQBkAFDAf8BvwGKAToB/wHCAY8BQgH/Ab8BiwE/Af8CXwFHAfsDHQEpHAADVQGwAawBiwF/Af4B9wHq
|
||||
Ad4B/wH+AfoB9wH/Af4B/AH5Af8B/QH3AfIB/wH6Ae0B4gH/AesB0AG3Af8BlAF/AX4B/gNUAa5UAANc
|
||||
AeoD8wH/A+cB/wPdAf8D2QH/A+AB/wPbAf8DxAH/A7gB/wO7Af8D4QH/A1wB6hAAAzEBTgHUAaMBWQH/
|
||||
AdwBtQGYAf8B0AGhAVgB/wHMAZoBTwH/Ac8BpAGDAf8ByAGaAVEB/wFYAYwBPwH/AUUBuAFVAf8BXwFQ
|
||||
ATIB+wNUAa8DBwEJGAADJwE6A2EB4QHzAeIB0gH/AfwB9AHtAf8B+wHxAecB/wHpAcwBtQH/A2EB3AMm
|
||||
AThYAANcAeoD9AH/A+oB/wPhAf8D3QH/A+MB/wPeAf8DyQH/A70B/wO/Af8D4gH/A1wB6hAAAyYBOQHb
|
||||
AasBiQH/AeEBvQGiAf8B1gGqAYcB/wHZAbMBlAH/Ac4BnwFVAf8DXwH7AUgBvAFXAf8BkwFKASEB/wGw
|
||||
AVABKgH/AaQBPQEcAf8BYQJeAdoDAwEEHAADWQHHAfQB4wHQAf8B8wHfAc0B/wNbAcNgAANcAeoD9QH/
|
||||
A+4B/wPmAf8D4gH/A+YB/wPhAf8DzQH/A8IB/wPCAf8D4wH/A1wB6hAAAxYBHgHgAbEBjwH/AeYBxAGr
|
||||
Af8B4gG/AaQB/wHYAa0BjgH/AWoBXAFNAfoDQwF3AWYBUQErAfwBuwGEATgB/wHAAY8BRAH/AbwBigE8
|
||||
Af8BnAEtARAB/wMWAR4cAANbAcMB9AHhAc4B/wHzAd8BzAH/A1kBwmAAA1wB6gP2Af8D6wH/A94B/wPW
|
||||
Af8D1QH/A9EB/wPDAf8DvAH/A8AB/wPlAf8DXAHqEAADAwEEA2EB2gHkAbsBnwH/AeQBuwGfAf8BZQFn
|
||||
AVwB/AFRAcEBWgH/AWsBXwErAfwBxwGWAUoB/wHLAZ4BVgH/AbwBhQE0Af8BwwGSAUcB/wGmAT4BGgH/
|
||||
AyYBORQAAyYBOANeAd0B8wHdAckB/wH6Ae4B4gH/AfkB6wHeAf8B7QHQAbYB/wNfAdsDJgE4WAADXAHq
|
||||
A/cB/wPnAf8D7wH/A/YB/wP7Af8D+gH/A/AB/wPeAf8DwwH/A+YB/wNcAeoUAAMHAQkDVAGvA2oB+QFS
|
||||
AcUBggH/AbUBsAGBAf8B2AGwAZIB/wHXAa4BjwH/AckBlwFKAf8BwwGPAUEB/wHIAZsBUQH/AbEBTAEl
|
||||
Af8DMQFOEAADVAGvAbgBmQF/Af4B+QHsAeAB/wH9AfgB9AH/AfsB8AHmAf8B+AHnAdcB/wH5AesB3gH/
|
||||
AfIB2gHFAf8BpQJ/Af4DVAGuVAADXAHqA/gB/wP+Gf8D+wH/A+oB/wNcAeocAAMbASYCqAGGAf0B4gG+
|
||||
AaMB/wHfAbcBmgH/AdUBqAGGAf8B0AGhAVgB/wHLAZoBTgH/Ac4BogGAAf8BvwGLAT0B/wJOAU0BlQwA
|
||||
A1cBuAH5AeMBzQH/AfsB8wHsAf8B/gH6AfcB/wH+AfsB+AH/AfwB9QHtAf8B9wHmAdUB/wH2AeEBzAH/
|
||||
AfkB7AHfAf8B+QHrAd0B/wHrAc4BtAH/A1cBuFAAA1kBvwPhAf8D/hn/A/sB/wPPAf8DUgGhIAADQgF2
|
||||
AeQBugGdAf8B5gHEAasB/wHiAb4BpAH/Ad4BuQGcAf8B2QGyAZMB/wHRAaMBWgH/AdEBpgGFAf8BuwFa
|
||||
ASwB/wMpAT8EAAMdASoBwAHFAc0B/wGaAbcB3AH/AV4BpgHVAf8BRAGVAcoB/wEwAYcBvgH/ASABXAGz
|
||||
Af8BEAFRAagB/wEEAUgBnwH/AQABRAGYAf8BDQFMAZoB/wE0AYMBpwH/AYgBlAGaAf8DHQEqTAADHQEq
|
||||
A1wB0QPQAf8D6AH/A/MB/wP9Af8D/AH/A+0B/wPgAf8DwgH/A1sBwwMUARsgAAMHAQkDWwHGAeMBtAGT
|
||||
Af8B3wGxAY4B/wHaAasBiQH/AdoBrQGMAf8B3AG1AZgB/wHXAa8BkAH/AcwBmwFPAf8BbgJNAfoEAANc
|
||||
AdEBhwG3AeAB/wGVAcYB5gH/AZsBzQHpAf8BnAHNAekB/wGZAccB5wH/AZUBwQHkAf8BjgG4AeAB/wGJ
|
||||
AbAB3QH/AYEBpwHXAf8BVAGbAc8B/wE+AYwBwgH/AR8BWQGuAf8BWAJcAdFQAAMFAQcDNQFVA1QBrgNg
|
||||
AdYDdgH7A2oB+QNcAc0DUgGpAy0BRgMCAQMoAAMDAQQDFgEeAyYBOQMxBE4BlAHYAacBggH/AdcBrAGL
|
||||
Af8B0wGnAYQB/wJiAVYB9gQAA1sBxAGHAbcB4AH/AZUBxgHmAf8BnQHPAeoB/wGhAdMB7AH/AaAB0QHr
|
||||
Af8BmwHKAegB/wGWAcIB5QH/AY8BugHiAf8BhwGxAd0B/wFaAaMB1AH/AUIBkAHEAf8BHwFZAa4B/wJZ
|
||||
AVsBxLQAAykBPgGEAWQBXwH7A2IB9gMuAUgEAAMGAQgDQAFuA1YBswNeAd0DZQH0AUQBnwGoAf0BSgGZ
|
||||
AdEB/wE9AZAByAH/AUABhgGoAf0BUgJlAfQBWAJeAd0DVgGzAT8CQAFuAwYBCEUAAZ0B2QH/AQABmQHY
|
||||
Af8BAAGUAdcB/wEAAZAB1gH/AQABjAHVAf8BAAGIAdQB/wEAAYQB0wH/AQABgAHSAf8BAAEzAdEB/wEA
|
||||
ATAB0QH/AQABLQHQAf8BAAEqAc8B/wEAAScBzwH/AQABJQHOAf9gAAM7AWMDWAG/A1cBvwM7AWMgAAMV
|
||||
AR0DIwE0AyQBNgMkATYDJAE2AyQBNgMkATYDJAE2AyQBNgMkATYDJAE2AyQBNgMjATMDFQEdAQABowHa
|
||||
Af8BvAHrAfoB/wG8AesB/AH/Ab8B7gH+Af8BxgH0Av8BzgH4Av8B0wH6Av8B0AH4Av8BxwHyAv8BugHp
|
||||
AfwB/wGzAeQB+QH/AbAB4gH4Af8BsAHiAfgB/wEAASgBzwH/VAADHQEpAwoBDgMBAQIDXAHqA70B/wOy
|
||||
Af8DXAHqAwEBAgMKAQ4DHQEpFAADIwE0A2AB9QOuAf0D/AH/A/wB/wP8Af8D/AH/A/wB/wP8Af8D/AH/
|
||||
A/wB/wOuAf0DXwHzAyMBMwEAAagB2wH/Ab8B7AH7Af8BEAHPAfUB/wEAAbAB7AH/AgABEQH/AQABGAGJ
|
||||
Af8BAAGJAb4B/wEAAZoByAH/AQABrgHnAf8BAAGlAeYB/wEAAZoB4QH/AQABuAHuAf8BsQHjAfgB/wEA
|
||||
ASwB0AH/CAADUgGpAcMBjgEjAf8BwAGLASEB/wG+AYgBHwH/AbsBhQEcAf8BuQGDARoB/wG0ATkBFwH/
|
||||
AbIBNwEVAf8BsQE2ARMB/wGuATQBEgH/Aa0BMQERAf8BqwEwAQ8B/wGpAS4BDgH/AakBLAEMAf8DUgGp
|
||||
DAADUAGbA0AB/QNkAecDEgEZA2QB5wPLAf8DxwH/A2IB5wMSARkDXAHnA0AB/QNPAZsIAAM3AVsCXQFS
|
||||
AfACYgFJAfYB5QG3AZoB/wH7AvoB/wP8Af8D/AH/A/wB/wP8Af8D/AH/A/wB/wP8Af8D/AH/A/wB/wOu
|
||||
Af0DJAE2AQABrQHcAf8BwQHuAfsB/wEWAdMB9wH/ASMB2wH8Af8BAAEeAYUB/wGUAccB+QH/AZEByQH5
|
||||
Af8BAAGFAckB/wEAASEBrgH/AQoBvQHsAf8BAAG+Ae8B/wEAAboB7gH/AbMB4wH5Af8BAAEwAdEB/wgA
|
||||
AcgBkgEnNf8BqQEtAQwB/wgAA0QBewO8Af8D3gH/A6YB/wNlAfQDfwH+A8QB/wPCAf8DbQH+A2UB9AOm
|
||||
Af8D0gH/A4AB/wNEAXsEAANiAe8B5gG4AZwB/wHpAb8BpQH/AdwBmwFPAf8B5QG4AZ0B/wP8Af8D/AH/
|
||||
A/wB/wP7Af8D+wH/A/sB/wP7Af8D+wH/A/sB/wP8Af8DJAE2AQUBsgHdAf8BwwHvAfsB/wEcAdYB+AH/
|
||||
AQMBtgHsAf8BAAGJAaoB/wHgAfIC/wELAZoB2AH/AQABMQG+Af8BAAGYAcUB/wEAAYYBxQH/AQABmwHe
|
||||
Af8BAAG+Ae8B/wG0AeUB+QH/AQABNQHSAf8IAAHKAZQBKQv/Af4D/wH9Af8C/gH9Af8C/gH8Af8C/gH8
|
||||
Af8C/gH8Af8C/gH8Af8C/gH6Af8C/gH6Af8C/AH5Bf8BqgEuAQ4B/wgAA0UBfQN/Af4D1QH/A8UB/wPL
|
||||
Af8D0QH/A8kB/wPHAf8DzAH/A8UB/wO9Af8DywH/A24B/gNFAX0EAANtAfcB6wHEAa0B/wHsAcgBsgH/
|
||||
AeoBwQGpAf8B3gGeAVMB/wHnAbsBoQH/A/wB/wP7Af8D+wH/A/oB/wP6Af8D+gH/A/oB/wP6Af8D/AH/
|
||||
AyQBNgEKAbcB3gH/AcYB8AH8Af8BIQHZAfgB/wEzAeIB/QH/ARoBtwHZAf8BMQG2AdUB/wGQAbcB0QH/
|
||||
AQwByQHkAf8BEgHfAfUB/wEvAdAB7QH/AQABmAHcAf8BAAG6Ae0B/wG2AecB+QH/AQABgwHTAf8IAAHM
|
||||
AZcBKgf/AfwD/wH9Af8C/gH8Af8C/gH8Af8C/gH7Af8C/QH6Af8C/QH6Af8C/QH6Af8C/QH6Af8C/AH3
|
||||
Af8C+wH2Bf8BrAEwAQ8B/wwAA0gBhQPFAf8DwQH/A8UB/wPHAf8DqgH/A6cB/wPBAf8DvgH/A7UB/wOq
|
||||
Af8DSAGFCAADQgF1AXoCagH5AewBxwGwAf8B7QHKAbUB/wHrAcMBqwH/Ad4BoQFXAf8B5wG6AZ8B/wP7
|
||||
Af8D+wH/A/sB/wP6Af8D+gH/A/gB/wP4Af8D/AH/AyQBNgEPAbsB3wH/AccB8QH8Af8BJgHcAfkB/wEN
|
||||
AbsB7QH/ARgBvQHvAf8BKAHGAecB/wEpAbgB1gH/AcIB9gH9Af8BGgHfAfcB/wEUAeIB+AH/ATAB0wHw
|
||||
Af8BAAGXAdwB/wGoAdwB9QH/AQABiAHUAf8IAAHRAZwBLgX/Av4B/AH/Av4B/AH/Av4B/AH/Av0B+wH/
|
||||
Av0B+wH/Av0B+gH/Av0B+AH/AvsB+QH/AfsB+gH3Af8B+wH6AfYB/wH7AfgB9AX/AbABNQETAf8EAANc
|
||||
Ac0DXwHjA2EB7gPPAf8DxgH/A8wB/wNbAcYDLAFEAywBRANbAcYDwQH/A7wB/wO5Af8DYQHuA1kB4wNa
|
||||
Ac0EAANDAXgBlgJ/Af4B7QHIAbMB/wHtAc0BuAH/AekBvgGjAf8B1gGOAT8B/wP8Af8D/AH/A/wB/wP7
|
||||
Af8D+QH/A/kB/wP4Af8D/AH/AyQBNgETAb8B4AH/AcgB8wH8Af8BLAHfAfkB/wGJAeYB/QH/AZUB5wL/
|
||||
AZoB5QL/ATABygHnAf8BLgHLAecB/wHHAfcB/QH/ARUB3AH1Af8BEQHhAfcB/wEyAdQB8QH/AQABmQHe
|
||||
Af8BAAGNAdYB/wgAAdQBngEwBf8C/gH8Af8C/QH7Af8C/QH8Af8C/QH7Af8C/QH5Af8C/AH4Af8B+wH5
|
||||
AfcB/wH7AfkB9QH/AfsB+AH0Af8B+wH3AfIB/wH7AfUB8gX/AbIBNwEVAf8EAAOoAf0D4gH/A9IB/wPG
|
||||
Af8DzQH/A7EB/wMsAUQIAAMsAUQDqAH/A8IB/wO3Af8DwAH/A9IB/wNAAf0HAAEBA0wBkgHgAakBiAH/
|
||||
AesBxwGwAf8B3QGhAVcB/wG8AaUBlQH/A6wB/wPQAf8D1AH/A+8B/wP5Af8D9gH/A/YB/wP8Af8DJAE2
|
||||
ARcBwgHhAf8ByQHzAfwB/wHLAfMB/QH/AdQB9gH+Af8B1wH2Av8B2AH0Av8B4AH4Av8BqQHjAfUB/wEw
|
||||
AdMB7gH/AccB9wH9Af8BFgHcAfUB/wESAeIB9wH/ATEB1gHyAf8BAAGYAd4B/wMhATAEAAHVAaABMQX/
|
||||
Av0B/AH/Av0B+wH/Av0B+gH/AvwB+QH/AfwB+wH3Af8B+wH5AfUB/wH7AfgB9AH/AfsB9wHzAf8B+wH1
|
||||
AfIB/wH6AfMB7wH/AfgB8gHsBf8BtQE5ARcB/wQAA6gB/QPpAf8D1gH/A8kB/wPOAf8DpQH/AywBRAgA
|
||||
AywBRAOsAf8DxAH/A7oB/wPGAf8D3QH/A0AB/QcAAQEDJAE2AfAB1gHGAf8B3gGtAZAB/wHEAa8BowH/
|
||||
A9UB/wO7Af8DpgH/A6AB/wOQAf8DyQH/A/MB/wPyAf8D/AH/AyQBNgEYAcMB4QH/AYgBoAGoAf8DkQH/
|
||||
A44B/wERAbkB3AH/AQwBuAHfAf8BCAG1Ad4B/wEEAbEB3QH/AQABsAHeAf8BMwHUAe4B/wHEAfYB/QH/
|
||||
ASMB3QH2Af8BJAHKAe0B/wEaAaMB1wH/AV4CZAHsAxsBJgHYAaIBNAX/Av0B+gH/AvwB+gH/AfwB+wH5
|
||||
Af8B+wH6AfYB/wH7AfgB9QH/AfsB9wH0Af8B+wH2AfEB/wH4AfQB7gH/AfcB8gHrAf8B9wHwAeoB/wH2
|
||||
AewB6AX/AbcBgQEZAf8EAANcAc0DXwHjA2EB7gPYAf8DzQH/A7wB/wNbAcYDLAFEAywBRANbAcYDwwH/
|
||||
A8IB/wPNAf8DYQHuA18B4wNcAc0HAAEBAyQBNgP8Af8D+wH/A6wB/wPLAf8D0gH/A8kB/wPSAf8DxgH/
|
||||
A48B/wPvAf8D7QH/A/wB/wMkATYEAANbAcMDxgH/A5QB/wMGAQgQAAM3AVoBNQHTAesB/wGyAeMB+QH/
|
||||
AYsBwAHnAf8BrgHTAfYB/wHEAeAB/AH/AWYCbQH3AdkBowE0Bf8B/AH7AfkB/wH8AfsB+AH/AfsB+QH3
|
||||
Af8B+wH3AfQB/wH6AfcB8gH/AfkB9QHwAf8B9wHzAe0B/wH2Ae8B6gH/AfUB6wHnAf8B8wHqAeQB/wHy
|
||||
AecB3gX/AboBhQEbAf8MAANIAYUD1AH/A8wB/wPJAf8DugH/A5wB/wOhAf8DwgH/A8YB/wPBAf8DtwH/
|
||||
A0gBhQ8AAQEDJAE2A/wB/wP7Af8D2wH/A7IB/wPWAf8DoAH/A5IB/wPAAf8DigH/A+oB/wPmAf8D/AH/
|
||||
AyQBNgQAA1QBrgPEAf8DoQH/Ax0BKRAAAx0BKQEbAZkBqQH/AS4BvgHnAf8BtAHSAfAB/wHlAfMC/wGs
|
||||
AdIB7wH/AVcCXwHoAdsBpAE1Nf8BvQGHAR4B/wgAA0UBfQN/Af4D3AH/A9QB/wPZAf8D2wH/A9YB/wPU
|
||||
Af8D2QH/A9IB/wPLAf8DyAH/A3kB/gNFAX0LAAEBAyQBNgP8Af8D+QH/A9oB/wO1Af8D5gH/A5oB/wOw
|
||||
Af8DrwH/A70B/wP8Af8D/AH/A/wB/wMkATYEAANCAXUDugH/A78B/wNeAd0DFgEfAwQBBQMEAQUDFgEf
|
||||
A2UB5QOoAf8BMgGkAbMB/wEPAaUB2AH/AYUBsQHbAf8BAAGdAdAB/wM4AV4B3AGnATYB/wHcAacBNgH/
|
||||
AdwBpwE2Af8B3AGnATYB/wHcAacBNgH/AdwBpwE2Af8B3AGnATYB/wHcAacBNgH/AdwBpwE2Af8B3AGn
|
||||
ATYB/wHcAacBNgH/AdwBpwE2Af8B3AGnATYB/wHcAacBNgH/AcABiwEhAf8IAANEAXsD3AH/A+0B/wPb
|
||||
Af8DZQH0A38B/gPWAf8D1AH/A38B/gNlAfQDywH/A+cB/wO3Af8DRAF7CwABAQMkATYD/AH/A/cB/wPv
|
||||
Af8DpgH/A+EB/wPSAf8DtAH/A+oB/wP8Af8D9gH/A/QB/wNNAZEDFwEgBAADCQEMA18B2wPEAf8DvgH/
|
||||
A6EB/wOWAf8DkwH/A5cB/wOuAf8DrgH/A18B2wMHAQkMAAKoAYUB/QHoAbkBkgH/AegBuQGSAf8B6AG5
|
||||
AZIB/wHoAbkBkgH/AegBuQGSAf8B6AG5AZIB/wHoAbkBkgH/AegBuQGSAf8B6AG5AZIB/wHoAbkBkgH/
|
||||
AegBuQGSAf8B6AG5AZIB/wHoAbkBkgH/AagBkAFAAf0MAANQAZsDqAH9A2QB5wMSARkDZAHnA94B/wPd
|
||||
Af8DZAHnAxIBGQNkAecDpwH9A1ABmxAAAyQBNgOuAf0D9AH/A/UB/wPUAf8DpQH/A50B/wO+Af8D6QH/
|
||||
A/wB/wPnAf8DTQGRAxcBIAMBAQIIAAMhATADYAHeA7wB/wPKAf8DzAH/A8oB/wPCAf8DrQH/A2AB3gMh
|
||||
ATAQAAM+AWsDZQH0AdwBpwE2Af8B3AGmATUB/wHaAaQBNQH/AdgBogE0Af8B1QGgATEB/wHUAZ4BMAH/
|
||||
AdIBnQEuAf8BzwGaAS0B/wHOAZkBKwH/AcsBlgEqAf8ByQGUAScB/wNlAfQDPgFrEAADHQEpAwoBDgMB
|
||||
AQIDXAHqA+UB/wPkAf8DXAHqAwEBAgMKAQ4DHQEpFAADIwEzA10B8AOuAf0D/AH/A/wB/wP8Af8D/AH/
|
||||
A/wB/wP8Af8D+AH/A00BkQMXASADAQECEAADCQEMA0cBgQNXAboDXAHMA1wBzANXAboDRwGBAwkBDGwA
|
||||
AzsBYwNZAb8DWQG/AzsBYyAAAxQBHAMjATMDJAE2AyQBNgMkATYDJAE2AyQBNgMkATYDJAE2AyQBNgMX
|
||||
ASADAQECCAABQgFNAT4HAAE+AwABKAMAAUADAAEgAwABAQEAAQEGAAEBFgAD/wEAAfwBPwEPAf8BgAEB
|
||||
AgAB4AIHAf8BgAEBAgABwAEDAQABPwGAAQECAAHAAQMBAAEfAYABAQIAAcABAwGAAR8BwAEDAgABwAED
|
||||
AcABDwHgAQcCAAHAAQMBwAEDAfABDwIAAcABAwHAAQEB/AE/AgABwAEDAcABAQH8AT8CAAHAAQMBwAEB
|
||||
AfABDwIAAcABAwHgAQEB4AEHAgABwAEDAfgBAQHAAQMCAAHAAQMB/AEAAYABAQIAAcABAwH8AQABgAEB
|
||||
AgAB4AEHAf4BAAGAAQECAAP/AfABgAEBAwABAwL/AfwBPwHAAgABAwL/AeABBwHAAgABAwEAAQEBwAED
|
||||
AwABAwEAAQEBgAEBAwABAwEAAQEBgAEBAwABAwEAAQEBwAEDAwABAwEAAQECAAGAAgABAwEAAgECgAIA
|
||||
AQEBAAIBAoAEAAEBAgABgAEAAYcBgAEAAQEBwAEDAYABAAGHAYABAAEBAYABAQGAAQABgAIAAQEBgAEB
|
||||
AYABAAGAAQcBAAEBAcABAwHAAQABwAEPAQABAQHgAQcBwAEBAeABHwL/AfwBPwHAAQML
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -71,7 +71,7 @@ namespace ProcessHacker
|
||||
_provider.Dictionary[s].Status.ServiceStatusProcess.CurrentState.ToString() })).Name = s;
|
||||
}
|
||||
|
||||
_provider.DictionaryModified += new Provider<string, ServiceItem>.ProviderDictionaryModified(_provider_DictionaryModified);
|
||||
_provider.DictionaryModified += new ServiceProvider.ProviderDictionaryModified(_provider_DictionaryModified);
|
||||
|
||||
this.FillComboBox(comboErrorControl, typeof(Win32.SERVICE_ERROR_CONTROL));
|
||||
this.FillComboBox(comboStartType, typeof(Win32.SERVICE_START_TYPE));
|
||||
@@ -87,7 +87,7 @@ namespace ProcessHacker
|
||||
|
||||
private void ServiceWindow_FormClosing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
_provider.DictionaryModified -= new Provider<string, ServiceItem>.ProviderDictionaryModified(_provider_DictionaryModified);
|
||||
_provider.DictionaryModified -= new ServiceProvider.ProviderDictionaryModified(_provider_DictionaryModified);
|
||||
}
|
||||
|
||||
private void _provider_DictionaryModified(ServiceItem oldItem, ServiceItem newItem)
|
||||
|
||||
@@ -124,6 +124,10 @@
|
||||
<DependentUpon>ColorModifier.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Components\ModuleList.resx">
|
||||
<DependentUpon>ModuleList.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Components\HandleList.resx">
|
||||
<DependentUpon>HandleList.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
@@ -159,6 +163,10 @@
|
||||
<DependentUpon>AboutWindow.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Forms\ListWindow.resx">
|
||||
<DependentUpon>ListWindow.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Forms\ProcessWindow.resx">
|
||||
<DependentUpon>ProcessWindow.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
@@ -253,6 +261,12 @@
|
||||
<Compile Include="Components\ColorModifier.Designer.cs">
|
||||
<DependentUpon>ColorModifier.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Components\ModuleList.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Components\ModuleList.Designer.cs">
|
||||
<DependentUpon>ModuleList.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Components\HandleList.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
@@ -305,6 +319,12 @@
|
||||
<Compile Include="FormHelper\HandleFilter.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Forms\ListWindow.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Forms\ListWindow.Designer.cs">
|
||||
<DependentUpon>ListWindow.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Forms\ProcessWindow.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
@@ -385,6 +405,7 @@
|
||||
<Compile Include="PE\ImageSubsystem.cs" />
|
||||
<Compile Include="PE\MachineType.cs" />
|
||||
<Compile Include="PE\PEFile.cs" />
|
||||
<Compile Include="Providers\ModuleProvider.cs" />
|
||||
<Compile Include="Providers\HandleProvider.cs" />
|
||||
<Compile Include="Providers\ServiceProvider.cs" />
|
||||
<Compile Include="Providers\ThreadProvider.cs" />
|
||||
@@ -513,7 +534,9 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Icons\Process_small.ico" />
|
||||
<None Include="Icons\Process.ico" />
|
||||
<Content Include="ProcessHacker.ico" />
|
||||
<None Include="Resources\folder_go.png" />
|
||||
<None Include="Resources\report_user.png" />
|
||||
<None Include="Resources\asterisk_orange.png" />
|
||||
<None Include="Resources\cog.png" />
|
||||
|
||||
@@ -221,6 +221,13 @@ namespace ProcessHacker.Properties {
|
||||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Bitmap folder_go {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("folder_go", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Bitmap group {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("group", resourceCulture);
|
||||
@@ -305,6 +312,13 @@ namespace ProcessHacker.Properties {
|
||||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Icon Process {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("Process", resourceCulture);
|
||||
return ((System.Drawing.Icon)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Icon Process_small {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("Process_small", resourceCulture);
|
||||
|
||||
@@ -214,6 +214,9 @@
|
||||
<data name="help" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\help.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="Process_small" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Icons\Process_small.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="table_relationship" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\table_relationship.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
@@ -226,6 +229,9 @@
|
||||
<data name="pencil" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\pencil.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="report_user" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\report_user.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="folder_explore" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\folder_explore.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
@@ -241,10 +247,10 @@
|
||||
<data name="disk" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\disk.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="report_user" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\report_user.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
<data name="folder_go" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\folder_go.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="Process_small" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Icons\Process_small.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
<data name="Process" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Icons\Process.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
</root>
|
||||
+1
-1
@@ -709,7 +709,7 @@ namespace ProcessHacker.Properties {
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("779, 569")]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("493, 465")]
|
||||
public global::System.Drawing.Size ProcessWindowSize {
|
||||
get {
|
||||
return ((global::System.Drawing.Size)(this["ProcessWindowSize"]));
|
||||
|
||||
@@ -174,7 +174,7 @@
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="ProcessWindowSize" Type="System.Drawing.Size" Scope="User">
|
||||
<Value Profile="(Default)">779, 569</Value>
|
||||
<Value Profile="(Default)">493, 465</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
</SettingsFile>
|
||||
@@ -0,0 +1,184 @@
|
||||
/*
|
||||
* Process Hacker
|
||||
*
|
||||
* Copyright (C) 2008 wj32
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.Threading;
|
||||
using System.Windows.Forms;
|
||||
using System.Text;
|
||||
|
||||
namespace ProcessHacker
|
||||
{
|
||||
public struct ModuleItem
|
||||
{
|
||||
public int BaseAddress;
|
||||
public int Size;
|
||||
public string Name;
|
||||
public string FileName;
|
||||
public string FileDescription;
|
||||
public string FileVersion;
|
||||
}
|
||||
|
||||
public class ModuleProvider : Provider<int, ModuleItem>
|
||||
{
|
||||
private int _pid;
|
||||
|
||||
public ModuleProvider(int PID)
|
||||
: base()
|
||||
{
|
||||
_pid = PID;
|
||||
|
||||
this.ProviderUpdate += new ProviderUpdateOnce(UpdateOnce);
|
||||
}
|
||||
|
||||
private void UpdateOnce()
|
||||
{
|
||||
if (_pid == 4)
|
||||
this.UpdateDrivers();
|
||||
else
|
||||
this.UpdateModules();
|
||||
}
|
||||
|
||||
private void UpdateDrivers()
|
||||
{
|
||||
int requiredSize = 0;
|
||||
int[] imageBases;
|
||||
List<int> done = new List<int>();
|
||||
Dictionary<int, object> bases = new Dictionary<int, object>();
|
||||
Dictionary<int, ModuleItem> newdictionary = new Dictionary<int, ModuleItem>(this.Dictionary);
|
||||
|
||||
Win32.EnumDeviceDrivers(null, 0, out requiredSize);
|
||||
imageBases = new int[requiredSize];
|
||||
Win32.EnumDeviceDrivers(imageBases, requiredSize * sizeof(int), out requiredSize);
|
||||
|
||||
for (int i = 0; i < requiredSize; i++)
|
||||
{
|
||||
if (bases.ContainsKey(imageBases[i]) || imageBases[i] == 0)
|
||||
continue;
|
||||
|
||||
bases.Add(imageBases[i], null);
|
||||
}
|
||||
|
||||
// look for unloaded drivers
|
||||
foreach (int b in Dictionary.Keys)
|
||||
{
|
||||
if (!bases.ContainsKey(b))
|
||||
{
|
||||
this.CallDictionaryRemoved(this.Dictionary[b]);
|
||||
newdictionary.Remove(b);
|
||||
}
|
||||
}
|
||||
|
||||
// look for new drivers
|
||||
foreach (int b in bases.Keys)
|
||||
{
|
||||
if (!Dictionary.ContainsKey(b))
|
||||
{
|
||||
ModuleItem item = new ModuleItem();
|
||||
StringBuilder name = new StringBuilder(256);
|
||||
StringBuilder filename = new StringBuilder(256);
|
||||
|
||||
Win32.GetDeviceDriverBaseName(b, name, 255);
|
||||
Win32.GetDeviceDriverFileName(b, filename, 255);
|
||||
|
||||
item.BaseAddress = b;
|
||||
item.Name = name.ToString();
|
||||
item.FileName = Misc.GetRealPath(filename.ToString());
|
||||
|
||||
try
|
||||
{
|
||||
FileVersionInfo info = FileVersionInfo.GetVersionInfo(item.FileName);
|
||||
|
||||
item.FileDescription = info.FileDescription;
|
||||
item.FileVersion = info.FileVersion;
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
|
||||
newdictionary.Add(b, item);
|
||||
this.CallDictionaryAdded(item);
|
||||
}
|
||||
}
|
||||
|
||||
this.Dictionary = newdictionary;
|
||||
}
|
||||
|
||||
private void UpdateModules()
|
||||
{
|
||||
Process process = Process.GetProcessById(_pid);
|
||||
ProcessModuleCollection modulesCollection = process.Modules;
|
||||
Dictionary<int, ProcessModule> modules = new Dictionary<int, ProcessModule>();
|
||||
Dictionary<int, ModuleItem> newdictionary = new Dictionary<int, ModuleItem>(this.Dictionary);
|
||||
|
||||
foreach (ProcessModule m in modulesCollection)
|
||||
modules.Add(m.BaseAddress.ToInt32(), m);
|
||||
|
||||
// look for unloaded modules
|
||||
foreach (int b in Dictionary.Keys)
|
||||
{
|
||||
if (!modules.ContainsKey(b))
|
||||
{
|
||||
this.CallDictionaryRemoved(this.Dictionary[b]);
|
||||
newdictionary.Remove(b);
|
||||
}
|
||||
}
|
||||
|
||||
// look for new modules
|
||||
foreach (int b in modules.Keys)
|
||||
{
|
||||
if (!Dictionary.ContainsKey(b))
|
||||
{
|
||||
ProcessModule m = modules[b];
|
||||
ModuleItem item = new ModuleItem();
|
||||
|
||||
item.Name = m.ModuleName;
|
||||
|
||||
try { item.FileName = Misc.GetRealPath(m.FileName); }
|
||||
catch { }
|
||||
try { item.BaseAddress = b; }
|
||||
catch { }
|
||||
try { item.Size = m.ModuleMemorySize; }
|
||||
catch { }
|
||||
|
||||
try
|
||||
{
|
||||
FileVersionInfo info = FileVersionInfo.GetVersionInfo(item.FileName);
|
||||
|
||||
item.FileDescription = info.FileDescription;
|
||||
item.FileVersion = info.FileVersion;
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
|
||||
newdictionary.Add(b, item);
|
||||
this.CallDictionaryAdded(item);
|
||||
}
|
||||
}
|
||||
|
||||
this.Dictionary = newdictionary;
|
||||
}
|
||||
|
||||
public int PID
|
||||
{
|
||||
get { return _pid; }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -48,6 +48,7 @@ namespace ProcessHacker
|
||||
public Win32.TokenHandle TokenQueryHandle;
|
||||
public Win32.ProcessHandle ProcessQueryHandle;
|
||||
public Win32.ProcessHandle ProcessQueryLimitedHandle;
|
||||
public Win32.ProcessHandle ProcessQueryLimitedVmReadHandle;
|
||||
}
|
||||
|
||||
public class ProcessProvider : Provider<int, ProcessItem>
|
||||
@@ -239,10 +240,11 @@ namespace ProcessHacker
|
||||
|
||||
try
|
||||
{
|
||||
using (Win32.ProcessHandle phandle =
|
||||
item.ProcessQueryLimitedVmReadHandle =
|
||||
new Win32.ProcessHandle(pid,
|
||||
Program.MinProcessQueryRights | Win32.PROCESS_RIGHTS.PROCESS_VM_READ))
|
||||
item.CmdLine = phandle.GetCommandLine();
|
||||
Program.MinProcessQueryRights | Win32.PROCESS_RIGHTS.PROCESS_VM_READ);
|
||||
|
||||
item.CmdLine = item.ProcessQueryLimitedVmReadHandle.GetCommandLine();
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
|
||||
@@ -90,16 +90,16 @@ namespace ProcessHacker
|
||||
{
|
||||
Process process = Process.GetProcessById(_pid);
|
||||
ProcessThreadCollection threads = process.Threads;
|
||||
List<int> tids = new List<int>();
|
||||
Dictionary<int, ProcessThread> tids = new Dictionary<int, ProcessThread>();
|
||||
Dictionary<int, ThreadItem> newdictionary = new Dictionary<int, ThreadItem>(this.Dictionary);
|
||||
|
||||
foreach (ProcessThread t in threads)
|
||||
tids.Add(t.Id);
|
||||
tids.Add(t.Id, t);
|
||||
|
||||
// look for dead threads
|
||||
foreach (int tid in Dictionary.Keys)
|
||||
{
|
||||
if (!tids.Contains(tid))
|
||||
if (!tids.ContainsKey(tid))
|
||||
{
|
||||
this.CallDictionaryRemoved(this.Dictionary[tid]);
|
||||
newdictionary.Remove(tid);
|
||||
@@ -107,9 +107,11 @@ namespace ProcessHacker
|
||||
}
|
||||
|
||||
// look for new threads
|
||||
foreach (ProcessThread t in threads)
|
||||
foreach (int tid in tids.Keys)
|
||||
{
|
||||
if (!Dictionary.ContainsKey(t.Id))
|
||||
ProcessThread t = tids[tid];
|
||||
|
||||
if (!Dictionary.ContainsKey(tid))
|
||||
{
|
||||
ThreadItem item = new ThreadItem();
|
||||
|
||||
@@ -125,7 +127,7 @@ namespace ProcessHacker
|
||||
try
|
||||
{
|
||||
using (Win32.ThreadHandle handle =
|
||||
new Win32.ThreadHandle(t.Id, Win32.THREAD_RIGHTS.THREAD_QUERY_INFORMATION))
|
||||
new Win32.ThreadHandle(tid, Win32.THREAD_RIGHTS.THREAD_QUERY_INFORMATION))
|
||||
{
|
||||
int retLen;
|
||||
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 694 B |
@@ -29,6 +29,21 @@ namespace ProcessHacker
|
||||
/// </summary>
|
||||
public class ProcessHandle : Win32Handle, IWithToken
|
||||
{
|
||||
/// <summary>
|
||||
/// Specifies an offset in a process' process environment block (PEB).
|
||||
/// </summary>
|
||||
public enum PEBOffset
|
||||
{
|
||||
CurrentDirectoryPath = 0x24,
|
||||
DllPath = 0x30,
|
||||
ImagePathName = 0x38,
|
||||
CommandLine = 0x40,
|
||||
WindowTitle = 0x70,
|
||||
DesktopName = 0x78,
|
||||
ShellInfo = 0x80,
|
||||
RuntimeData = 0x88
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a process handle using an existing handle.
|
||||
/// The handle will not be closed automatically.
|
||||
@@ -90,7 +105,7 @@ namespace ProcessHacker
|
||||
/// <returns>A string.</returns>
|
||||
public string GetCommandLine()
|
||||
{
|
||||
return this.GetPEBString(66);
|
||||
return this.GetPEBString(PEBOffset.CommandLine);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -100,7 +115,7 @@ namespace ProcessHacker
|
||||
/// <returns>A file name, in kernel file name format.</returns>
|
||||
public string GetImageFileName()
|
||||
{
|
||||
return this.GetPEBString(58);
|
||||
return this.GetPEBString(PEBOffset.ImagePathName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -113,39 +128,46 @@ namespace ProcessHacker
|
||||
return this.GetBasicInformation().InheritedFromUniqueProcessId;
|
||||
}
|
||||
|
||||
private string GetPEBString(int offset)
|
||||
/// <summary>
|
||||
/// Reads a UNICODE_STRING from the process' process environment block.
|
||||
/// </summary>
|
||||
/// <param name="offset">The offset to the UNICODE_STRING structure.</param>
|
||||
/// <returns>A string.</returns>
|
||||
public string GetPEBString(PEBOffset offset)
|
||||
{
|
||||
PROCESS_BASIC_INFORMATION basicInfo = new PROCESS_BASIC_INFORMATION();
|
||||
int retLen;
|
||||
int readLen;
|
||||
int pebBaseAddress = 0x7ffd7000;
|
||||
|
||||
if (ZwQueryInformationProcess(this, PROCESS_INFORMATION_CLASS.ProcessBasicInformation,
|
||||
ref basicInfo, Marshal.SizeOf(basicInfo), out retLen) != 0)
|
||||
pebBaseAddress = basicInfo.PebBaseAddress;
|
||||
try
|
||||
{
|
||||
pebBaseAddress = this.GetBasicInformation().PebBaseAddress;
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
|
||||
byte[] data2 = new byte[4];
|
||||
|
||||
// read address of parameter information block
|
||||
if (!ReadProcessMemory(this, basicInfo.PebBaseAddress + 16, data2, 4, out retLen))
|
||||
if (!ReadProcessMemory(this, pebBaseAddress + 16, data2, 4, out readLen))
|
||||
throw new Exception(GetLastErrorMessage());
|
||||
|
||||
int paramInfoAddrI = Misc.BytesToInt(data2, Misc.Endianness.Little);
|
||||
|
||||
// read length of string
|
||||
if (!ReadProcessMemory(this, paramInfoAddrI + offset, data2, 2, out retLen))
|
||||
if (!ReadProcessMemory(this, paramInfoAddrI + (int)offset, data2, 2, out readLen))
|
||||
throw new Exception(GetLastErrorMessage());
|
||||
|
||||
ushort strLength = Misc.BytesToUShort(data2, Misc.Endianness.Little);
|
||||
byte[] stringData = new byte[strLength];
|
||||
|
||||
// read address of string
|
||||
if (!ReadProcessMemory(this, paramInfoAddrI + offset + 2, data2, 4, out retLen))
|
||||
if (!ReadProcessMemory(this, paramInfoAddrI + (int)offset + 4, data2, 4, out readLen))
|
||||
throw new Exception(GetLastErrorMessage());
|
||||
|
||||
int strAddr = Misc.BytesToInt(data2, Misc.Endianness.Little);
|
||||
|
||||
// read string
|
||||
if (!ReadProcessMemory(this, strAddr, stringData, strLength, out retLen))
|
||||
if (!ReadProcessMemory(this, strAddr, stringData, strLength, out readLen))
|
||||
throw new Exception(GetLastErrorMessage());
|
||||
|
||||
// return decoded unicode string
|
||||
|
||||
@@ -179,7 +179,7 @@
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="ProcessWindowSize" serializeAs="String">
|
||||
<value>779, 569</value>
|
||||
<value>493, 465</value>
|
||||
</setting>
|
||||
</ProcessHacker.Properties.Settings>
|
||||
</userSettings>
|
||||
|
||||
Reference in New Issue
Block a user