public override bool Equals(object obj) { if (base.Equals(obj)) { return(true); } COMCLSIDServerDotNetEntry right = obj as COMCLSIDServerDotNetEntry; if (right == null) { return(false); } return(AssemblyName.Equals(right.AssemblyName) && ClassName.Equals(right.ClassName) && CodeBase.Equals(right.CodeBase) && RuntimeVersion.Equals(right.RuntimeVersion)); }
internal COMCLSIDServerEntry(RegistryKey key, COMServerType server_type) : this(server_type) { string server_string = key.ReadString(); RawServer = key.ReadString(options: RegistryValueOptions.DoNotExpandEnvironmentNames); if (string.IsNullOrWhiteSpace(server_string)) { // TODO: Support weird .NET registration which registers a .NET version string. return; } bool process_command_line = false; CommandLine = string.Empty; if (server_type == COMServerType.LocalServer32) { string executable = key.ReadString(valueName: "ServerExecutable"); if (!string.IsNullOrWhiteSpace(executable)) { server_string = executable; } else { process_command_line = true; } CommandLine = server_string; ThreadingModel = COMThreadingModel.Both; } else if (server_type == COMServerType.InProcServer32) { ThreadingModel = ReadThreadingModel(key); if (key.GetValue("Assembly") != null) { DotNet = new COMCLSIDServerDotNetEntry(key); } } else { ThreadingModel = COMThreadingModel.Apartment; } Server = ProcessFileName(server_string, process_command_line); }
private void SetupClsidEntry(COMCLSIDEntry entry) { textBoxClsidName.Text = entry.Name; textBoxClsid.Text = entry.Clsid.FormatGuid(); textBoxServerType.Text = entry.DefaultServerType.ToString(); textBoxThreadingModel.Text = entry.DefaultThreadingModel.ToString(); textBoxServer.Text = entry.DefaultServer; textBoxCmdLine.Text = GetStringValue(entry.DefaultCmdLine); textBoxTreatAs.Text = GetGuidValue(entry.TreatAs); btnTreatAsProps.Enabled = m_registry.Clsids.ContainsKey(entry.TreatAs); var progids = m_registry.Progids; foreach (string progid in m_registry.GetProgIdsForClsid(entry.Clsid).Select(p => p.ProgID)) { ListViewItem item = listViewProgIDs.Items.Add(progid); if (progids.ContainsKey(progid)) { item.Tag = progids[progid]; } } listViewProgIDs.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent); foreach (Guid catid in entry.Categories) { ListViewItem item = listViewCategories.Items.Add(COMUtilities.GetCategoryName(catid)); item.Tag = catid; } listViewCategories.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent); LoadInterfaceList(entry.Interfaces, listViewInterfaces); LoadInterfaceList(entry.FactoryInterfaces, listViewFactoryInterfaces); tabPageSupportedInterfaces.Tag = entry; tabControlProperties.TabPages.Add(tabPageClsid); tabControlProperties.TabPages.Add(tabPageSupportedInterfaces); if (m_registry.AppIDs.ContainsKey(entry.AppID)) { SetupAppIdEntry(m_registry.AppIDs[entry.AppID]); } IEnumerable <COMInterfaceEntry> proxies = m_registry.GetProxiesForClsid(entry); if (proxies.Any()) { foreach (COMInterfaceEntry intf in proxies.OrderBy(i => i.Name)) { ListViewItem item = listViewProxies.Items.Add(intf.Name); item.SubItems.Add(intf.Iid.FormatGuid()); item.Tag = intf; } listViewProxies.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent); listViewProxies.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); listViewProxies.ListViewItemSorter = new ListItemComparer(0); tabControlProperties.TabPages.Add(tabPageProxies); } if (entry.Servers.Count > 1) { foreach (COMCLSIDServerEntry server in entry.Servers.Values) { ListViewItem item = listViewCLSIDServers.Items.Add(server.ServerType.ToString()); item.SubItems.Add(server.Server); item.SubItems.Add(server.CommandLine); item.SubItems.Add(server.ThreadingModel.ToString()); item.Tag = server; } listViewCLSIDServers.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent); listViewCLSIDServers.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); listViewCLSIDServers.ListViewItemSorter = new ListItemComparer(0); tabControlProperties.TabPages.Add(tabPageServers); } SetupTypeLibVersionEntry(m_registry.GetTypeLibVersionEntry(entry.TypeLib, null)); if (entry.Elevation != null) { textBoxElevationEnabled.Text = entry.Elevation.Enabled.ToString(); textBoxElevationAutoApproval.Text = entry.Elevation.AutoApproval.ToString(); textBoxElevationIconReference.Text = GetStringValue(entry.Elevation.IconReference); foreach (COMCLSIDEntry vso in entry.Elevation.VirtualServerObjects.Select(v => m_registry.MapClsidToEntry(v))) { ListViewItem item = listViewElevationVSOs.Items.Add(vso.Name); item.SubItems.Add(vso.Clsid.ToString()); item.SubItems.Add(vso.CanElevate.ToString()); item.SubItems.Add(vso.AutoElevation.ToString()); item.Tag = vso; } listViewElevationVSOs.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent); listViewElevationVSOs.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); listViewElevationVSOs.ListViewItemSorter = new ListItemComparer(0); tabControlProperties.TabPages.Add(tabPageElevation); } if (entry.Servers.ContainsKey(COMServerType.InProcServer32) && entry.Servers[COMServerType.InProcServer32].HasDotNet) { COMCLSIDServerDotNetEntry dotnet = entry.Servers[COMServerType.InProcServer32].DotNet; textBoxDotNetAssemblyName.Text = dotnet.AssemblyName; textBoxDotNetClassName.Text = dotnet.ClassName; textBoxDotNetCodeBase.Text = dotnet.CodeBase; textBoxDotNetRuntimeVersion.Text = dotnet.RuntimeVersion; tabControlProperties.TabPages.Add(tabPageDotNet); } m_clsid = entry; }