From 486a5a1fed8a990c8314c164cd20651c45b3121e Mon Sep 17 00:00:00 2001 From: James Forshaw Date: Tue, 17 Apr 2018 22:35:33 +0100 Subject: [PATCH] Added functions to start classes in runtime broker. --- OleViewDotNet/COMInterfaces.cs | 13 ++ OleViewDotNet/COMRegistryViewer.Designer.cs | 150 +++++++++++++------- OleViewDotNet/COMRegistryViewer.cs | 80 +++++++++++ OleViewDotNet/COMRegistryViewer.resx | 143 ++++++++++--------- 4 files changed, 261 insertions(+), 125 deletions(-) diff --git a/OleViewDotNet/COMInterfaces.cs b/OleViewDotNet/COMInterfaces.cs index 88b5aee2..ce1b1008 100644 --- a/OleViewDotNet/COMInterfaces.cs +++ b/OleViewDotNet/COMInterfaces.cs @@ -275,4 +275,17 @@ void HandleActivation( ref Guid rclsid, out Guid pReplacementClsId); }; + + [Guid("6040ec14-6557-41f9-a3f7-b1cab7b42120")] + [InterfaceType(ComInterfaceType.InterfaceIsIInspectable)] + interface IRuntimeBroker + { + [return: MarshalAs(UnmanagedType.IInspectable)] object ActivateInstance([MarshalAs(UnmanagedType.LPWStr)] string instanceName); + [return: MarshalAs(UnmanagedType.IUnknown)] object GetActivationFactory([MarshalAs(UnmanagedType.LPWStr)] string instanceName, ref Guid uuid); + void SetErrorFlags(uint error_flags); + uint GetErrorFlags(); + void DebuggerAddRef(); + void DebuggerRelease(); + [return: MarshalAs(UnmanagedType.IUnknown)] object GetClipboardBroker(); + } } diff --git a/OleViewDotNet/COMRegistryViewer.Designer.cs b/OleViewDotNet/COMRegistryViewer.Designer.cs index 236d02da..1d6aa46f 100644 --- a/OleViewDotNet/COMRegistryViewer.Designer.cs +++ b/OleViewDotNet/COMRegistryViewer.Designer.cs @@ -55,6 +55,7 @@ private void InitializeComponent() this.classFactoryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.viewTypeLibraryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.viewProxyDefinitionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.viewRuntimeInterfaceToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.viewLaunchPermissionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.viewAccessPermissionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.queryAllInterfacesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -76,7 +77,10 @@ private void InitializeComponent() this.btnApply = new System.Windows.Forms.Button(); this.statusStrip = new System.Windows.Forms.StatusStrip(); this.toolStripStatusLabelCount = new System.Windows.Forms.ToolStripStatusLabel(); - this.viewRuntimeInterfaceToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.createInRuntimeBrokerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.createInPerUserRuntimeBrokerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.createFactoryInRuntimeBrokerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.createFactoryInPerUserRuntimeBrokerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); labelFilter = new System.Windows.Forms.Label(); labelMode = new System.Windows.Forms.Label(); this.contextMenuStrip.SuspendLayout(); @@ -90,7 +94,7 @@ private void InitializeComponent() labelFilter.AutoSize = true; labelFilter.Location = new System.Drawing.Point(3, 8); labelFilter.Name = "labelFilter"; - labelFilter.Size = new System.Drawing.Size(43, 17); + labelFilter.Size = new System.Drawing.Size(52, 20); labelFilter.TabIndex = 1; labelFilter.Text = "Filter:"; // @@ -98,9 +102,9 @@ private void InitializeComponent() // labelMode.Anchor = System.Windows.Forms.AnchorStyles.Left; labelMode.AutoSize = true; - labelMode.Location = new System.Drawing.Point(749, 8); + labelMode.Location = new System.Drawing.Point(741, 8); labelMode.Name = "labelMode"; - labelMode.Size = new System.Drawing.Size(47, 17); + labelMode.Size = new System.Drawing.Size(55, 20); labelMode.TabIndex = 5; labelMode.Text = "Mode:"; // @@ -112,11 +116,11 @@ private void InitializeComponent() this.treeComRegistry.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.treeComRegistry.ImageIndex = 0; this.treeComRegistry.ImageList = this.treeImageList; - this.treeComRegistry.Location = new System.Drawing.Point(3, 36); + this.treeComRegistry.Location = new System.Drawing.Point(3, 39); this.treeComRegistry.Name = "treeComRegistry"; this.treeComRegistry.SelectedImageIndex = 0; this.treeComRegistry.ShowNodeToolTips = true; - this.treeComRegistry.Size = new System.Drawing.Size(1046, 466); + this.treeComRegistry.Size = new System.Drawing.Size(1046, 458); this.treeComRegistry.TabIndex = 0; this.treeComRegistry.AfterCollapse += new System.Windows.Forms.TreeViewEventHandler(this.treeComRegistry_AfterCollapse); this.treeComRegistry.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.treeComRegistry_BeforeExpand); @@ -147,55 +151,55 @@ private void InitializeComponent() this.unmarshalToolStripMenuItem, this.cloneTreeToolStripMenuItem}); this.contextMenuStrip.Name = "contextMenuStrip"; - this.contextMenuStrip.Size = new System.Drawing.Size(241, 464); + this.contextMenuStrip.Size = new System.Drawing.Size(280, 577); this.contextMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStrip_Opening); // // copyToolStripMenuItem // this.copyToolStripMenuItem.Name = "copyToolStripMenuItem"; - this.copyToolStripMenuItem.Size = new System.Drawing.Size(240, 24); + this.copyToolStripMenuItem.Size = new System.Drawing.Size(279, 30); this.copyToolStripMenuItem.Text = "Copy"; this.copyToolStripMenuItem.Click += new System.EventHandler(this.copyToolStripMenuItem_Click); // // copyGUIDToolStripMenuItem // this.copyGUIDToolStripMenuItem.Name = "copyGUIDToolStripMenuItem"; - this.copyGUIDToolStripMenuItem.Size = new System.Drawing.Size(240, 24); + this.copyGUIDToolStripMenuItem.Size = new System.Drawing.Size(279, 30); this.copyGUIDToolStripMenuItem.Text = "Copy GUID"; this.copyGUIDToolStripMenuItem.Click += new System.EventHandler(this.copyGUIDToolStripMenuItem_Click); // // copyGUIDCStructureToolStripMenuItem // this.copyGUIDCStructureToolStripMenuItem.Name = "copyGUIDCStructureToolStripMenuItem"; - this.copyGUIDCStructureToolStripMenuItem.Size = new System.Drawing.Size(240, 24); + this.copyGUIDCStructureToolStripMenuItem.Size = new System.Drawing.Size(279, 30); this.copyGUIDCStructureToolStripMenuItem.Text = "Copy GUID C Structure"; this.copyGUIDCStructureToolStripMenuItem.Click += new System.EventHandler(this.copyGUIDCStructureToolStripMenuItem_Click); // // copyGUIDHexStringToolStripMenuItem // this.copyGUIDHexStringToolStripMenuItem.Name = "copyGUIDHexStringToolStripMenuItem"; - this.copyGUIDHexStringToolStripMenuItem.Size = new System.Drawing.Size(240, 24); + this.copyGUIDHexStringToolStripMenuItem.Size = new System.Drawing.Size(279, 30); this.copyGUIDHexStringToolStripMenuItem.Text = "Copy GUID Hex String"; this.copyGUIDHexStringToolStripMenuItem.Click += new System.EventHandler(this.copyGUIDHexStringToolStripMenuItem_Click); // // copyObjectTagToolStripMenuItem // this.copyObjectTagToolStripMenuItem.Name = "copyObjectTagToolStripMenuItem"; - this.copyObjectTagToolStripMenuItem.Size = new System.Drawing.Size(240, 24); + this.copyObjectTagToolStripMenuItem.Size = new System.Drawing.Size(279, 30); this.copyObjectTagToolStripMenuItem.Text = "Copy Object Tag"; this.copyObjectTagToolStripMenuItem.Click += new System.EventHandler(this.copyObjectTagToolStripMenuItem_Click); // // createInstanceToolStripMenuItem // this.createInstanceToolStripMenuItem.Name = "createInstanceToolStripMenuItem"; - this.createInstanceToolStripMenuItem.Size = new System.Drawing.Size(240, 24); + this.createInstanceToolStripMenuItem.Size = new System.Drawing.Size(279, 30); this.createInstanceToolStripMenuItem.Text = "Create Instance"; this.createInstanceToolStripMenuItem.Click += new System.EventHandler(this.createInstanceToolStripMenuItem_Click); // // refreshInterfacesToolStripMenuItem // this.refreshInterfacesToolStripMenuItem.Name = "refreshInterfacesToolStripMenuItem"; - this.refreshInterfacesToolStripMenuItem.Size = new System.Drawing.Size(240, 24); + this.refreshInterfacesToolStripMenuItem.Size = new System.Drawing.Size(279, 30); this.refreshInterfacesToolStripMenuItem.Text = "Refresh Interfaces"; this.refreshInterfacesToolStripMenuItem.Click += new System.EventHandler(this.refreshInterfacesToolStripMenuItem_Click); // @@ -209,50 +213,54 @@ private void InitializeComponent() this.createClassFactoryToolStripMenuItem, this.createClassFactoryRemoteToolStripMenuItem, this.createInSessionToolStripMenuItem, - this.createElevatedToolStripMenuItem}); + this.createElevatedToolStripMenuItem, + this.createInRuntimeBrokerToolStripMenuItem, + this.createInPerUserRuntimeBrokerToolStripMenuItem, + this.createFactoryInRuntimeBrokerToolStripMenuItem, + this.createFactoryInPerUserRuntimeBrokerToolStripMenuItem}); this.createSpecialToolStripMenuItem.Name = "createSpecialToolStripMenuItem"; - this.createSpecialToolStripMenuItem.Size = new System.Drawing.Size(240, 24); + this.createSpecialToolStripMenuItem.Size = new System.Drawing.Size(279, 30); this.createSpecialToolStripMenuItem.Text = "Create Special"; // // createLocalServerToolStripMenuItem // this.createLocalServerToolStripMenuItem.Name = "createLocalServerToolStripMenuItem"; - this.createLocalServerToolStripMenuItem.Size = new System.Drawing.Size(271, 26); + this.createLocalServerToolStripMenuItem.Size = new System.Drawing.Size(364, 30); this.createLocalServerToolStripMenuItem.Text = "Create Local Server"; this.createLocalServerToolStripMenuItem.Click += new System.EventHandler(this.createLocalServerToolStripMenuItem_Click); // // createInProcServerToolStripMenuItem // this.createInProcServerToolStripMenuItem.Name = "createInProcServerToolStripMenuItem"; - this.createInProcServerToolStripMenuItem.Size = new System.Drawing.Size(271, 26); + this.createInProcServerToolStripMenuItem.Size = new System.Drawing.Size(364, 30); this.createInProcServerToolStripMenuItem.Text = "Create InProc Server"; this.createInProcServerToolStripMenuItem.Click += new System.EventHandler(this.createInProcServerToolStripMenuItem_Click); // // createInProcHandlerToolStripMenuItem // this.createInProcHandlerToolStripMenuItem.Name = "createInProcHandlerToolStripMenuItem"; - this.createInProcHandlerToolStripMenuItem.Size = new System.Drawing.Size(271, 26); + this.createInProcHandlerToolStripMenuItem.Size = new System.Drawing.Size(364, 30); this.createInProcHandlerToolStripMenuItem.Text = "Create InProc Handler"; this.createInProcHandlerToolStripMenuItem.Click += new System.EventHandler(this.createInProcHandlerToolStripMenuItem_Click); // // createRemoteToolStripMenuItem // this.createRemoteToolStripMenuItem.Name = "createRemoteToolStripMenuItem"; - this.createRemoteToolStripMenuItem.Size = new System.Drawing.Size(271, 26); + this.createRemoteToolStripMenuItem.Size = new System.Drawing.Size(364, 30); this.createRemoteToolStripMenuItem.Text = "Create Remote"; this.createRemoteToolStripMenuItem.Click += new System.EventHandler(this.createRemoteToolStripMenuItem_Click); // // createClassFactoryToolStripMenuItem // this.createClassFactoryToolStripMenuItem.Name = "createClassFactoryToolStripMenuItem"; - this.createClassFactoryToolStripMenuItem.Size = new System.Drawing.Size(271, 26); + this.createClassFactoryToolStripMenuItem.Size = new System.Drawing.Size(364, 30); this.createClassFactoryToolStripMenuItem.Text = "Create Class Factory"; this.createClassFactoryToolStripMenuItem.Click += new System.EventHandler(this.createClassFactoryToolStripMenuItem_Click); // // createClassFactoryRemoteToolStripMenuItem // this.createClassFactoryRemoteToolStripMenuItem.Name = "createClassFactoryRemoteToolStripMenuItem"; - this.createClassFactoryRemoteToolStripMenuItem.Size = new System.Drawing.Size(271, 26); + this.createClassFactoryRemoteToolStripMenuItem.Size = new System.Drawing.Size(364, 30); this.createClassFactoryRemoteToolStripMenuItem.Text = "Create Class Factory Remote"; this.createClassFactoryRemoteToolStripMenuItem.Click += new System.EventHandler(this.createClassFactoryRemoteToolStripMenuItem_Click); // @@ -261,13 +269,13 @@ private void InitializeComponent() this.createInSessionToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.consoleToolStripMenuItem}); this.createInSessionToolStripMenuItem.Name = "createInSessionToolStripMenuItem"; - this.createInSessionToolStripMenuItem.Size = new System.Drawing.Size(271, 26); + this.createInSessionToolStripMenuItem.Size = new System.Drawing.Size(364, 30); this.createInSessionToolStripMenuItem.Text = "Create In Session"; // // consoleToolStripMenuItem // this.consoleToolStripMenuItem.Name = "consoleToolStripMenuItem"; - this.consoleToolStripMenuItem.Size = new System.Drawing.Size(137, 26); + this.consoleToolStripMenuItem.Size = new System.Drawing.Size(160, 30); this.consoleToolStripMenuItem.Tag = "Console"; this.consoleToolStripMenuItem.Text = "Console"; this.consoleToolStripMenuItem.Click += new System.EventHandler(this.consoleToolStripMenuItem_Click); @@ -278,69 +286,76 @@ private void InitializeComponent() this.instanceToolStripMenuItem, this.classFactoryToolStripMenuItem}); this.createElevatedToolStripMenuItem.Name = "createElevatedToolStripMenuItem"; - this.createElevatedToolStripMenuItem.Size = new System.Drawing.Size(271, 26); + this.createElevatedToolStripMenuItem.Size = new System.Drawing.Size(364, 30); this.createElevatedToolStripMenuItem.Text = "Create Elevated"; // // instanceToolStripMenuItem // this.instanceToolStripMenuItem.Name = "instanceToolStripMenuItem"; - this.instanceToolStripMenuItem.Size = new System.Drawing.Size(168, 26); + this.instanceToolStripMenuItem.Size = new System.Drawing.Size(198, 30); this.instanceToolStripMenuItem.Text = "Instance"; this.instanceToolStripMenuItem.Click += new System.EventHandler(this.instanceToolStripMenuItem_Click); // // classFactoryToolStripMenuItem // this.classFactoryToolStripMenuItem.Name = "classFactoryToolStripMenuItem"; - this.classFactoryToolStripMenuItem.Size = new System.Drawing.Size(168, 26); + this.classFactoryToolStripMenuItem.Size = new System.Drawing.Size(198, 30); this.classFactoryToolStripMenuItem.Text = "Class Factory"; this.classFactoryToolStripMenuItem.Click += new System.EventHandler(this.classFactoryToolStripMenuItem_Click); // // viewTypeLibraryToolStripMenuItem // this.viewTypeLibraryToolStripMenuItem.Name = "viewTypeLibraryToolStripMenuItem"; - this.viewTypeLibraryToolStripMenuItem.Size = new System.Drawing.Size(240, 24); + this.viewTypeLibraryToolStripMenuItem.Size = new System.Drawing.Size(279, 30); this.viewTypeLibraryToolStripMenuItem.Text = "View Type Library"; this.viewTypeLibraryToolStripMenuItem.Click += new System.EventHandler(this.viewTypeLibraryToolStripMenuItem_Click); // // viewProxyDefinitionToolStripMenuItem // this.viewProxyDefinitionToolStripMenuItem.Name = "viewProxyDefinitionToolStripMenuItem"; - this.viewProxyDefinitionToolStripMenuItem.Size = new System.Drawing.Size(240, 24); + this.viewProxyDefinitionToolStripMenuItem.Size = new System.Drawing.Size(279, 30); this.viewProxyDefinitionToolStripMenuItem.Text = "View Proxy Definition"; this.viewProxyDefinitionToolStripMenuItem.Click += new System.EventHandler(this.viewProxyDefinitionToolStripMenuItem_Click); // + // viewRuntimeInterfaceToolStripMenuItem + // + this.viewRuntimeInterfaceToolStripMenuItem.Name = "viewRuntimeInterfaceToolStripMenuItem"; + this.viewRuntimeInterfaceToolStripMenuItem.Size = new System.Drawing.Size(279, 30); + this.viewRuntimeInterfaceToolStripMenuItem.Text = "View Runtime Interface"; + this.viewRuntimeInterfaceToolStripMenuItem.Click += new System.EventHandler(this.viewRuntimeInterfaceToolStripMenuItem_Click); + // // viewLaunchPermissionsToolStripMenuItem // this.viewLaunchPermissionsToolStripMenuItem.Name = "viewLaunchPermissionsToolStripMenuItem"; - this.viewLaunchPermissionsToolStripMenuItem.Size = new System.Drawing.Size(240, 24); + this.viewLaunchPermissionsToolStripMenuItem.Size = new System.Drawing.Size(279, 30); this.viewLaunchPermissionsToolStripMenuItem.Text = "View Launch Permissions"; this.viewLaunchPermissionsToolStripMenuItem.Click += new System.EventHandler(this.viewLaunchPermissionsToolStripMenuItem_Click); // // viewAccessPermissionsToolStripMenuItem // this.viewAccessPermissionsToolStripMenuItem.Name = "viewAccessPermissionsToolStripMenuItem"; - this.viewAccessPermissionsToolStripMenuItem.Size = new System.Drawing.Size(240, 24); + this.viewAccessPermissionsToolStripMenuItem.Size = new System.Drawing.Size(279, 30); this.viewAccessPermissionsToolStripMenuItem.Text = "View Access Permissions"; this.viewAccessPermissionsToolStripMenuItem.Click += new System.EventHandler(this.viewAccessPermissionsToolStripMenuItem_Click); // // queryAllInterfacesToolStripMenuItem // this.queryAllInterfacesToolStripMenuItem.Name = "queryAllInterfacesToolStripMenuItem"; - this.queryAllInterfacesToolStripMenuItem.Size = new System.Drawing.Size(240, 24); + this.queryAllInterfacesToolStripMenuItem.Size = new System.Drawing.Size(279, 30); this.queryAllInterfacesToolStripMenuItem.Text = "Query All Interfaces"; this.queryAllInterfacesToolStripMenuItem.Click += new System.EventHandler(this.queryAllInterfacesToolStripMenuItem_Click); // // refreshProcessToolStripMenuItem // this.refreshProcessToolStripMenuItem.Name = "refreshProcessToolStripMenuItem"; - this.refreshProcessToolStripMenuItem.Size = new System.Drawing.Size(240, 24); + this.refreshProcessToolStripMenuItem.Size = new System.Drawing.Size(279, 30); this.refreshProcessToolStripMenuItem.Text = "Refresh Process"; this.refreshProcessToolStripMenuItem.Click += new System.EventHandler(this.refreshProcessToolStripMenuItem_Click); // // propertiesToolStripMenuItem // this.propertiesToolStripMenuItem.Name = "propertiesToolStripMenuItem"; - this.propertiesToolStripMenuItem.Size = new System.Drawing.Size(240, 24); + this.propertiesToolStripMenuItem.Size = new System.Drawing.Size(279, 30); this.propertiesToolStripMenuItem.Text = "Properties"; this.propertiesToolStripMenuItem.Click += new System.EventHandler(this.propertiesToolStripMenuItem_Click); // @@ -351,27 +366,27 @@ private void InitializeComponent() this.toFileToolStripMenuItem, this.toObjectToolStripMenuItem}); this.unmarshalToolStripMenuItem.Name = "unmarshalToolStripMenuItem"; - this.unmarshalToolStripMenuItem.Size = new System.Drawing.Size(240, 24); + this.unmarshalToolStripMenuItem.Size = new System.Drawing.Size(279, 30); this.unmarshalToolStripMenuItem.Text = "Unmarshal"; // // toHexEditorToolStripMenuItem // this.toHexEditorToolStripMenuItem.Name = "toHexEditorToolStripMenuItem"; - this.toHexEditorToolStripMenuItem.Size = new System.Drawing.Size(174, 26); + this.toHexEditorToolStripMenuItem.Size = new System.Drawing.Size(201, 30); this.toHexEditorToolStripMenuItem.Text = "To Hex Editor"; this.toHexEditorToolStripMenuItem.Click += new System.EventHandler(this.toHexEditorToolStripMenuItem_Click); // // toFileToolStripMenuItem // this.toFileToolStripMenuItem.Name = "toFileToolStripMenuItem"; - this.toFileToolStripMenuItem.Size = new System.Drawing.Size(174, 26); + this.toFileToolStripMenuItem.Size = new System.Drawing.Size(201, 30); this.toFileToolStripMenuItem.Text = "To File"; this.toFileToolStripMenuItem.Click += new System.EventHandler(this.toFileToolStripMenuItem_Click); // // toObjectToolStripMenuItem // this.toObjectToolStripMenuItem.Name = "toObjectToolStripMenuItem"; - this.toObjectToolStripMenuItem.Size = new System.Drawing.Size(174, 26); + this.toObjectToolStripMenuItem.Size = new System.Drawing.Size(201, 30); this.toObjectToolStripMenuItem.Text = "To Object"; this.toObjectToolStripMenuItem.Click += new System.EventHandler(this.toObjectToolStripMenuItem_Click); // @@ -383,34 +398,34 @@ private void InitializeComponent() this.filteredToolStripMenuItem, this.allChildrenToolStripMenuItem}); this.cloneTreeToolStripMenuItem.Name = "cloneTreeToolStripMenuItem"; - this.cloneTreeToolStripMenuItem.Size = new System.Drawing.Size(240, 24); + this.cloneTreeToolStripMenuItem.Size = new System.Drawing.Size(279, 30); this.cloneTreeToolStripMenuItem.Text = "Clone Tree"; // // allVisibleToolStripMenuItem // this.allVisibleToolStripMenuItem.Name = "allVisibleToolStripMenuItem"; - this.allVisibleToolStripMenuItem.Size = new System.Drawing.Size(161, 26); + this.allVisibleToolStripMenuItem.Size = new System.Drawing.Size(186, 30); this.allVisibleToolStripMenuItem.Text = "All Visible"; this.allVisibleToolStripMenuItem.Click += new System.EventHandler(this.allVisibleToolStripMenuItem_Click); // // selectedToolStripMenuItem // this.selectedToolStripMenuItem.Name = "selectedToolStripMenuItem"; - this.selectedToolStripMenuItem.Size = new System.Drawing.Size(161, 26); + this.selectedToolStripMenuItem.Size = new System.Drawing.Size(186, 30); this.selectedToolStripMenuItem.Text = "Selected"; this.selectedToolStripMenuItem.Click += new System.EventHandler(this.selectedToolStripMenuItem_Click); // // filteredToolStripMenuItem // this.filteredToolStripMenuItem.Name = "filteredToolStripMenuItem"; - this.filteredToolStripMenuItem.Size = new System.Drawing.Size(161, 26); + this.filteredToolStripMenuItem.Size = new System.Drawing.Size(186, 30); this.filteredToolStripMenuItem.Text = "Filtered"; this.filteredToolStripMenuItem.Click += new System.EventHandler(this.filteredToolStripMenuItem_Click); // // allChildrenToolStripMenuItem // this.allChildrenToolStripMenuItem.Name = "allChildrenToolStripMenuItem"; - this.allChildrenToolStripMenuItem.Size = new System.Drawing.Size(161, 26); + this.allChildrenToolStripMenuItem.Size = new System.Drawing.Size(186, 30); this.allChildrenToolStripMenuItem.Text = "All Children"; this.allChildrenToolStripMenuItem.Click += new System.EventHandler(this.allChildrenToolStripMenuItem_Click); // @@ -431,16 +446,16 @@ private void InitializeComponent() this.comboBoxMode.FormattingEnabled = true; this.comboBoxMode.Location = new System.Drawing.Point(802, 4); this.comboBoxMode.Name = "comboBoxMode"; - this.comboBoxMode.Size = new System.Drawing.Size(164, 25); + this.comboBoxMode.Size = new System.Drawing.Size(164, 28); this.comboBoxMode.TabIndex = 4; this.comboBoxMode.SelectedIndexChanged += new System.EventHandler(this.comboBoxMode_SelectedIndexChanged); // // textBoxFilter // this.textBoxFilter.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.textBoxFilter.Location = new System.Drawing.Point(52, 5); + this.textBoxFilter.Location = new System.Drawing.Point(61, 5); this.textBoxFilter.Name = "textBoxFilter"; - this.textBoxFilter.Size = new System.Drawing.Size(691, 23); + this.textBoxFilter.Size = new System.Drawing.Size(674, 26); this.textBoxFilter.TabIndex = 0; this.textBoxFilter.KeyDown += new System.Windows.Forms.KeyEventHandler(this.textBoxFilter_KeyDown); // @@ -475,7 +490,7 @@ private void InitializeComponent() this.btnApply.AutoSize = true; this.btnApply.Location = new System.Drawing.Point(972, 3); this.btnApply.Name = "btnApply"; - this.btnApply.Size = new System.Drawing.Size(77, 27); + this.btnApply.Size = new System.Drawing.Size(77, 30); this.btnApply.TabIndex = 6; this.btnApply.Text = "Apply"; this.btnApply.UseVisualStyleBackColor = true; @@ -487,24 +502,45 @@ private void InitializeComponent() this.statusStrip.ImageScalingSize = new System.Drawing.Size(20, 20); this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.toolStripStatusLabelCount}); - this.statusStrip.Location = new System.Drawing.Point(0, 505); + this.statusStrip.Location = new System.Drawing.Point(0, 500); this.statusStrip.Name = "statusStrip"; - this.statusStrip.Size = new System.Drawing.Size(1052, 25); + this.statusStrip.Size = new System.Drawing.Size(1052, 30); this.statusStrip.TabIndex = 7; this.statusStrip.Text = "statusStrip1"; // // toolStripStatusLabelCount // this.toolStripStatusLabelCount.Name = "toolStripStatusLabelCount"; - this.toolStripStatusLabelCount.Size = new System.Drawing.Size(164, 20); + this.toolStripStatusLabelCount.Size = new System.Drawing.Size(199, 25); this.toolStripStatusLabelCount.Text = "Showing N of M Entries"; // - // viewRuntimeInterfaceToolStripMenuItem + // createInRuntimeBrokerToolStripMenuItem // - this.viewRuntimeInterfaceToolStripMenuItem.Name = "viewRuntimeInterfaceToolStripMenuItem"; - this.viewRuntimeInterfaceToolStripMenuItem.Size = new System.Drawing.Size(240, 24); - this.viewRuntimeInterfaceToolStripMenuItem.Text = "View Runtime Interface"; - this.viewRuntimeInterfaceToolStripMenuItem.Click += new System.EventHandler(this.viewRuntimeInterfaceToolStripMenuItem_Click); + this.createInRuntimeBrokerToolStripMenuItem.Name = "createInRuntimeBrokerToolStripMenuItem"; + this.createInRuntimeBrokerToolStripMenuItem.Size = new System.Drawing.Size(364, 30); + this.createInRuntimeBrokerToolStripMenuItem.Text = "Create In Runtime Broker"; + this.createInRuntimeBrokerToolStripMenuItem.Click += new System.EventHandler(this.createInRuntimeBrokerToolStripMenuItem_Click); + // + // createInPerUserRuntimeBrokerToolStripMenuItem + // + this.createInPerUserRuntimeBrokerToolStripMenuItem.Name = "createInPerUserRuntimeBrokerToolStripMenuItem"; + this.createInPerUserRuntimeBrokerToolStripMenuItem.Size = new System.Drawing.Size(364, 30); + this.createInPerUserRuntimeBrokerToolStripMenuItem.Text = "Create In Per-User Runtime Broker"; + this.createInPerUserRuntimeBrokerToolStripMenuItem.Click += new System.EventHandler(this.createInPerUserRuntimeBrokerToolStripMenuItem_Click); + // + // createFactoryInRuntimeBrokerToolStripMenuItem + // + this.createFactoryInRuntimeBrokerToolStripMenuItem.Name = "createFactoryInRuntimeBrokerToolStripMenuItem"; + this.createFactoryInRuntimeBrokerToolStripMenuItem.Size = new System.Drawing.Size(425, 30); + this.createFactoryInRuntimeBrokerToolStripMenuItem.Text = "Create Factory In Runtime Broker"; + this.createFactoryInRuntimeBrokerToolStripMenuItem.Click += new System.EventHandler(this.createFactoryInRuntimeBrokerToolStripMenuItem_Click); + // + // createFactoryInPerUserRuntimeBrokerToolStripMenuItem + // + this.createFactoryInPerUserRuntimeBrokerToolStripMenuItem.Name = "createFactoryInPerUserRuntimeBrokerToolStripMenuItem"; + this.createFactoryInPerUserRuntimeBrokerToolStripMenuItem.Size = new System.Drawing.Size(425, 30); + this.createFactoryInPerUserRuntimeBrokerToolStripMenuItem.Text = "Create Factory in Per-User Runtime Broker"; + this.createFactoryInPerUserRuntimeBrokerToolStripMenuItem.Click += new System.EventHandler(this.createFactoryInPerUserRuntimeBrokerToolStripMenuItem_Click); // // COMRegistryViewer // @@ -568,5 +604,9 @@ private void InitializeComponent() private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabelCount; private System.Windows.Forms.ToolStripMenuItem allChildrenToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem viewRuntimeInterfaceToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem createInRuntimeBrokerToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem createInPerUserRuntimeBrokerToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem createFactoryInRuntimeBrokerToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem createFactoryInPerUserRuntimeBrokerToolStripMenuItem; } } \ No newline at end of file diff --git a/OleViewDotNet/COMRegistryViewer.cs b/OleViewDotNet/COMRegistryViewer.cs index 041cea6c..9c3d5c6d 100644 --- a/OleViewDotNet/COMRegistryViewer.cs +++ b/OleViewDotNet/COMRegistryViewer.cs @@ -1429,6 +1429,14 @@ private void contextMenuStrip_Opening(object sender, CancelEventArgs e) createSpecialToolStripMenuItem.DropDownItems.Add(createClassFactoryRemoteToolStripMenuItem); } + if (entry is COMRuntimeClassEntry && ((COMRuntimeClassEntry)entry).HasPermission) + { + createSpecialToolStripMenuItem.DropDownItems.Add(createInRuntimeBrokerToolStripMenuItem); + createSpecialToolStripMenuItem.DropDownItems.Add(createInPerUserRuntimeBrokerToolStripMenuItem); + createSpecialToolStripMenuItem.DropDownItems.Add(createFactoryInRuntimeBrokerToolStripMenuItem); + createSpecialToolStripMenuItem.DropDownItems.Add(createFactoryInPerUserRuntimeBrokerToolStripMenuItem); + } + contextMenuStrip.Items.Add(createSpecialToolStripMenuItem); contextMenuStrip.Items.Add(refreshInterfacesToolStripMenuItem); @@ -2409,5 +2417,77 @@ private void viewRuntimeInterfaceToolStripMenuItem_Click(object sender, EventArg } } } + + [Guid("D63B10C5-BB46-4990-A94F-E40B9D520160")] + [ComImport] + class RuntimeBroker + { + } + + [Guid("2593F8B9-4EAF-457C-B68A-50F6B8EA6B54")] + [ComImport] + class PerUserRuntimeBroker + { + } + + private IRuntimeBroker CreateBroker(bool per_user) + { + if (per_user) + { + return (IRuntimeBroker)new PerUserRuntimeBroker(); + } + else + { + return (IRuntimeBroker)new RuntimeBroker(); + } + } + + private async void CreateInRuntimeBroker(bool per_user, bool factory) + { + try + { + COMRuntimeClassEntry runtime_class = GetSelectedClassEntry() as COMRuntimeClassEntry; + if (runtime_class != null) + { + IRuntimeBroker broker = CreateBroker(per_user); + object comObj; + if (factory) + { + Guid iid = COMInterfaceEntry.IID_IUnknown; + comObj = broker.GetActivationFactory(runtime_class.Name, ref iid); + } + else + { + comObj = broker.ActivateInstance(runtime_class.Name); + } + + await SetupObjectView(runtime_class, comObj, factory); + } + } + catch (Exception ex) + { + Program.ShowError(this, ex); + } + } + + private void createInRuntimeBrokerToolStripMenuItem_Click(object sender, EventArgs e) + { + CreateInRuntimeBroker(false, false); + } + + private void createInPerUserRuntimeBrokerToolStripMenuItem_Click(object sender, EventArgs e) + { + CreateInRuntimeBroker(true, false); + } + + private void createFactoryInRuntimeBrokerToolStripMenuItem_Click(object sender, EventArgs e) + { + CreateInRuntimeBroker(false, true); + } + + private void createFactoryInPerUserRuntimeBrokerToolStripMenuItem_Click(object sender, EventArgs e) + { + CreateInRuntimeBroker(false, true); + } } } diff --git a/OleViewDotNet/COMRegistryViewer.resx b/OleViewDotNet/COMRegistryViewer.resx index c65a22db..5c6b0c32 100644 --- a/OleViewDotNet/COMRegistryViewer.resx +++ b/OleViewDotNet/COMRegistryViewer.resx @@ -137,81 +137,81 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAU - EwAAAk1TRnQBSQFMAgEBBQEAAVABAAFQAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA - AwABIAMAAQEBAAEgBgABIBoAA0wBjwMXASAD9gH/A/YB/wP2Af8DWQG/5AADYgHPA+sB/wP2Af8DyQH/ - AzoB/wP2Af8DyQH/A/YB/+AAA/YB/wM6Af8DOgH/AzoB/wM6Af8DOgH/AzoB/wPJAf8DWQG/2AADbgHf - A/YB/wPgAf8BcQJwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DOgH/A/YB/wP2Af/YAAP2Af8DOgH/ - AzoB/wHxAe8B8AH/A1AB/wM6Af8B8QHvAfAB/wM6Af8DOgH/A/YB/9gAA/YB/wPJAf8DZwH/AdsB2QHa - Af8B0ALPAf8DUAH/AfEB7wHwAf8DOgH/A8kB/wP2Af8DlAHvA1EBnwP2Af8DKgFAzAAD9gH/A6cB/wM6 - Af8B2wHZAdoB/wHxAe8B8AH/AXECcAH/AzoB/wP2Af8DUQH/A/YB/wP2Af8DUQH/A/YB/wM6AWDIAAP2 - Af8DRQH/A6cB/wNnAf8DOgH/A+AB/wM6Af8D6wH/AzoB/wNFAf8DUQH/AzoB/wP2Af8DWQG/A1QBr8QA - AwwBEAP2Af8D9gH/A8kB/wM6Af8D9gH/A0UB/wORAf8DRQH/AeYB5AHlAf8B5gHkAeUB/wNFAf8DpwH/ - A3IB/wP2Af/QAAP2Af8D9gH/A/YB/wM6Af8DOgH/AfEB7wHwAf8BugG5AboB/wGvAa4BrwH/AfEB7wHw - Af8DOgH/AzoB/wP2Af/YAANUAa8D9gH/AzoB/wHxAe8B8AH/AzoB/wM6Af8B8QHvAfAB/wM6Af8D9gH/ - A1QBr9QAAyoBQAP2Af8DOgH/AzoB/wHxAe8B8AH/Aa8BrgGvAf8BrwGuAa8B/wHxAe8B8AH/AzoB/wM6 - Af8D9gH/2AAD9gH/A2cB/wOnAf8DRQH/AeYB5AHlAf8B5gHkAeUB/wNFAf8DkQH/A0UB/wP2Af/YAANU - Aa8DYgHPA/YB/wM6Af8DUQH/A0UB/wM6Af8D9gH/A/YB/wNUAa/cAAMyAVAD9gH/A0UB/wP2Af8D9gH/ - A1EB/wP2Af8DDAEQ5AADKgFAA/YB/wNUAa8DlAHvA/YB/wMqAUD/ADEAA1EBnwP2Af8D9gH/kAADMgFQ - A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A4gB7ygAA1EBnwP2 - Af8DOAH/A4YB/wP2Af9QAANZAb8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/ - A/YB/wP2Af8DMgFQBAAD9gH/AXABtgHcAf8BcAG2AdwB/wFwAbYB3AH/AXABtgHcAf8BcAG2AdwB/wFw - AbYB3AH/AXABtgHcAf8BcAG2AdwB/wFwAbYB3AH/AXABtgHcAf8BcAG2AdwB/wFwAbYB3AH/AakBzgHm - Af8DiAHvIAADUQGfA/YB/wM4Af8DOAH/AzgB/wOGAf8D9gH/TAAD9gH/AXEBtgHcAf8BcQG2AdwB/wFx - AbYB3AH/AXEBtgHcAf8BcQG2AdwB/wFxAbYB3AH/AXEBtgHcAf8BcQG2AdwB/wFxAbYB3AH/AXEBtgHc - Af8BcQG2AdwB/wFxAbYB3AH/A/YB/wQAA/YB/wFwAbYB3AH/AXABtgHcAf8BcAG2AdwB/wFwAbYB3AH/ + EwAAAk1TRnQBSQFMAgEBBQEAAVgBAAFYAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA + AwABIAMAAQEBAAEgBgABIBoAA0wBjwMXASAD9gH/A/YB/wP2Af8DWQG/5AADYQHPA+sB/wP2Af8DyQH/ + AzkB/wP2Af8DyQH/A/YB/+AAA/YB/wM5Af8DOQH/AzkB/wM5Af8DOQH/AzkB/wPJAf8DWQG/2AADaQHf + A/YB/wPgAf8BcAJvAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DOQH/A/YB/wP2Af/YAAP2Af8DOQH/ + AzkB/wHxAe8B8AH/A08B/wM5Af8B8QHvAfAB/wM5Af8DOQH/A/YB/9gAA/YB/wPJAf8DZgH/AdsB2QHa + Af8B0ALPAf8DTwH/AfEB7wHwAf8DOQH/A8kB/wP2Af8DjgHvA1EBnwP2Af8DKgFAzAAD9gH/A6cB/wM5 + Af8B2wHZAdoB/wHxAe8B8AH/AXACbwH/AzkB/wP2Af8DUAH/A/YB/wP2Af8DUAH/A/YB/wM6AWDIAAP2 + Af8DRAH/A6cB/wNmAf8DOQH/A+AB/wM5Af8D6wH/AzkB/wNEAf8DUAH/AzkB/wP2Af8DWQG/A1QBr8QA + AwwBEAP2Af8D9gH/A8kB/wM5Af8D9gH/A0QB/wORAf8DRAH/AeYB5AHlAf8B5gHkAeUB/wNEAf8DpwH/ + A3EB/wP2Af/QAAP2Af8D9gH/A/YB/wM5Af8DOQH/AfEB7wHwAf8BugG5AboB/wGvAa4BrwH/AfEB7wHw + Af8DOQH/AzkB/wP2Af/YAANUAa8D9gH/AzkB/wHxAe8B8AH/AzkB/wM5Af8B8QHvAfAB/wM5Af8D9gH/ + A1QBr9QAAyoBQAP2Af8DOQH/AzkB/wHxAe8B8AH/Aa8BrgGvAf8BrwGuAa8B/wHxAe8B8AH/AzkB/wM5 + Af8D9gH/2AAD9gH/A2YB/wOnAf8DRAH/AeYB5AHlAf8B5gHkAeUB/wNEAf8DkQH/A0QB/wP2Af/YAANU + Aa8DYQHPA/YB/wM5Af8DUAH/A0QB/wM5Af8D9gH/A/YB/wNUAa/cAAMyAVAD9gH/A0QB/wP2Af8D9gH/ + A1AB/wP2Af8DDAEQ5AADKgFAA/YB/wNUAa8DjgHvA/YB/wMqAUD/ADEAA1EBnwP2Af8D9gH/kAADMgFQ + A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A4MB7ygAA1EBnwP2 + Af8DNwH/A4YB/wP2Af9QAANZAb8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/ + A/YB/wP2Af8DMgFQBAAD9gH/AW8BtgHcAf8BbwG2AdwB/wFvAbYB3AH/AW8BtgHcAf8BbwG2AdwB/wFv + AbYB3AH/AW8BtgHcAf8BbwG2AdwB/wFvAbYB3AH/AW8BtgHcAf8BbwG2AdwB/wFvAbYB3AH/AakBzgHm + Af8DgwHvIAADUQGfA/YB/wM3Af8DNwH/AzcB/wOGAf8D9gH/TAAD9gH/AXABtgHcAf8BcAG2AdwB/wFw + AbYB3AH/AXABtgHcAf8BcAG2AdwB/wFwAbYB3AH/AXABtgHcAf8BcAG2AdwB/wFwAbYB3AH/AXABtgHc + Af8BcAG2AdwB/wFwAbYB3AH/A/YB/wQAA/YB/wFvAbYB3AH/AW8BtgHcAf8BbwG2AdwB/wFvAbYB3AH/ + AW8BtgHcAf8BbwG2AdwB/wFvAbYB3AH/AW8BtgHcAf8BbwG2AdwB/wFvAbYB3AH/AW8BtgHcAf8BbwG2 + AdwB/wFvAbYB3AH/A/YB/xgAA/YB/wP2Af8D9gH/A/YB/wORAf8DNwH/AzcB/wM3Af8DhgH/A/YB/yQA + AwwBEANfAc8D9gH/A/YB/wNAAXAMAAM6AWAB5wHuAfMB/wFwAbYB3AH/AXABtgHcAf8BcAG2AdwB/wFw + AbYB3AH/AXABtgHcAf8BcAG2AdwB/wFwAbYB3AH/AXABtgHcAf8BcAG2AdwB/wFwAbYB3AH/AdMB4QHr + Af8BcAG2AdwB/wP2Af8EAAP2Af8BbwG2AdwB/wFvAbYB3AH/AW8BtgHcAf8BbwG2AdwB/wFvAbYB3AH/ + AW8BtgHcAf8BbwG2AdwB/wFvAbYB3AH/AW8BtgHcAf8BbwG2AdwB/wFvAbYB3AH/AW8BtgHcAf8BbwG2 + AdwB/wP2Af8YAAP2Af8DNwH/AzcB/wM3Af8DNwH/AzcB/wM3Af8DNwH/A/YB/wNRAZ8gAAM6AWAD9gH/ + A28B/wM3Af8DNwH/A8kB/wP2Af8IAAP2Af8BggG6Ad4B/wFwAbYB3AH/AXABtgHcAf8BcAG2AdwB/wFw + AbYB3AH/AXABtgHcAf8BcAG2AdwB/wFwAbYB3AH/AXABtgHcAf8BcAG2AdwB/wGBAboB3QH/AfEB7wHw + Af8BcAG2AdwB/wP2Af8EAAP2Af8BbwG2AdwB/wFvAbYB3AH/AW8BtgHcAf8BbwG2AdwB/wFvAbYB3AH/ + AW8BtgHcAf8BbwG2AdwB/wFvAbYB3AH/AW8BtgHcAf8BbwG2AdwB/wFvAbYB3AH/AW8BtgHcAf8BbwG2 + AdwB/wP2Af8YAAP2Af8DNwH/A/YB/wP2Af8D9gH/A/YB/wOGAf8D9gH/A1EBnwgAA4MB7wP2Af8D9gH/ + A/YB/wMhATAEAAMMARAD9gH/AzcB/wM3Af8DNwH/AzcB/wM3Af8DkQH/A4MB7wQAA/YB/wFwAbYB3AH/ AXABtgHcAf8BcAG2AdwB/wFwAbYB3AH/AXABtgHcAf8BcAG2AdwB/wFwAbYB3AH/AXABtgHcAf8BcAG2 - AdwB/wFwAbYB3AH/A/YB/xgAA/YB/wP2Af8D9gH/A/YB/wORAf8DOAH/AzgB/wM4Af8DhgH/A/YB/yQA - AwwBEANgAc8D9gH/A/YB/wNAAXAMAAM6AWAB5wHuAfMB/wFxAbYB3AH/AXEBtgHcAf8BcQG2AdwB/wFx - AbYB3AH/AXEBtgHcAf8BcQG2AdwB/wFxAbYB3AH/AXEBtgHcAf8BcQG2AdwB/wFxAbYB3AH/AdMB4QHr - Af8BcQG2AdwB/wP2Af8EAAP2Af8BcAG2AdwB/wFwAbYB3AH/AXABtgHcAf8BcAG2AdwB/wFwAbYB3AH/ - AXABtgHcAf8BcAG2AdwB/wFwAbYB3AH/AXABtgHcAf8BcAG2AdwB/wFwAbYB3AH/AXABtgHcAf8BcAG2 - AdwB/wP2Af8YAAP2Af8DOAH/AzgB/wM4Af8DOAH/AzgB/wM4Af8DOAH/A/YB/wNRAZ8gAAM6AWAD9gH/ - A3AB/wM4Af8DOAH/A8kB/wP2Af8IAAP2Af8BggG6Ad4B/wFxAbYB3AH/AXEBtgHcAf8BcQG2AdwB/wFx - AbYB3AH/AXEBtgHcAf8BcQG2AdwB/wFxAbYB3AH/AXEBtgHcAf8BcQG2AdwB/wGBAboB3QH/AfEB7wHw - Af8BcQG2AdwB/wP2Af8EAAP2Af8BcAG2AdwB/wFwAbYB3AH/AXABtgHcAf8BcAG2AdwB/wFwAbYB3AH/ - AXABtgHcAf8BcAG2AdwB/wFwAbYB3AH/AXABtgHcAf8BcAG2AdwB/wFwAbYB3AH/AXABtgHcAf8BcAG2 - AdwB/wP2Af8YAAP2Af8DOAH/A/YB/wP2Af8D9gH/A/YB/wOGAf8D9gH/A1EBnwgAA4gB7wP2Af8D9gH/ - A/YB/wMhATAEAAMMARAD9gH/AzgB/wM4Af8DOAH/AzgB/wM4Af8DkQH/A4gB7wQAA/YB/wFxAbYB3AH/ - AXEBtgHcAf8BcQG2AdwB/wFxAbYB3AH/AXEBtgHcAf8BcQG2AdwB/wFxAbYB3AH/AXEBtgHcAf8BcQG2 - AdwB/wFxAbYB3AH/AfEB7wHwAf8B8QHvAfAB/wFxAbYB3AH/A/YB/wQAA/YB/wFwAbYB3AH/AXABtgHc - Af8BcAG2AdwB/wFwAbYB3AH/AXABtgHcAf8BcAG2AdwB/wFwAbYB3AH/AXABtgHcAf8BcAG2AdwB/wFw - AbYB3AH/AXABtgHcAf8BcAG2AdwB/wFwAbYB3AH/A/YB/wwAA/YB/wNRAZ8EAAP2Af8DOAH/A/YB/wP2 - Af8D9gH/A4YB/wP2Af8DZgHfCAADUQGfA74B/wM4Af8DOAH/AzgB/wP2Af8D9gH/A/YB/wNwAf8DOAH/ - A0MB/wHxAe8B8AH/AcUBxAHFAf8DOAH/AzgB/wP2Af8DWQG/AbAB0gHnAf8BcQG2AdwB/wFxAbYB3AH/ - AXEBtgHcAf8BcQG2AdwB/wFxAbYB3AH/AXEBtgHcAf8BcQG2AdwB/wFxAbYB3AH/AXEBtgHcAf8BnwHI - AeIB/wHxAe8B8AH/AfEB7wHwAf8BcQG2AdwB/wP2Af8EAAP2Af8BcAG2AdwB/wFwAbYB3AH/AXABtgHc - Af8BcAG2AdwB/wFwAbYB3AH/AXABtgHcAf8BcAG2AdwB/wFwAbYB3AH/AXABtgHcAf8BcAG2AdwB/wFw - AbYB3AH/AXABtgHcAf8BcAG2AdwB/wP2Af8IAAP2Af8DhgH/A/YB/wNRAZ8D9gH/AzgB/wP2Af8D9gH/ - A4YB/wM4Af8DOAH/A/YB/wNRAZ8EAAP2Af8DOAH/AzgB/wM4Af8DOAH/AzgB/wM4Af8DOAH/AzgB/wM4 - Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DOAH/AzgB/wP2Af8D9gH/A/YB/wFxAbYB3AH/AfEB7wHw + AdwB/wFwAbYB3AH/AfEB7wHwAf8B8QHvAfAB/wFwAbYB3AH/A/YB/wQAA/YB/wFvAbYB3AH/AW8BtgHc + Af8BbwG2AdwB/wFvAbYB3AH/AW8BtgHcAf8BbwG2AdwB/wFvAbYB3AH/AW8BtgHcAf8BbwG2AdwB/wFv + AbYB3AH/AW8BtgHcAf8BbwG2AdwB/wFvAbYB3AH/A/YB/wwAA/YB/wNRAZ8EAAP2Af8DNwH/A/YB/wP2 + Af8D9gH/A4YB/wP2Af8DYwHfCAADUQGfA74B/wM3Af8DNwH/AzcB/wP2Af8D9gH/A/YB/wNvAf8DNwH/ + A0IB/wHxAe8B8AH/AcUBxAHFAf8DNwH/AzcB/wP2Af8DWQG/AbAB0gHnAf8BcAG2AdwB/wFwAbYB3AH/ + AXABtgHcAf8BcAG2AdwB/wFwAbYB3AH/AXABtgHcAf8BcAG2AdwB/wFwAbYB3AH/AXABtgHcAf8BnwHI + AeIB/wHxAe8B8AH/AfEB7wHwAf8BcAG2AdwB/wP2Af8EAAP2Af8BbwG2AdwB/wFvAbYB3AH/AW8BtgHc + Af8BbwG2AdwB/wFvAbYB3AH/AW8BtgHcAf8BbwG2AdwB/wFvAbYB3AH/AW8BtgHcAf8BbwG2AdwB/wFv + AbYB3AH/AW8BtgHcAf8BbwG2AdwB/wP2Af8IAAP2Af8DhgH/A/YB/wNRAZ8D9gH/AzcB/wP2Af8D9gH/ + A4YB/wM3Af8DNwH/A/YB/wNRAZ8EAAP2Af8DNwH/AzcB/wM3Af8DNwH/AzcB/wM3Af8DNwH/AzcB/wM3 + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DNwH/AzcB/wP2Af8D9gH/A/YB/wFwAbYB3AH/AfEB7wHw Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx - Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wFxAbYB3AH/A/YB/wQAA/YB/wFwAbYB3AH/AXABtgHcAf8BcAG2 - AdwB/wFwAbYB3AH/AXABtgHcAf8BcAG2AdwB/wFwAbYB3AH/AXABtgHcAf8BcAG2AdwB/wFwAbYB3AH/ - AXABtgHcAf8BcAG2AdwB/wFwAbYB3AH/A/YB/wQAA/YB/wOGAf8DOAH/AzgB/wP2Af8D9gH/AzgB/wP2 - Af8D9gH/AzgB/wM4Af8DOAH/AzgB/wP2Af8DUQGfA4gB7wNPAf8DOAH/AzgB/wM4Af8D9gH/A/YB/wP2 - Af8DOAH/AzgB/wHFAcQBxQH/AfEB7wHwAf8B8QHvAfAB/wM4Af8DOAH/A/YB/wQAA/YB/wFxAbYB3AH/ + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wFwAbYB3AH/A/YB/wQAA/YB/wFvAbYB3AH/AW8BtgHcAf8BbwG2 + AdwB/wFvAbYB3AH/AW8BtgHcAf8BbwG2AdwB/wFvAbYB3AH/AW8BtgHcAf8BbwG2AdwB/wFvAbYB3AH/ + AW8BtgHcAf8BbwG2AdwB/wFvAbYB3AH/A/YB/wQAA/YB/wOGAf8DNwH/AzcB/wP2Af8D9gH/AzcB/wP2 + Af8D9gH/AzcB/wM3Af8DNwH/AzcB/wP2Af8DUQGfA4MB7wNOAf8DNwH/AzcB/wM3Af8D9gH/A/YB/wP2 + Af8DNwH/AzcB/wHFAcQBxQH/AfEB7wHwAf8B8QHvAfAB/wM3Af8DNwH/A/YB/wQAA/YB/wFwAbYB3AH/ AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv - AfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wFxAbYB3AH/A/YB/wQAA/YB/wFwAbYB3AH/AXABtgHc - Af8BcAG2AdwB/wFwAbYB3AH/AXABtgHcAf8BcAG2AdwB/wFwAbYB3AH/AXABtgHcAf8BcAG2AdwB/wFw - AbYB3AH/AXABtgHcAf8BcAG2AdwB/wFwAbYB3AH/A/YB/wP2Af8DhgH/AzgB/wM4Af8DOAH/AzgB/wM4 - Af8DOAH/AzgB/wM4Af8DOAH/AzgB/wM4Af8DOAH/A4YB/wP2Af8DFwEgA/YB/wNPAf8DOAH/A74B/wOI - Ae8EAANAAXADyQH/AzgB/wM4Af8DOAH/AzgB/wM4Af8DOAH/A/YB/wQAA/YB/wFxAbYB3AH/AfEB7wHw + AfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wFwAbYB3AH/A/YB/wQAA/YB/wFvAbYB3AH/AW8BtgHc + Af8BbwG2AdwB/wFvAbYB3AH/AW8BtgHcAf8BbwG2AdwB/wFvAbYB3AH/AW8BtgHcAf8BbwG2AdwB/wFv + AbYB3AH/AW8BtgHcAf8BbwG2AdwB/wFvAbYB3AH/A/YB/wP2Af8DhgH/AzcB/wM3Af8DNwH/AzcB/wM3 + Af8DNwH/AzcB/wM3Af8DNwH/AzcB/wM3Af8DNwH/A4YB/wP2Af8DFwEgA/YB/wNOAf8DNwH/A74B/wOD + Ae8EAANAAXADyQH/AzcB/wM3Af8DNwH/AzcB/wM3Af8DNwH/A/YB/wQAA/YB/wFwAbYB3AH/AfEB7wHw Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx - Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wFxAbYB3AH/A/YB/wQAA/YB/wFwAbYB3AH/AXABtgHcAf8BcAG2 - AdwB/wFwAbYB3AH/AXABtgHcAf8BcAG2AdwB/wFwAbYB3AH/AXABtgHcAf8BcAG2AdwB/wFwAbYB3AH/ - AXABtgHcAf8BcAG2AdwB/wFwAbYB3AH/A/YB/wNRAZ8D9gH/AzgB/wM4Af8DOAH/AzgB/wM4Af8D9gH/ - A/YB/wP2Af8D9gH/A/YB/wM4Af8DhgH/A/YB/wgAAxcBIAOIAe8D9gH/A1EBnwwAA/YB/wOGAf8DOAH/ - AzgB/wM4Af8DOAH/A/YB/wMyAVAEAAP2Af8BcQG2AdwB/wFxAbYB3AH/AXEBtgHcAf8BcQG2AdwB/wFx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wFwAbYB3AH/A/YB/wQAA/YB/wFvAbYB3AH/AW8BtgHcAf8BbwG2 + AdwB/wFvAbYB3AH/AW8BtgHcAf8BbwG2AdwB/wFvAbYB3AH/AW8BtgHcAf8BbwG2AdwB/wFvAbYB3AH/ + AW8BtgHcAf8BbwG2AdwB/wFvAbYB3AH/A/YB/wNRAZ8D9gH/AzcB/wM3Af8DNwH/AzcB/wM3Af8D9gH/ + A/YB/wP2Af8D9gH/A/YB/wM3Af8DhgH/A/YB/wgAAxcBIAODAe8D9gH/A1EBnwwAA/YB/wOGAf8DNwH/ + AzcB/wM3Af8DNwH/A/YB/wMyAVAEAAP2Af8BcAG2AdwB/wFwAbYB3AH/AXABtgHcAf8BcAG2AdwB/wFw AbYB3AH/AeIB6AHuAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw - Af8BcQG2AdwB/wP2Af8EAAP2Af8D9gH/A/YB/wP2Af8D9gH/AdcB5gHwAf8BcAG2AdwB/wHxAe8B8AH/ - AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wFwAbYB3AH/A/YB/wQAA1EBnwP2 - Af8DOAH/AzgB/wM4Af8DOAH/AzgB/wP2Af8DUQGfBAADUQGfA/YB/wP2Af8sAAOIAe8D9gH/A/YB/wP2 - Af8D9gH/AzIBUAgAAzoBYAP2Af8D9gH/A/YB/wP2Af8D9gH/AXEBtgHcAf8B8QHvAfAB/wHxAe8B8AH/ - AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8BcQG2AdwB/wP2Af8IAAMMARAMAAP2Af8BggG6 - Ad4B/wFwAbYB3AH/AXABtgHcAf8BcAG2AdwB/wFwAbYB3AH/AXABtgHcAf8BcAG2AdwB/wFwAbYB3AH/ - A/YB/wgAA1EBnwP2Af8DOAH/AzgB/wM4Af8DOAH/A4YB/wP2Af8IAANRAZ9kAAP2Af8BigG+Ad8B/wFx - AbYB3AH/AXEBtgHcAf8BcQG2AdwB/wFxAbYB3AH/AXEBtgHcAf8BcQG2AdwB/wFxAbYB3AH/A/YB/xgA - AxcBIAP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A0cBgAwAA1EBnwP2Af8DOAH/AzgB/wOG + Af8BcAG2AdwB/wP2Af8EAAP2Af8D9gH/A/YB/wP2Af8D9gH/AdcB5gHwAf8BbwG2AdwB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wFvAbYB3AH/A/YB/wQAA1EBnwP2 + Af8DNwH/AzcB/wM3Af8DNwH/AzcB/wP2Af8DUQGfBAADUQGfA/YB/wP2Af8sAAODAe8D9gH/A/YB/wP2 + Af8D9gH/AzIBUAgAAzoBYAP2Af8D9gH/A/YB/wP2Af8D9gH/AXABtgHcAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8BcAG2AdwB/wP2Af8IAAMMARAMAAP2Af8BggG6 + Ad4B/wFvAbYB3AH/AW8BtgHcAf8BbwG2AdwB/wFvAbYB3AH/AW8BtgHcAf8BbwG2AdwB/wFvAbYB3AH/ + A/YB/wgAA1EBnwP2Af8DNwH/AzcB/wM3Af8DNwH/A4YB/wP2Af8IAANRAZ9kAAP2Af8BigG+Ad8B/wFw + AbYB3AH/AXABtgHcAf8BcAG2AdwB/wFwAbYB3AH/AXABtgHcAf8BcAG2AdwB/wFwAbYB3AH/A/YB/xgA + AxcBIAP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A0cBgAwAA1EBnwP2Af8DNwH/AzcB/wOG Af8D9gH/dAADFwEgA/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/UAADUQGfA/YB/wOG Af8D9gH/9AADUQGfA/YB/6QAAUIBTQE+BwABPgMAASgDAAFAAwABIAMAAQEBAAEBBgABARYAA/8BAAHA Af8GAAGAAX8GAAGAAT8HAAE/BwABPwcAAQMGAAGAAQEGAAGABwABgAcAAfAHAAH8BwAB+AcAAfwHAAH8 @@ -221,4 +221,7 @@ AfwBAAH8AQAB4AF/Av8B/AEAAv8B8Af/AfkF/ws= + + 291, 17 + \ No newline at end of file