├── .gitattributes ├── .gitignore ├── AS ├── AS.csproj ├── AssemblyInfo.cs ├── Program.cs ├── Properties │ ├── Resources.cs │ └── Resources.resx ├── app.config └── lib │ └── AddInScanEngine.dll ├── AddInScanEngine ├── AddInData.cs ├── AddInScanEngine.csproj ├── AddInScanEngine.sln ├── AssemblyInfo.cs ├── AssemblyScanner.cs ├── ComAddInUtilities.cs ├── Controller.cs ├── GacEnumerator.cs ├── Globals.cs ├── GridProxy.cs ├── IAddInGridControl.cs ├── ILReader.cs ├── ManifestReader.cs ├── MethodInstruction.cs ├── ModuleScopeTokenResolver.cs ├── NativeAddInScanner.cs ├── NativeMethods.cs ├── Properties │ ├── Resources.cs │ └── Resources.resx ├── RegistryReader.cs ├── ReportWriter.cs └── SecondaryExtensibility.cs ├── AddInSpy.sln ├── AddInSpy ├── AddInDataControl.cs ├── AddInDataControl.resx ├── AddInGridControl.cs ├── AddInGridControl.resx ├── AddInSpy.csproj ├── AddInSpyWindow.xaml.cs ├── App.cs ├── AssemblyInfo.cs ├── CheckedComboClick.cs ├── CheckedComboControl.xaml.cs ├── CheckedComboEventArgs.cs ├── HelpWindow.xaml.cs ├── Properties │ ├── Resources.cs │ ├── Resources.resx │ └── Settings.cs ├── WfDataProxyWindow.xaml.cs ├── WfGridProxyControl.xaml.cs ├── addinspywindow.xaml ├── app.config ├── checkedcombocontrol.xaml ├── helpwindow.xaml ├── images │ ├── addinspy.ico │ ├── help.png │ ├── homehs.png │ ├── navback.png │ ├── navforward.png │ ├── refresh.png │ └── report.png ├── lib │ └── AddInScanEngine.dll ├── wfdataproxywindow.xaml └── wfgridproxycontrol.xaml ├── LICENSE.txt ├── README.md └── appveyor.yml /.gitattributes: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Set default behavior to automatically normalize line endings. 3 | ############################################################################### 4 | * text=auto 5 | 6 | ############################################################################### 7 | # Set default behavior for command prompt diff. 8 | # 9 | # This is need for earlier builds of msysgit that does not have it on by 10 | # default for csharp files. 11 | # Note: This is only used by command line 12 | ############################################################################### 13 | #*.cs diff=csharp 14 | 15 | ############################################################################### 16 | # Set the merge driver for project and solution files 17 | # 18 | # Merging from the command prompt will add diff markers to the files if there 19 | # are conflicts (Merging from VS is not affected by the settings below, in VS 20 | # the diff markers are never inserted). Diff markers may cause the following 21 | # file extensions to fail to load in VS. An alternative would be to treat 22 | # these files as binary and thus will always conflict and require user 23 | # intervention with every merge. To do so, just uncomment the entries below 24 | ############################################################################### 25 | #*.sln merge=binary 26 | #*.csproj merge=binary 27 | #*.vbproj merge=binary 28 | #*.vcxproj merge=binary 29 | #*.vcproj merge=binary 30 | #*.dbproj merge=binary 31 | #*.fsproj merge=binary 32 | #*.lsproj merge=binary 33 | #*.wixproj merge=binary 34 | #*.modelproj merge=binary 35 | #*.sqlproj merge=binary 36 | #*.wwaproj merge=binary 37 | 38 | ############################################################################### 39 | # behavior for image files 40 | # 41 | # image files are treated as binary by default. 42 | ############################################################################### 43 | #*.jpg binary 44 | #*.png binary 45 | #*.gif binary 46 | 47 | ############################################################################### 48 | # diff behavior for common document formats 49 | # 50 | # Convert binary document formats to text before diffing them. This feature 51 | # is only available from the command line. Turn it on by uncommenting the 52 | # entries below. 53 | ############################################################################### 54 | #*.doc diff=astextplain 55 | #*.DOC diff=astextplain 56 | #*.docx diff=astextplain 57 | #*.DOCX diff=astextplain 58 | #*.dot diff=astextplain 59 | #*.DOT diff=astextplain 60 | #*.pdf diff=astextplain 61 | #*.PDF diff=astextplain 62 | #*.rtf diff=astextplain 63 | #*.RTF diff=astextplain 64 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by http://www.gitignore.io 2 | 3 | ### VisualStudio ### 4 | ## Ignore Visual Studio temporary files, build results, and 5 | ## files generated by popular Visual Studio add-ons. 6 | 7 | # User-specific files 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # Build results 14 | [Dd]ebug/ 15 | [Dd]ebugPublic/ 16 | [Rr]elease/ 17 | [Rr]eleases/ 18 | x64/ 19 | x86/ 20 | build/ 21 | bld/ 22 | [Bb]in/ 23 | [Oo]bj/ 24 | 25 | # Roslyn cache directories 26 | *.sln.ide 27 | *.ide/ 28 | 29 | # MSTest test Results 30 | [Tt]est[Rr]esult*/ 31 | [Bb]uild[Ll]og.* 32 | 33 | #NUNIT 34 | *.VisualState.xml 35 | TestResult.xml 36 | 37 | # Build Results of an ATL Project 38 | [Dd]ebugPS/ 39 | [Rr]eleasePS/ 40 | dlldata.c 41 | 42 | *_i.c 43 | *_p.c 44 | *_i.h 45 | *.ilk 46 | *.meta 47 | *.obj 48 | *.pch 49 | *.pdb 50 | *.pgc 51 | *.pgd 52 | *.rsp 53 | *.sbr 54 | *.tlb 55 | *.tli 56 | *.tlh 57 | *.tmp 58 | *.tmp_proj 59 | *.log 60 | *.vspscc 61 | *.vssscc 62 | .builds 63 | *.pidb 64 | *.svclog 65 | *.scc 66 | 67 | # Chutzpah Test files 68 | _Chutzpah* 69 | 70 | # Visual C++ cache files 71 | ipch/ 72 | *.aps 73 | *.ncb 74 | *.opensdf 75 | *.sdf 76 | *.cachefile 77 | 78 | # Visual Studio profiler 79 | *.psess 80 | *.vsp 81 | *.vspx 82 | 83 | # TFS 2012 Local Workspace 84 | $tf/ 85 | 86 | # Guidance Automation Toolkit 87 | *.gpState 88 | 89 | # ReSharper is a .NET coding add-in 90 | _ReSharper*/ 91 | *.[Rr]e[Ss]harper 92 | *.DotSettings.user 93 | 94 | # JustCode is a .NET coding addin-in 95 | .JustCode 96 | 97 | # TeamCity is a build add-in 98 | _TeamCity* 99 | 100 | # DotCover is a Code Coverage Tool 101 | *.dotCover 102 | 103 | # NCrunch 104 | _NCrunch_* 105 | .*crunch*.local.xml 106 | 107 | # MightyMoose 108 | *.mm.* 109 | AutoTest.Net/ 110 | 111 | # Web workbench (sass) 112 | .sass-cache/ 113 | 114 | # Installshield output folder 115 | [Ee]xpress/ 116 | 117 | # DocProject is a documentation generator add-in 118 | DocProject/buildhelp/ 119 | DocProject/Help/*.HxT 120 | DocProject/Help/*.HxC 121 | DocProject/Help/*.hhc 122 | DocProject/Help/*.hhk 123 | DocProject/Help/*.hhp 124 | DocProject/Help/Html2 125 | DocProject/Help/html 126 | 127 | # Click-Once directory 128 | publish/ 129 | 130 | # Publish Web Output 131 | *.[Pp]ublish.xml 132 | *.azurePubxml 133 | # TODO: Comment the next line if you want to checkin your web deploy settings 134 | # but database connection strings (with potential passwords) will be unencrypted 135 | *.pubxml 136 | *.publishproj 137 | 138 | # NuGet Packages 139 | *.nupkg 140 | # The packages folder can be ignored because of Package Restore 141 | **/packages/* 142 | # except build/, which is used as an MSBuild target. 143 | !**/packages/build/ 144 | # If using the old MSBuild-Integrated Package Restore, uncomment this: 145 | #!**/packages/repositories.config 146 | 147 | # Windows Azure Build Output 148 | csx/ 149 | *.build.csdef 150 | 151 | # Windows Store app package directory 152 | AppPackages/ 153 | 154 | # Others 155 | sql/ 156 | *.Cache 157 | ClientBin/ 158 | [Ss]tyle[Cc]op.* 159 | ~$* 160 | *.dbmdl 161 | *.dbproj.schemaview 162 | *.pfx 163 | *.publishsettings 164 | node_modules/ 165 | *.metaproj 166 | *.metaproj.tmp 167 | 168 | # RIA/Silverlight projects 169 | Generated_Code/ 170 | 171 | # Backup & report files from converting an old project file 172 | # to a newer Visual Studio version. Backup files are not needed, 173 | # because we have git ;-) 174 | _UpgradeReport_Files/ 175 | Backup*/ 176 | UpgradeLog*.XML 177 | UpgradeLog*.htm 178 | 179 | # SQL Server files 180 | *.mdf 181 | *.ldf 182 | 183 | # Business Intelligence projects 184 | *.rdl.data 185 | *.bim.layout 186 | *.bim_*.settings 187 | 188 | # Microsoft Fakes 189 | FakesAssemblies/ 190 | 191 | # Codeplex 192 | BuildProcessTemplates/ 193 | 194 | 195 | ### SVN ### 196 | .svn/ 197 | 198 | 199 | ### SublimeText ### 200 | # cache files for sublime text 201 | *.tmlanguage.cache 202 | *.tmPreferences.cache 203 | *.stTheme.cache 204 | 205 | # workspace files are user-specific 206 | *.sublime-workspace 207 | 208 | # project files should be checked into the repository, unless a significant 209 | # proportion of contributors will probably not be using SublimeText 210 | # *.sublime-project 211 | 212 | # sftp configuration file 213 | sftp-config.json 214 | 215 | 216 | ### Windows ### 217 | # Windows image file caches 218 | Thumbs.db 219 | ehthumbs.db 220 | 221 | # Folder config file 222 | Desktop.ini 223 | 224 | # Recycle Bin used on file shares 225 | $RECYCLE.BIN/ 226 | 227 | # Windows Installer files 228 | *.cab 229 | *.msi 230 | *.msm 231 | *.msp 232 | 233 | # Windows shortcuts 234 | *.lnk 235 | -------------------------------------------------------------------------------- /AS/AS.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {26FB0558-0C68-49D4-96BE-CB305EE1FD1E} 8 | Exe 9 | AS 10 | AS 11 | v4.5 12 | 13 | 14 | 15 | 16 | 2.0 17 | 18 | publish\ 19 | true 20 | Disk 21 | false 22 | Foreground 23 | 7 24 | Days 25 | false 26 | false 27 | true 28 | 0 29 | 1.5.0.0 30 | false 31 | false 32 | true 33 | 34 | 35 | AnyCPU 36 | true 37 | full 38 | false 39 | bin\Debug\ 40 | DEBUG;TRACE 41 | prompt 42 | 4 43 | false 44 | 45 | 46 | AnyCPU 47 | pdbonly 48 | true 49 | bin\Release\ 50 | TRACE 51 | prompt 52 | 4 53 | false 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | {5daf28b6-078c-457d-9591-13dfe22c1ce3} 69 | AddInScanEngine 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | False 78 | .NET Framework 3.5 SP1 Client Profile 79 | false 80 | 81 | 82 | False 83 | .NET Framework 3.5 SP1 84 | true 85 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /AS/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.InteropServices; 3 | 4 | [assembly: AssemblyCompany("Microsoft")] 5 | [assembly: AssemblyProduct("AS")] 6 | [assembly: AssemblyTitle("AS")] 7 | [assembly: AssemblyDescription("")] 8 | [assembly: AssemblyConfiguration("")] 9 | [assembly: AssemblyCopyright("Copyright © Microsoft 2008")] 10 | [assembly: AssemblyTrademark("")] 11 | [assembly: ComVisible(false)] 12 | [assembly: Guid("6941cb5f-95c9-4fd1-90e4-45f96eb8b2c4")] 13 | [assembly: AssemblyFileVersion("1.5.0.0")] 14 | [assembly: AssemblyVersion("1.5.0.0")] 15 | -------------------------------------------------------------------------------- /AS/Program.cs: -------------------------------------------------------------------------------- 1 | // Decompiled with JetBrains decompiler 2 | // Type: AS.Program 3 | // Assembly: AS, Version=1.5.0.0, Culture=neutral, PublicKeyToken=null 4 | // MVID: AFE2FA58-896E-487A-A656-63ED650F5324 5 | // Assembly location: C:\Users\Jozef\Downloads\AddInSpy\AS.exe 6 | 7 | using AddInSpy; 8 | using AS.Properties; 9 | using System; 10 | 11 | namespace AS 12 | { 13 | public class Program 14 | { 15 | private string[] hostNames = new string[11] 16 | { 17 | "Access", 18 | "Excel", 19 | "FrontPage", 20 | "InfoPath", 21 | "Outlook", 22 | "PowerPoint", 23 | "Project", 24 | "Publisher", 25 | "SharePoint Designer", 26 | "Visio", 27 | "Word" 28 | }; 29 | private string[] scanNames = new string[7] 30 | { 31 | Resources.SCAN_HKCU, 32 | Resources.SCAN_HKLM, 33 | Resources.SCAN_REMOTE, 34 | Resources.SCAN_MANAGED_INTERFACES, 35 | Resources.SCAN_NATIVE_INTERFACES, 36 | Resources.SCAN_DISABLED_ITEMS, 37 | Resources.SCAN_FORMREGIONS 38 | }; 39 | private string[] reportTypes = new string[2] 40 | { 41 | Resources.REPORT_CONTEXT, 42 | Resources.REPORT_ADDINS 43 | }; 44 | private Controller controller; 45 | 46 | public Program() 47 | { 48 | this.controller = new Controller(false); 49 | } 50 | 51 | public static void Main(string[] args) 52 | { 53 | Program program = new Program(); 54 | try 55 | { 56 | if (args[0] == Resources.ARG_HELP_SLASH || args[0] == Resources.ARG_HELP_DASH || !program.ParseCommandLine(args)) 57 | { 58 | Console.WriteLine(string.Format(Resources.SYNTAX_MESSAGE, (object) Environment.NewLine)); 59 | } 60 | else 61 | { 62 | program.controller.Refresh(); 63 | program.controller.GenerateReport(); 64 | } 65 | } 66 | catch (Exception ex) 67 | { 68 | Console.WriteLine(ex.ToString()); 69 | } 70 | } 71 | 72 | public bool ParseCommandLine(string[] args) 73 | { 74 | bool flag = true; 75 | if (args.Length > 0) 76 | { 77 | foreach (string str in args) 78 | { 79 | if (str.StartsWith("/") || str.StartsWith("-")) 80 | { 81 | string[] strArray1 = str.Split(new char[2] 82 | { 83 | '=', 84 | ',' 85 | }); 86 | if (strArray1.Length < 2) 87 | { 88 | flag = false; 89 | break; 90 | } 91 | else 92 | { 93 | string[] strArray2 = new string[strArray1.Length - 1]; 94 | Array.Copy((Array) strArray1, 1, (Array) strArray2, 0, strArray2.Length); 95 | for (int index = 0; index < strArray2.Length; ++index) 96 | strArray2[index] = strArray2[index].ToLowerInvariant(); 97 | switch (strArray1[0].ToLowerInvariant()) 98 | { 99 | case "/h": 100 | case "/hosts": 101 | case "-h": 102 | case "-hosts": 103 | if (strArray2.Length == 1 && strArray2[0] == Resources.OPTION_ALL) 104 | { 105 | strArray2 = (string[]) this.hostNames.Clone(); 106 | } 107 | else 108 | { 109 | for (int index = 0; index < strArray2.Length; ++index) 110 | { 111 | switch (strArray2[index]) 112 | { 113 | case "access": 114 | strArray2[index] = "Access"; 115 | break; 116 | case "excel": 117 | strArray2[index] = "Excel"; 118 | break; 119 | case "frontpage": 120 | strArray2[index] = "FrontPage"; 121 | break; 122 | case "infopath": 123 | strArray2[index] = "InfoPath"; 124 | break; 125 | case "outlook": 126 | strArray2[index] = "Outlook"; 127 | break; 128 | case "powerpoint": 129 | strArray2[index] = "PowerPoint"; 130 | break; 131 | case "project": 132 | strArray2[index] = "Project"; 133 | break; 134 | case "publisher": 135 | strArray2[index] = "Publisher"; 136 | break; 137 | case "sharepointdesigner": 138 | strArray2[index] = "SharePoint Designer"; 139 | break; 140 | case "visio": 141 | strArray2[index] = "Visio"; 142 | break; 143 | case "word": 144 | strArray2[index] = "Word"; 145 | break; 146 | default: 147 | flag = false; 148 | break; 149 | } 150 | } 151 | } 152 | this.controller.HostNames = strArray2; 153 | break; 154 | case "/s": 155 | case "/scans": 156 | case "-s": 157 | case "-scans": 158 | if (strArray2.Length == 1 && strArray2[0] == Resources.OPTION_ALL) 159 | { 160 | strArray2 = (string[]) this.scanNames.Clone(); 161 | } 162 | else 163 | { 164 | for (int index = 0; index < strArray2.Length; ++index) 165 | { 166 | switch (strArray2[index]) 167 | { 168 | case "hkcu": 169 | strArray2[index] = Resources.SCAN_HKCU; 170 | break; 171 | case "hklm": 172 | strArray2[index] = Resources.SCAN_HKLM; 173 | break; 174 | case "remote": 175 | strArray2[index] = Resources.SCAN_REMOTE; 176 | break; 177 | case "managedinterfaces": 178 | strArray2[index] = Resources.SCAN_MANAGED_INTERFACES; 179 | break; 180 | case "nativeinterfaces": 181 | strArray2[index] = Resources.SCAN_NATIVE_INTERFACES; 182 | break; 183 | case "disableditems": 184 | strArray2[index] = Resources.SCAN_DISABLED_ITEMS; 185 | break; 186 | case "formregions": 187 | strArray2[index] = Resources.SCAN_FORMREGIONS; 188 | break; 189 | default: 190 | flag = false; 191 | break; 192 | } 193 | } 194 | } 195 | this.controller.ScanNames = strArray2; 196 | break; 197 | case "/r": 198 | case "/reports": 199 | case "-r": 200 | case "-reports": 201 | if (strArray2.Length == 1 && strArray2[0] == Resources.OPTION_ALL) 202 | { 203 | strArray2 = (string[]) this.reportTypes.Clone(); 204 | } 205 | else 206 | { 207 | for (int index = 0; index < strArray2.Length; ++index) 208 | { 209 | switch (strArray2[index]) 210 | { 211 | case "context": 212 | strArray2[index] = Resources.REPORT_CONTEXT; 213 | break; 214 | case "addins": 215 | strArray2[index] = Resources.REPORT_ADDINS; 216 | break; 217 | default: 218 | flag = false; 219 | break; 220 | } 221 | } 222 | } 223 | this.controller.ReportTypes = strArray2; 224 | break; 225 | case "/o": 226 | case "/output": 227 | case "-o": 228 | case "-output": 229 | this.controller.ReportFileName = strArray1[1]; 230 | break; 231 | default: 232 | flag = false; 233 | break; 234 | } 235 | } 236 | } 237 | else 238 | { 239 | flag = false; 240 | break; 241 | } 242 | } 243 | } 244 | return flag; 245 | } 246 | } 247 | } 248 | -------------------------------------------------------------------------------- /AS/Properties/Resources.cs: -------------------------------------------------------------------------------- 1 | // Decompiled with JetBrains decompiler 2 | // Type: AS.Properties.Resources 3 | // Assembly: AS, Version=1.5.0.0, Culture=neutral, PublicKeyToken=null 4 | // MVID: AFE2FA58-896E-487A-A656-63ED650F5324 5 | // Assembly location: C:\Users\Jozef\Downloads\AddInSpy\AS.exe 6 | 7 | using System.CodeDom.Compiler; 8 | using System.ComponentModel; 9 | using System.Diagnostics; 10 | using System.Globalization; 11 | using System.Resources; 12 | using System.Runtime.CompilerServices; 13 | 14 | namespace AS.Properties 15 | { 16 | [DebuggerNonUserCode] 17 | [CompilerGenerated] 18 | [GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] 19 | internal class Resources 20 | { 21 | private static ResourceManager resourceMan; 22 | private static CultureInfo resourceCulture; 23 | 24 | [EditorBrowsable(EditorBrowsableState.Advanced)] 25 | internal static ResourceManager ResourceManager 26 | { 27 | get 28 | { 29 | if (object.ReferenceEquals((object) Resources.resourceMan, (object) null)) 30 | Resources.resourceMan = new ResourceManager("AS.Properties.Resources", typeof (Resources).Assembly); 31 | return Resources.resourceMan; 32 | } 33 | } 34 | 35 | [EditorBrowsable(EditorBrowsableState.Advanced)] 36 | internal static CultureInfo Culture 37 | { 38 | get 39 | { 40 | return Resources.resourceCulture; 41 | } 42 | set 43 | { 44 | Resources.resourceCulture = value; 45 | } 46 | } 47 | 48 | internal static string ARG_HELP_DASH 49 | { 50 | get 51 | { 52 | return Resources.ResourceManager.GetString("ARG_HELP_DASH", Resources.resourceCulture); 53 | } 54 | } 55 | 56 | internal static string ARG_HELP_SLASH 57 | { 58 | get 59 | { 60 | return Resources.ResourceManager.GetString("ARG_HELP_SLASH", Resources.resourceCulture); 61 | } 62 | } 63 | 64 | internal static string OPTION_ALL 65 | { 66 | get 67 | { 68 | return Resources.ResourceManager.GetString("OPTION_ALL", Resources.resourceCulture); 69 | } 70 | } 71 | 72 | internal static string REPORT_ADDINS 73 | { 74 | get 75 | { 76 | return Resources.ResourceManager.GetString("REPORT_ADDINS", Resources.resourceCulture); 77 | } 78 | } 79 | 80 | internal static string REPORT_CONTEXT 81 | { 82 | get 83 | { 84 | return Resources.ResourceManager.GetString("REPORT_CONTEXT", Resources.resourceCulture); 85 | } 86 | } 87 | 88 | internal static string SCAN_DISABLED_ITEMS 89 | { 90 | get 91 | { 92 | return Resources.ResourceManager.GetString("SCAN_DISABLED_ITEMS", Resources.resourceCulture); 93 | } 94 | } 95 | 96 | internal static string SCAN_FORMREGIONS 97 | { 98 | get 99 | { 100 | return Resources.ResourceManager.GetString("SCAN_FORMREGIONS", Resources.resourceCulture); 101 | } 102 | } 103 | 104 | internal static string SCAN_HKCU 105 | { 106 | get 107 | { 108 | return Resources.ResourceManager.GetString("SCAN_HKCU", Resources.resourceCulture); 109 | } 110 | } 111 | 112 | internal static string SCAN_HKLM 113 | { 114 | get 115 | { 116 | return Resources.ResourceManager.GetString("SCAN_HKLM", Resources.resourceCulture); 117 | } 118 | } 119 | 120 | internal static string SCAN_MANAGED_INTERFACES 121 | { 122 | get 123 | { 124 | return Resources.ResourceManager.GetString("SCAN_MANAGED_INTERFACES", Resources.resourceCulture); 125 | } 126 | } 127 | 128 | internal static string SCAN_NATIVE_INTERFACES 129 | { 130 | get 131 | { 132 | return Resources.ResourceManager.GetString("SCAN_NATIVE_INTERFACES", Resources.resourceCulture); 133 | } 134 | } 135 | 136 | internal static string SCAN_REMOTE 137 | { 138 | get 139 | { 140 | return Resources.ResourceManager.GetString("SCAN_REMOTE", Resources.resourceCulture); 141 | } 142 | } 143 | 144 | internal static string SYNTAX_MESSAGE 145 | { 146 | get 147 | { 148 | return Resources.ResourceManager.GetString("SYNTAX_MESSAGE", Resources.resourceCulture); 149 | } 150 | } 151 | 152 | internal Resources() 153 | { 154 | } 155 | } 156 | } 157 | -------------------------------------------------------------------------------- /AS/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | Context 122 | 123 | 124 | -? 125 | 126 | 127 | Native Interfaces 128 | 129 | 130 | Managed Interfaces 131 | 132 | 133 | /? 134 | 135 | 136 | AddIns 137 | 138 | 139 | Syntax (arguments in any order, case-insensitive, no spaces allowed except between option lists):{0} as [/h(osts)= <all|comma-separated hostNames>] [/s(cans)= <all|comma-separated scanNames>] [/r(eport)= <all|comma-separated reportTypes>]{0}{0}where:{0} h(osts)=[Access,Excel,FrontPage,InfoPath,Outlook,PowerPoint,Project,Publisher,SharePointDesigner,Visio,Word]{0} s(cans)=[HKCU,HKLM,Remote,ManagedInterfaces,NativeInterfaces,DisabledItems,FormRegions]{0} r(eport)=[Context,AddIns]{0}{0}examples:{0} as /h=Excel,Outlook,Word /s=HKCU,HKLM,ManagedInterfaces,NativeInterfaces,DisabledItems /r=Context,AddIns{0} as /hosts=excel,outlook,word /scans=hkcu,hklm,managedinterfaces,nativeinterfaces /reports=addins{0} as /h=all /s=HKCU,HKLM,DisabledItems /r=all{0} as /h=all /s=all /r=all{0} 140 | 141 | 142 | FormRegions 143 | 144 | 145 | Disabled Items 146 | 147 | 148 | all 149 | 150 | 151 | HKCU 152 | 153 | 154 | HKLM 155 | 156 | 157 | Remote 158 | 159 | -------------------------------------------------------------------------------- /AS/app.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /AS/lib/AddInScanEngine.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NetOfficeFw/AddInSpy/1e1105a344110bcd291dc09b18338663e4374bb0/AS/lib/AddInScanEngine.dll -------------------------------------------------------------------------------- /AddInScanEngine/AddInScanEngine.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {5DAF28B6-078C-457D-9591-13DFE22C1CE3} 8 | Library 9 | AddInScanEngine 10 | AddInSpy 11 | v4.5 12 | 13 | 14 | 15 | 16 | 2.0 17 | 18 | publish\ 19 | true 20 | Disk 21 | false 22 | Foreground 23 | 7 24 | Days 25 | false 26 | false 27 | true 28 | 0 29 | 1.5.0.0 30 | false 31 | false 32 | true 33 | 34 | 35 | AnyCPU 36 | true 37 | full 38 | false 39 | bin\Debug\ 40 | DEBUG;TRACE 41 | prompt 42 | 4 43 | false 44 | 45 | 46 | AnyCPU 47 | pdbonly 48 | true 49 | bin\Release\ 50 | TRACE 51 | prompt 52 | 4 53 | false 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | False 90 | .NET Framework 3.5 SP1 Client Profile 91 | false 92 | 93 | 94 | False 95 | .NET Framework 3.5 SP1 96 | true 97 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /AddInScanEngine/AddInScanEngine.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 9.00 3 | # Visual Studio 2005 4 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddInScanEngine", "AddInScanEngine.csproj", "{5DAF28B6-078C-457D-9591-13DFE22C1CE3}" 5 | EndProject 6 | Global 7 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 8 | Debug|Any CPU = Debug|Any CPU 9 | Release|Any CPU = Release|Any CPU 10 | EndGlobalSection 11 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 12 | {5DAF28B6-078C-457D-9591-13DFE22C1CE3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 13 | {5DAF28B6-078C-457D-9591-13DFE22C1CE3}.Debug|Any CPU.Build.0 = Debug|Any CPU 14 | {5DAF28B6-078C-457D-9591-13DFE22C1CE3}.Release|Any CPU.ActiveCfg = Release|Any CPU 15 | {5DAF28B6-078C-457D-9591-13DFE22C1CE3}.Release|Any CPU.Build.0 = Release|Any CPU 16 | EndGlobalSection 17 | GlobalSection(SolutionProperties) = preSolution 18 | HideSolutionNode = FALSE 19 | EndGlobalSection 20 | EndGlobal 21 | -------------------------------------------------------------------------------- /AddInScanEngine/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.InteropServices; 3 | 4 | [assembly: ComVisible(false)] 5 | [assembly: AssemblyFileVersion("1.5.0.0")] 6 | [assembly: AssemblyTrademark("")] 7 | [assembly: Guid("1d4d5083-b5dd-4656-bceb-63adbf5fba40")] 8 | [assembly: AssemblyDescription("")] 9 | [assembly: AssemblyCopyright("Copyright © Microsoft 2008")] 10 | [assembly: AssemblyTitle("AddInScanEngine")] 11 | [assembly: AssemblyConfiguration("")] 12 | [assembly: AssemblyCompany("Microsoft")] 13 | [assembly: AssemblyProduct("AddInScanEngine")] 14 | [assembly: AssemblyVersion("1.5.0.0")] 15 | -------------------------------------------------------------------------------- /AddInScanEngine/AssemblyScanner.cs: -------------------------------------------------------------------------------- 1 | // Decompiled with JetBrains decompiler 2 | // Type: AddInSpy.AssemblyScanner 3 | // Assembly: AddInScanEngine, Version=1.5.0.0, Culture=neutral, PublicKeyToken=null 4 | // MVID: F92CC3BC-B994-4216-9D73-6B4F2C71BD20 5 | // Assembly location: C:\Users\Jozef\Downloads\AddInSpy\AddInScanEngine.dll 6 | 7 | using AddInSpy.Properties; 8 | using System; 9 | using System.Collections; 10 | using System.Collections.Generic; 11 | using System.Diagnostics; 12 | using System.IO; 13 | using System.Reflection; 14 | using System.Reflection.Emit; 15 | 16 | namespace AddInSpy 17 | { 18 | internal static class AssemblyScanner 19 | { 20 | private const string ribbonTypeName = "Microsoft.Office.Tools.Ribbon.OfficeRibbon"; 21 | private const string formRegionTypeName = "Microsoft.Office.Tools.Outlook.FormRegionControl"; 22 | private static Type[] exportedTypes; 23 | private static string assemblyFolder; 24 | 25 | public static string[] GetAssemblyInfo(string fileName, string hostName, bool isVstoAddIn) 26 | { 27 | string[] strArray = (string[]) null; 28 | try 29 | { 30 | assemblyFolder = Path.GetDirectoryName(fileName); 31 | Assembly assembly = Assembly.ReflectionOnlyLoadFrom(fileName); 32 | exportedTypes = assembly.GetExportedTypes(); 33 | ArrayList assemblyInfo = new ArrayList(); 34 | assemblyInfo.Add((object) assembly.FullName); 35 | assemblyInfo.Add((object) assembly.ImageRuntimeVersion); 36 | if (isVstoAddIn) 37 | { 38 | CheckFormRegionType(assembly, ref assemblyInfo); 39 | CheckRibbonType(ref assemblyInfo); 40 | CheckCustomTaskPaneType(assembly, ref assemblyInfo); 41 | } 42 | int num = 0; 43 | foreach (KeyValuePair keyValuePair in (IEnumerable>) new SecondaryExtensibility(hostName).AddInInterfaces) 44 | { 45 | if (IsInterfaceImplemented(keyValuePair.Value)) 46 | { 47 | assemblyInfo.Add((object) keyValuePair.Key); 48 | ++num; 49 | } 50 | } 51 | if (assemblyInfo.Count < 3) 52 | assemblyInfo.Add((object) Resources.SECONDARY_INTERFACES_NONE); 53 | strArray = (string[]) assemblyInfo.ToArray(typeof (string)); 54 | } 55 | catch (TypeLoadException ex) 56 | { 57 | Globals.AddErrorMessage(string.Format(Resources.TYPELOADEXCEPTION_MESSAGE, (object) Environment.NewLine, (object) fileName, (object) ex.ToString())); 58 | } 59 | catch (Exception ex) 60 | { 61 | Globals.AddException(ex); 62 | } 63 | return strArray; 64 | } 65 | 66 | private static bool IsInterfaceImplemented(Guid iid) 67 | { 68 | bool flag = false; 69 | foreach (Type type in exportedTypes) 70 | { 71 | if (type.FindInterfaces(new TypeFilter(AssemblyScanner.InterfaceFilterHandler), (object) iid).Length > 0) 72 | { 73 | flag = true; 74 | break; 75 | } 76 | } 77 | return flag; 78 | } 79 | 80 | private static bool InterfaceFilterHandler(Type type, object filterCondition) 81 | { 82 | bool flag = false; 83 | if (type != null && type.GUID == (Guid) filterCondition) 84 | flag = true; 85 | return flag; 86 | } 87 | 88 | internal static Assembly CurrentDomain_ReflectionOnlyAssemblyResolve(object sender, ResolveEventArgs args) 89 | { 90 | Assembly assembly = (Assembly) null; 91 | string assemblyName = args.Name.Split(',')[0]; 92 | try 93 | { 94 | try 95 | { 96 | string assemblyFile = Path.Combine(assemblyFolder, assemblyName + ".dll"); 97 | if (assemblyFile != null && assemblyFile.Length > 0) 98 | { 99 | try 100 | { 101 | assembly = Assembly.ReflectionOnlyLoadFrom(assemblyFile); 102 | } 103 | catch (Exception ex1) 104 | { 105 | try 106 | { 107 | assembly = Assembly.ReflectionOnlyLoadFrom(GetAssemblyGacPath(assemblyName)); 108 | } 109 | catch (Exception ex2) 110 | { 111 | assembly = Assembly.ReflectionOnlyLoadFrom(assemblyFile + ".deploy"); 112 | } 113 | } 114 | } 115 | } 116 | catch (Exception ex1) 117 | { 118 | string assemblyFile = Path.Combine(assemblyFolder, assemblyName + ".exe"); 119 | if (assemblyFile != null && assemblyFile.Length > 0) 120 | { 121 | try 122 | { 123 | assembly = Assembly.ReflectionOnlyLoadFrom(assemblyFile); 124 | } 125 | catch (Exception ex2) 126 | { 127 | try 128 | { 129 | assembly = Assembly.ReflectionOnlyLoadFrom(GetAssemblyGacPath(assemblyName)); 130 | } 131 | catch (Exception ex3) 132 | { 133 | assembly = Assembly.ReflectionOnlyLoadFrom(assemblyFile + ".deploy"); 134 | } 135 | } 136 | } 137 | } 138 | } 139 | catch (Exception ex) 140 | { 141 | Debug.WriteLine(ex.ToString()); 142 | return assembly; 143 | } 144 | return assembly; 145 | } 146 | 147 | private static string GetAssemblyGacPath(string assemblyName) 148 | { 149 | string str1 = (string) null; 150 | GacEnumerator gacEnumerator = new GacEnumerator(assemblyName); 151 | string str2 = string.Empty; 152 | while (true) 153 | { 154 | string nextAssembly = gacEnumerator.GetNextAssembly(); 155 | try 156 | { 157 | if (nextAssembly != null) 158 | { 159 | if (str2 != string.Empty && CompareVersionNumbers(str2, nextAssembly) == 1) 160 | { 161 | str1 = GacEnumerator.QueryAssemblyInfo(str2); 162 | break; 163 | } 164 | else 165 | { 166 | str1 = GacEnumerator.QueryAssemblyInfo(nextAssembly); 167 | str2 = nextAssembly; 168 | } 169 | } 170 | else 171 | break; 172 | } 173 | catch (Exception ex) 174 | { 175 | Globals.AddException(ex); 176 | } 177 | } 178 | return str1; 179 | } 180 | 181 | public static int CompareVersionNumbers(string assemblyA, string assemblyB) 182 | { 183 | int num = 0; 184 | string[] strArray1 = assemblyA.Split(',')[1].Substring("Version=".Length + 1).Split('.'); 185 | string[] strArray2 = assemblyB.Split(',')[1].Substring("Version=".Length + 1).Split('.'); 186 | int[] numArray1 = new int[4]; 187 | int[] numArray2 = new int[4]; 188 | for (int index = 0; index < 4; ++index) 189 | { 190 | numArray1[index] = Convert.ToInt32(strArray1[index]); 191 | numArray2[index] = Convert.ToInt32(strArray2[index]); 192 | } 193 | if (numArray1[0] < numArray2[0]) 194 | num = -1; 195 | else if (numArray1[0] > numArray2[0]) 196 | num = 1; 197 | else if (numArray1[1] < numArray2[1]) 198 | num = -1; 199 | else if (numArray1[1] > numArray2[1]) 200 | num = 1; 201 | else if (numArray1[2] < numArray2[2]) 202 | num = -1; 203 | else if (numArray1[2] > numArray2[2]) 204 | num = 1; 205 | else if (numArray1[3] < numArray2[3]) 206 | num = -1; 207 | else if (numArray1[3] > numArray2[3]) 208 | num = 1; 209 | return num; 210 | } 211 | 212 | private static void CheckFormRegionType(Assembly assembly, ref ArrayList assemblyInfo) 213 | { 214 | try 215 | { 216 | foreach (Type type in assembly.GetTypes()) 217 | { 218 | if (type.BaseType != null && type.BaseType.FullName == formRegionTypeName) 219 | { 220 | assemblyInfo.Add((object) Resources.VSTO_FORMREGION); 221 | break; 222 | } 223 | } 224 | } 225 | catch (Exception ex) 226 | { 227 | Globals.AddException(ex); 228 | } 229 | } 230 | 231 | private static void CheckRibbonType(ref ArrayList assemblyInfo) 232 | { 233 | foreach (Type type in exportedTypes) 234 | { 235 | if (type.BaseType != null && type.BaseType.BaseType != null && (type.BaseType.FullName == ribbonTypeName || type.BaseType.BaseType.FullName == ribbonTypeName)) 236 | { 237 | assemblyInfo.Add((object) Resources.VSTO_RIBBON); 238 | break; 239 | } 240 | } 241 | } 242 | 243 | private static void CheckCustomTaskPaneType(Assembly assembly, ref ArrayList assemblyInfo) 244 | { 245 | try 246 | { 247 | foreach (Type type in assembly.GetTypes()) 248 | { 249 | foreach (MethodBase method1 in type.GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)) 250 | { 251 | foreach (MethodInstruction methodInstruction in new ILReader(method1)) 252 | { 253 | try 254 | { 255 | if (methodInstruction != null) 256 | { 257 | if (methodInstruction.OpCode == OpCodes.Callvirt) 258 | { 259 | MethodBase method2 = methodInstruction.Method; 260 | if (method2 != null && string.Format("{0}.{1}", (object) method2.DeclaringType, (object) method2.Name) == "Microsoft.Office.Tools.CustomTaskPaneCollection.Add") 261 | assemblyInfo.Add((object) Resources.VSTO_TASKPANE); 262 | } 263 | } 264 | } 265 | catch (Exception ex) 266 | { 267 | Debug.WriteLine(ex.ToString()); 268 | } 269 | } 270 | } 271 | } 272 | } 273 | catch (Exception ex) 274 | { 275 | Globals.AddException(ex); 276 | } 277 | } 278 | } 279 | } 280 | -------------------------------------------------------------------------------- /AddInScanEngine/ComAddInUtilities.cs: -------------------------------------------------------------------------------- 1 | // Decompiled with JetBrains decompiler 2 | // Type: AddInSpy.ComAddInUtilities 3 | // Assembly: AddInScanEngine, Version=1.5.0.0, Culture=neutral, PublicKeyToken=null 4 | // MVID: F92CC3BC-B994-4216-9D73-6B4F2C71BD20 5 | // Assembly location: C:\Users\Jozef\Downloads\AddInSpy\AddInScanEngine.dll 6 | 7 | using AddInSpy.Properties; 8 | using System; 9 | using System.Collections; 10 | using System.Reflection; 11 | using System.Runtime.InteropServices; 12 | 13 | namespace AddInSpy 14 | { 15 | internal class ComAddInUtilities 16 | { 17 | internal static NativeMethods.COMAddIn GetLoadedCOMAddInObjects(ref AddInData addInData) 18 | { 19 | addInData.IsRunning = false; 20 | addInData.IsLoaded = false; 21 | addInData.IsObjectExposed = false; 22 | object app = (object) null; 23 | NativeMethods.COMAddIn comAddIn = (NativeMethods.COMAddIn) null; 24 | addInData.IsRunning = ComAddInUtilities.GetRunningApplicationObject(addInData.HostName, out app); 25 | if (addInData.IsRunning) 26 | { 27 | addInData.IsLoaded = ComAddInUtilities.GetCOMAddIn(app, addInData.ProgId, out comAddIn); 28 | if (addInData.IsLoaded && comAddIn.Object != null) 29 | addInData.IsObjectExposed = true; 30 | } 31 | return comAddIn; 32 | } 33 | 34 | private static bool GetRunningApplicationObject(string hostName, out object app) 35 | { 36 | bool flag = false; 37 | app = (object) null; 38 | try 39 | { 40 | switch (hostName) 41 | { 42 | case "Access": 43 | app = Marshal.GetActiveObject("Access.Application"); 44 | break; 45 | case "Excel": 46 | app = Marshal.GetActiveObject("Excel.Application"); 47 | break; 48 | case "FrontPage": 49 | app = Marshal.GetActiveObject("FrontPage.Application"); 50 | break; 51 | case "InfoPath": 52 | app = Marshal.GetActiveObject("InfoPath.Application"); 53 | break; 54 | case "Outlook": 55 | app = Marshal.GetActiveObject("Outlook.Application"); 56 | break; 57 | case "PowerPoint": 58 | app = Marshal.GetActiveObject("PowerPoint.Application"); 59 | break; 60 | case "Project": 61 | app = Marshal.GetActiveObject("MSProject.Application"); 62 | break; 63 | case "Publisher": 64 | app = Marshal.GetActiveObject("Publisher.Application"); 65 | break; 66 | case "SharePoint Designer": 67 | app = Marshal.GetActiveObject("SharePointDesigner.Application"); 68 | break; 69 | case "Visio": 70 | app = Marshal.GetActiveObject("Visio.Application"); 71 | break; 72 | case "Word": 73 | app = Marshal.GetActiveObject("Word.Application"); 74 | break; 75 | } 76 | flag = true; 77 | } 78 | catch (Exception ex) 79 | { 80 | } 81 | return flag; 82 | } 83 | 84 | private static bool GetCOMAddIn(object app, string addInProgId, out NativeMethods.COMAddIn comAddIn) 85 | { 86 | bool flag = false; 87 | comAddIn = (NativeMethods.COMAddIn) null; 88 | long num = -2147418111L; 89 | if (app != null) 90 | { 91 | Type type = app.GetType(); 92 | try 93 | { 94 | NativeMethods.COMAddIns comAddIns = (NativeMethods.COMAddIns) type.InvokeMember("COMAddIns", BindingFlags.GetProperty, (Binder) null, app, (object[]) null); 95 | if (comAddIns != null) 96 | { 97 | foreach (NativeMethods.COMAddIn comAddIn1 in (IEnumerable) comAddIns) 98 | { 99 | if (comAddIn1.ProgId == addInProgId) 100 | { 101 | comAddIn = comAddIn1; 102 | if (comAddIn.Connect) 103 | { 104 | flag = true; 105 | break; 106 | } 107 | else 108 | break; 109 | } 110 | } 111 | } 112 | } 113 | catch (COMException ex) 114 | { 115 | if ((long) ex.ErrorCode == num) 116 | Globals.AddErrorMessage(Resources.RPC_E_CALL_REJECTED_MESSAGE); 117 | else 118 | Globals.AddException((Exception) ex); 119 | } 120 | } 121 | return flag; 122 | } 123 | } 124 | } 125 | -------------------------------------------------------------------------------- /AddInScanEngine/Controller.cs: -------------------------------------------------------------------------------- 1 | // Decompiled with JetBrains decompiler 2 | // Type: AddInSpy.Controller 3 | // Assembly: AddInScanEngine, Version=1.5.0.0, Culture=neutral, PublicKeyToken=null 4 | // MVID: F92CC3BC-B994-4216-9D73-6B4F2C71BD20 5 | // Assembly location: C:\Users\Jozef\Downloads\AddInSpy\AddInScanEngine.dll 6 | 7 | using AddInSpy.Properties; 8 | using Microsoft.Win32; 9 | using System; 10 | using System.Collections.Generic; 11 | using System.Collections.Specialized; 12 | using System.IO; 13 | using System.Net; 14 | using System.Net.NetworkInformation; 15 | using System.Windows.Input; 16 | 17 | namespace AddInSpy 18 | { 19 | public class Controller 20 | { 21 | private GridProxy gridProxy; 22 | private List progIdsFound; 23 | private bool isUncPath; 24 | private bool isHttpPath; 25 | private string[] hostNames; 26 | private bool scanHKCU; 27 | private bool scanHKLM; 28 | private bool scanRemote; 29 | private bool scanManagedInterfaces; 30 | private bool scanNativeInterfaces; 31 | private bool scanDisabled; 32 | private bool scanFormRegions; 33 | private bool reportContext; 34 | private bool reportAddIns; 35 | public string HostAddress; 36 | public string HostName; 37 | public string UserName; 38 | public string DomainName; 39 | public string OsVersion; 40 | public string VstoSuppressDisplayAlerts; 41 | public string VstoLogAlerts; 42 | private bool autoRefresh; 43 | private bool isUiMode; 44 | private string reportFileName; 45 | 46 | public GridProxy GridProxy 47 | { 48 | get 49 | { 50 | return this.gridProxy; 51 | } 52 | } 53 | 54 | public string[] HostNames 55 | { 56 | get 57 | { 58 | return this.hostNames; 59 | } 60 | set 61 | { 62 | this.hostNames = value; 63 | } 64 | } 65 | 66 | public string[] ScanNames 67 | { 68 | set 69 | { 70 | this.scanHKCU = false; 71 | this.scanHKLM = false; 72 | this.scanRemote = false; 73 | this.scanManagedInterfaces = false; 74 | this.scanNativeInterfaces = false; 75 | this.scanDisabled = false; 76 | this.scanFormRegions = false; 77 | foreach (string str in value) 78 | { 79 | if (str == Resources.SCAN_HKCU) 80 | this.scanHKCU = true; 81 | else if (str == Resources.SCAN_HKLM) 82 | this.scanHKLM = true; 83 | else if (str == Resources.SCAN_REMOTE) 84 | this.scanRemote = true; 85 | else if (str == Resources.SCAN_MANAGED_INTERFACES) 86 | this.scanManagedInterfaces = true; 87 | else if (str == Resources.SCAN_NATIVE_INTERFACES) 88 | this.scanNativeInterfaces = true; 89 | else if (str == Resources.SCAN_DISABLED_ITEMS) 90 | this.scanDisabled = true; 91 | else if (str == Resources.SCAN_FORMREGIONS) 92 | this.scanFormRegions = true; 93 | } 94 | } 95 | } 96 | 97 | public string[] ReportTypes 98 | { 99 | set 100 | { 101 | this.reportContext = false; 102 | this.reportAddIns = false; 103 | foreach (string str in value) 104 | { 105 | if (str == Resources.REPORT_CONTEXT) 106 | this.reportContext = true; 107 | else if (str == Resources.REPORT_ADDINS) 108 | this.reportAddIns = true; 109 | } 110 | } 111 | } 112 | 113 | public bool AutoRefresh 114 | { 115 | get 116 | { 117 | return this.autoRefresh; 118 | } 119 | set 120 | { 121 | this.autoRefresh = value; 122 | } 123 | } 124 | 125 | public string ReportFileName 126 | { 127 | get 128 | { 129 | return this.reportFileName; 130 | } 131 | set 132 | { 133 | this.reportFileName = value; 134 | } 135 | } 136 | 137 | public Controller(bool uiMode) 138 | { 139 | this.isUiMode = uiMode; 140 | this.gridProxy = new GridProxy(); 141 | this.progIdsFound = new List(); 142 | this.GetContextInformation(); 143 | } 144 | 145 | public Controller(bool scanHKCU, bool scanHKLM, bool scanRemote, bool scanManagedInterfaces, bool scanNativeInterfaces, bool scanDisabled, bool scanFormRegions) 146 | : this(true) 147 | { 148 | this.scanHKCU = scanHKCU; 149 | this.scanHKLM = scanHKLM; 150 | this.scanRemote = scanRemote; 151 | this.scanManagedInterfaces = scanManagedInterfaces; 152 | this.scanNativeInterfaces = scanNativeInterfaces; 153 | this.scanDisabled = scanDisabled; 154 | this.scanFormRegions = scanFormRegions; 155 | } 156 | 157 | private void GetContextInformation() 158 | { 159 | IPGlobalProperties globalProperties = IPGlobalProperties.GetIPGlobalProperties(); 160 | IPAddress[] hostAddresses = Dns.GetHostAddresses(Dns.GetHostName()); 161 | NetworkInterface.GetAllNetworkInterfaces()[0].GetPhysicalAddress(); 162 | this.HostAddress = hostAddresses[0].ToString(); 163 | this.HostName = globalProperties.HostName; 164 | this.UserName = Environment.UserName; 165 | this.DomainName = Environment.UserDomainName; 166 | this.OsVersion = Environment.OSVersion.VersionString; 167 | string str1 = Environment.GetEnvironmentVariable("VSTO_SUPPRESSDISPLAYALERTS"); 168 | if (string.IsNullOrEmpty(str1)) 169 | str1 = Resources.VALUE_UNKNOWN; 170 | this.VstoSuppressDisplayAlerts = str1; 171 | string str2 = Environment.GetEnvironmentVariable("VSTO_LOGALERTS"); 172 | if (string.IsNullOrEmpty(str2)) 173 | str2 = Resources.VALUE_UNKNOWN; 174 | this.VstoLogAlerts = str2; 175 | } 176 | 177 | public void Refresh() 178 | { 179 | this.RefreshAddInGrid(); 180 | this.GetContextInformation(); 181 | } 182 | 183 | private void RefreshAddInGrid() 184 | { 185 | this.gridProxy.Clear(); 186 | this.progIdsFound.Clear(); 187 | object obj = (object) null; 188 | if (this.isUiMode) 189 | { 190 | obj = (object) Mouse.OverrideCursor; 191 | Mouse.OverrideCursor = Cursors.Wait; 192 | } 193 | if (this.hostNames != null) 194 | { 195 | foreach (string hostName in this.hostNames) 196 | { 197 | if (this.scanHKCU) 198 | { 199 | using (RegistryKey regHive = Registry.CurrentUser) 200 | this.EnumerateRegisteredAddIns(regHive, hostName); 201 | } 202 | if (this.scanHKLM) 203 | { 204 | using (RegistryKey regHive = Registry.LocalMachine) 205 | this.EnumerateRegisteredAddIns(regHive, hostName); 206 | } 207 | } 208 | } 209 | if (!this.isUiMode) 210 | return; 211 | Mouse.OverrideCursor = (Cursor) obj; 212 | } 213 | 214 | private void EnumerateRegisteredAddIns(RegistryKey regHive, string hostName) 215 | { 216 | string regHiveName = (string) null; 217 | List officeRegKeyNames = new List(); 218 | NameValueCollection registeredFormRegions = (NameValueCollection) null; 219 | RegistryReader.GetAddInsRegHiveNames(regHive, hostName, out regHiveName, officeRegKeyNames); 220 | foreach (string officeRegKeyName in officeRegKeyNames) 221 | { 222 | EvaluateRegisteredAddIn(regHive, hostName, regHiveName, ref registeredFormRegions, officeRegKeyName); 223 | } 224 | } 225 | 226 | private void EvaluateRegisteredAddIn(RegistryKey regHive, string hostName, string regHiveName, ref NameValueCollection registeredFormRegions, string officeRegKeyName) 227 | { 228 | try 229 | { 230 | if (hostName == "Outlook" && this.scanFormRegions) 231 | registeredFormRegions = RegistryReader.ReadFormRegionRegistrations(regHive); 232 | using (RegistryKey registryKey = regHive.OpenSubKey(officeRegKeyName)) 233 | { 234 | if (registryKey == null) 235 | return; 236 | foreach (string progId in registryKey.GetSubKeyNames()) 237 | { 238 | bool isDllPathValid = true; 239 | NativeMethods.COMAddIn comAddIn = (NativeMethods.COMAddIn)null; 240 | bool isValidRegistration = true; 241 | this.isUncPath = false; 242 | this.isHttpPath = false; 243 | Globals.ErrorMessage = (string)null; 244 | AddInData addInData = new AddInData(hostName, regHiveName, progId); 245 | addInData.Wow6432 = registryKey.Name.Contains("Wow6432Node") ? true : false; 246 | if (this.progIdsFound.Contains(addInData.ProgId)) 247 | addInData.StatusDescription = Resources.REGISTERED_MULTIPLE_TIMES; 248 | else 249 | this.progIdsFound.Add(addInData.ProgId); 250 | try 251 | { 252 | using (RegistryKey addInKey = registryKey.OpenSubKey(addInData.ProgId)) 253 | { 254 | if (addInKey != null) 255 | addInData.GetData(addInKey, this.scanManagedInterfaces, this.scanNativeInterfaces, this.scanRemote, ref this.isUncPath, ref this.isHttpPath, ref isDllPathValid, ref isValidRegistration); 256 | else 257 | addInData.SetInvalidAddInKey(); 258 | if (isValidRegistration) 259 | { 260 | comAddIn = ComAddInUtilities.GetLoadedCOMAddInObjects(ref addInData); 261 | if (this.isHttpPath) 262 | addInData.StatusDescription = Resources.HTTP_PARTIAL_INFORMATION; 263 | else if (!this.scanRemote && this.isUncPath) 264 | addInData.StatusDescription = Resources.REMOTE_NOT_SELECTED; 265 | else if (addInData.AssemblyPath != null && isDllPathValid) 266 | addInData.InstallDate = this.GetAddInInstallDate(addInData.AssemblyPath); 267 | else 268 | addInData.SetInvalidPath(); 269 | if (addInData.AssemblyPath != null && addInData.AssemblyPath.EndsWith(".deploy")) 270 | addInData.AssemblyPath = addInData.AssemblyPath.Substring(0, addInData.AssemblyPath.IndexOf(".deploy")); 271 | } 272 | } 273 | } 274 | catch (Exception ex) 275 | { 276 | Globals.AddException(ex); 277 | } 278 | if (Globals.ErrorMessage != null && Globals.ErrorMessage.Length > 0) 279 | addInData.StatusDescription = !string.IsNullOrEmpty(addInData.StatusDescription) ? string.Format("{0} {1}", (object)addInData.StatusDescription, (object)Globals.ErrorMessage) : Globals.ErrorMessage; 280 | if (this.scanDisabled) 281 | addInData.ScanForDisabledItems(); 282 | if (addInData.HostName == "Outlook" && this.scanFormRegions) 283 | addInData.ScanForFormRegions(registeredFormRegions); 284 | this.gridProxy.AddDataRow(addInData); 285 | } 286 | } 287 | return; 288 | } 289 | catch (Exception ex) 290 | { 291 | Globals.AddException(ex); 292 | return; 293 | } 294 | } 295 | 296 | private string GetAddInInstallDate(string assemblyPath) 297 | { 298 | string str = (string) null; 299 | if (assemblyPath != null) 300 | { 301 | try 302 | { 303 | DateTime creationTime = Directory.GetCreationTime(Path.GetDirectoryName(assemblyPath)); 304 | str = creationTime.ToShortDateString() + " - " + creationTime.ToLongTimeString(); 305 | } 306 | catch (Exception ex) 307 | { 308 | Globals.AddException(ex); 309 | } 310 | } 311 | return str; 312 | } 313 | 314 | public void GenerateReport(bool reportContext, bool reportAddIns, string reportFileName) 315 | { 316 | new ReportWriter(this.gridProxy.AddInDataTable, this.HostAddress, this.HostName, this.UserName, this.DomainName, this.OsVersion, this.VstoSuppressDisplayAlerts, this.VstoLogAlerts).GenerateReport(reportContext, reportAddIns, reportFileName); 317 | } 318 | 319 | public void GenerateReport() 320 | { 321 | new ReportWriter(this.gridProxy.AddInDataTable, this.HostAddress, this.HostName, this.UserName, this.DomainName, this.OsVersion, this.VstoSuppressDisplayAlerts, this.VstoLogAlerts).GenerateReport(this.reportContext, this.reportAddIns, this.reportFileName); 322 | } 323 | } 324 | } 325 | -------------------------------------------------------------------------------- /AddInScanEngine/GacEnumerator.cs: -------------------------------------------------------------------------------- 1 | // Decompiled with JetBrains decompiler 2 | // Type: AddInSpy.GacEnumerator 3 | // Assembly: AddInScanEngine, Version=1.5.0.0, Culture=neutral, PublicKeyToken=null 4 | // MVID: F92CC3BC-B994-4216-9D73-6B4F2C71BD20 5 | // Assembly location: C:\Users\Jozef\Downloads\AddInSpy\AddInScanEngine.dll 6 | 7 | using AddInSpy.Properties; 8 | using System; 9 | using System.Text; 10 | 11 | namespace AddInSpy 12 | { 13 | internal class GacEnumerator 14 | { 15 | private NativeMethods.IAssemblyEnum assemblyEnum = (NativeMethods.IAssemblyEnum) null; 16 | private bool done; 17 | 18 | public GacEnumerator(string assemblyName) 19 | { 20 | NativeMethods.IAssemblyName ppAssemblyNameObj = (NativeMethods.IAssemblyName) null; 21 | if (assemblyName == null) 22 | return; 23 | NativeMethods.CreateAssemblyNameObject(out ppAssemblyNameObj, assemblyName, NativeMethods.CreateAssemblyNameObjectFlags.CANOF_PARSE_DISPLAY_NAME, IntPtr.Zero); 24 | NativeMethods.CreateAssemblyEnum(out this.assemblyEnum, IntPtr.Zero, ppAssemblyNameObj, NativeMethods.AssemblyCacheFlags.GAC, IntPtr.Zero); 25 | } 26 | 27 | public static string QueryAssemblyInfo(string assemblyName) 28 | { 29 | if (assemblyName == null) 30 | throw new ArgumentException(Resources.INVALID_ASSEMBLYNAME, "assemblyName"); 31 | NativeMethods.AssemblyInfo assemblyInfo = new NativeMethods.AssemblyInfo(); 32 | assemblyInfo.cchBuf = 1024; 33 | assemblyInfo.currentAssemblyPath = new string(char.MinValue, assemblyInfo.cchBuf); 34 | NativeMethods.IAssemblyCache ppAsmCache = (NativeMethods.IAssemblyCache) null; 35 | NativeMethods.CreateAssemblyCache(out ppAsmCache, 0); 36 | ppAsmCache.QueryAssemblyInfo(0, assemblyName, ref assemblyInfo); 37 | return assemblyInfo.currentAssemblyPath; 38 | } 39 | 40 | public string GetNextAssembly() 41 | { 42 | NativeMethods.IAssemblyName ppName = (NativeMethods.IAssemblyName) null; 43 | if (this.done) 44 | return (string) null; 45 | this.assemblyEnum.GetNextAssembly((IntPtr) 0, out ppName, 0); 46 | if (ppName != null) 47 | { 48 | int pccDisplayName = 1024; 49 | StringBuilder pDisplayName = new StringBuilder(pccDisplayName); 50 | ppName.GetDisplayName(pDisplayName, ref pccDisplayName, 167); 51 | return ((object) pDisplayName).ToString(); 52 | } 53 | else 54 | { 55 | this.done = true; 56 | return (string) null; 57 | } 58 | } 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /AddInScanEngine/Globals.cs: -------------------------------------------------------------------------------- 1 | // Decompiled with JetBrains decompiler 2 | // Type: AddInSpy.Globals 3 | // Assembly: AddInScanEngine, Version=1.5.0.0, Culture=neutral, PublicKeyToken=null 4 | // MVID: F92CC3BC-B994-4216-9D73-6B4F2C71BD20 5 | // Assembly location: C:\Users\Jozef\Downloads\AddInSpy\AddInScanEngine.dll 6 | 7 | using System; 8 | 9 | namespace AddInSpy 10 | { 11 | internal class Globals 12 | { 13 | private static string errorMessage = (string) null; 14 | 15 | internal static string ErrorMessage 16 | { 17 | get 18 | { 19 | return Globals.errorMessage; 20 | } 21 | set 22 | { 23 | Globals.errorMessage = value; 24 | } 25 | } 26 | 27 | private Globals() 28 | { 29 | } 30 | 31 | internal static void AddErrorMessage(string newMessage) 32 | { 33 | if (Globals.errorMessage == null || Globals.errorMessage.Length == 0) 34 | Globals.errorMessage = newMessage; 35 | else 36 | Globals.errorMessage = string.Format("{0} {1}", (object) Globals.errorMessage, (object) newMessage); 37 | } 38 | 39 | internal static void AddException(Exception ex) 40 | { 41 | Globals.AddErrorMessage(ex.ToString()); 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /AddInScanEngine/GridProxy.cs: -------------------------------------------------------------------------------- 1 | // Decompiled with JetBrains decompiler 2 | // Type: AddInSpy.GridProxy 3 | // Assembly: AddInScanEngine, Version=1.5.0.0, Culture=neutral, PublicKeyToken=null 4 | // MVID: F92CC3BC-B994-4216-9D73-6B4F2C71BD20 5 | // Assembly location: C:\Users\Jozef\Downloads\AddInSpy\AddInScanEngine.dll 6 | 7 | using AddInSpy.Properties; 8 | using System.Data; 9 | using System.Drawing; 10 | 11 | namespace AddInSpy 12 | { 13 | public class GridProxy 14 | { 15 | private int item = 1; 16 | private DataTable dataTable; 17 | 18 | public DataTable AddInDataTable 19 | { 20 | get 21 | { 22 | return this.dataTable; 23 | } 24 | } 25 | 26 | public int AddInCount 27 | { 28 | get 29 | { 30 | return this.dataTable.Rows.Count; 31 | } 32 | } 33 | 34 | public GridProxy() 35 | { 36 | this.InitializeDataColumns(); 37 | } 38 | 39 | private void InitializeDataColumns() 40 | { 41 | this.dataTable = new DataTable(); 42 | this.dataTable.Columns.Add("Item", typeof (int)); 43 | this.dataTable.Columns.Add("Host"); 44 | this.dataTable.Columns.Add("Running", typeof (bool)); 45 | this.dataTable.Columns.Add("Loaded", typeof (bool)); 46 | this.dataTable.Columns.Add("Type"); 47 | this.dataTable.Columns.Add("FriendlyName"); 48 | this.dataTable.Columns.Add("ProgID"); 49 | this.dataTable.Columns.Add("CLSID"); 50 | this.dataTable.Columns.Add("Manifest"); 51 | this.dataTable.Columns.Add("DllPath"); 52 | this.dataTable.Columns.Add("LoadBehavior"); 53 | this.dataTable.Columns.Add("RegHive"); 54 | this.dataTable.Columns.Add("Wow6432", typeof (bool)); 55 | this.dataTable.Columns.Add("AssemblyName"); 56 | this.dataTable.Columns.Add("CLR_version"); 57 | this.dataTable.Columns.Add("Exposed", typeof (bool)); 58 | this.dataTable.Columns.Add("Interfaces"); 59 | this.dataTable.Columns.Add("FormRegions"); 60 | this.dataTable.Columns.Add("VSTOR"); 61 | this.dataTable.Columns.Add("Installed"); 62 | this.dataTable.Columns.Add("PubVer"); 63 | this.dataTable.Columns.Add("Status2", typeof (Bitmap)); 64 | this.dataTable.Columns.Add("Status", typeof (bool)); 65 | this.dataTable.Columns.Add("StatusDescription"); 66 | } 67 | 68 | public void Clear() 69 | { 70 | this.item = 1; 71 | this.dataTable.Rows.Clear(); 72 | } 73 | 74 | public void AddDataRow(AddInData addInData) 75 | { 76 | addInData.SetUnknownValues(); 77 | if (!string.IsNullOrEmpty(addInData.StatusDescription)) 78 | addInData.StatusImage = Resources.WarningImage; 79 | this.dataTable.Rows.Add( 80 | (object) this.item, 81 | (object) addInData.HostName, 82 | (object) addInData.IsRunning, 83 | (object) addInData.IsLoaded, 84 | (object) addInData.AddInType, 85 | (object) addInData.FriendlyName, 86 | (object) addInData.ProgId, 87 | (object) addInData.Clsid, 88 | (object) addInData.ManifestPath, 89 | (object) addInData.AssemblyPath, 90 | (object) addInData.LoadBehavior, 91 | (object) addInData.RegHiveName, 92 | (object) addInData.Wow6432, 93 | (object) addInData.AssemblyName, 94 | (object) addInData.ClrVersion, 95 | (object) addInData.IsObjectExposed, 96 | (object) addInData.SupportedInterfaces, 97 | (object) addInData.OutlookFormRegions, 98 | (object) addInData.VstoRuntime, 99 | (object) addInData.InstallDate, 100 | (object) addInData.AssemblyVersion, 101 | (object) addInData.StatusImage, 102 | (object) addInData.Status, 103 | (object) addInData.StatusDescription 104 | ); 105 | ++this.item; 106 | } 107 | } 108 | } 109 | -------------------------------------------------------------------------------- /AddInScanEngine/IAddInGridControl.cs: -------------------------------------------------------------------------------- 1 | // Decompiled with JetBrains decompiler 2 | // Type: AddInSpy.IAddInGridControl 3 | // Assembly: AddInScanEngine, Version=1.5.0.0, Culture=neutral, PublicKeyToken=null 4 | // MVID: F92CC3BC-B994-4216-9D73-6B4F2C71BD20 5 | // Assembly location: C:\Users\Jozef\Downloads\AddInSpy\AddInScanEngine.dll 6 | 7 | using System.Windows.Forms; 8 | 9 | namespace AddInSpy 10 | { 11 | public interface IAddInGridControl 12 | { 13 | DataGridView AddInGrid { get; } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /AddInScanEngine/ILReader.cs: -------------------------------------------------------------------------------- 1 | // Decompiled with JetBrains decompiler 2 | // Type: AddInSpy.ILReader 3 | // Assembly: AddInScanEngine, Version=1.5.0.0, Culture=neutral, PublicKeyToken=null 4 | // MVID: F92CC3BC-B994-4216-9D73-6B4F2C71BD20 5 | // Assembly location: C:\Users\Jozef\Downloads\AddInSpy\AddInScanEngine.dll 6 | 7 | using System; 8 | using System.Collections; 9 | using System.Collections.Generic; 10 | using System.Reflection; 11 | using System.Reflection.Emit; 12 | 13 | namespace AddInSpy 14 | { 15 | internal class ILReader : IEnumerable, IEnumerable 16 | { 17 | private static OpCode[] OneByteOpCodes = new OpCode[256]; 18 | private static OpCode[] TwoByteOpCodes = new OpCode[256]; 19 | private int position; 20 | private ModuleScopeTokenResolver resolver; 21 | private byte[] byteArray; 22 | private MethodBase methodBase; 23 | 24 | static ILReader() 25 | { 26 | foreach (FieldInfo fieldInfo in typeof (OpCodes).GetFields(BindingFlags.Static | BindingFlags.Public)) 27 | { 28 | OpCode opCode = (OpCode) fieldInfo.GetValue((object) null); 29 | ushort num = (ushort) opCode.Value; 30 | if ((int) num < 256) 31 | ILReader.OneByteOpCodes[(int) num] = opCode; 32 | else if (((int) num & 65280) == 65024) 33 | ILReader.TwoByteOpCodes[(int) num & (int) byte.MaxValue] = opCode; 34 | } 35 | } 36 | 37 | public ILReader(MethodBase method) 38 | { 39 | if (method == null) 40 | throw new ArgumentNullException("method == null"); 41 | this.methodBase = method; 42 | this.resolver = new ModuleScopeTokenResolver(method); 43 | MethodBody methodBody = this.methodBase.GetMethodBody(); 44 | this.byteArray = methodBody == null ? new byte[0] : methodBody.GetILAsByteArray(); 45 | this.position = 0; 46 | } 47 | 48 | public IEnumerator GetEnumerator() 49 | { 50 | while (this.position < this.byteArray.Length) 51 | yield return this.Next(); 52 | this.position = 0; 53 | } 54 | 55 | IEnumerator IEnumerable.GetEnumerator() 56 | { 57 | return (IEnumerator) this.GetEnumerator(); 58 | } 59 | 60 | private MethodInstruction Next() 61 | { 62 | int offset = this.position; 63 | OpCode opCode1 = OpCodes.Nop; 64 | byte num1 = this.byteArray[this.position++]; 65 | OpCode opCode2; 66 | if ((int) num1 != 254) 67 | { 68 | opCode2 = ILReader.OneByteOpCodes[(int) num1]; 69 | } 70 | else 71 | { 72 | byte num2 = this.byteArray[this.position++]; 73 | opCode2 = ILReader.TwoByteOpCodes[(int) num2]; 74 | } 75 | if (opCode2.OperandType != OperandType.InlineMethod) 76 | return (MethodInstruction) null; 77 | int startIndex = this.position; 78 | this.position += 4; 79 | int token = BitConverter.ToInt32(this.byteArray, startIndex); 80 | return new MethodInstruction(offset, opCode2, token, this.resolver); 81 | } 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /AddInScanEngine/ManifestReader.cs: -------------------------------------------------------------------------------- 1 | // Decompiled with JetBrains decompiler 2 | // Type: AddInSpy.ManifestReader 3 | // Assembly: AddInScanEngine, Version=1.5.0.0, Culture=neutral, PublicKeyToken=null 4 | // MVID: F92CC3BC-B994-4216-9D73-6B4F2C71BD20 5 | // Assembly location: C:\Users\Jozef\Downloads\AddInSpy\AddInScanEngine.dll 6 | 7 | using AddInSpy.Properties; 8 | using System; 9 | using System.IO; 10 | using System.Net; 11 | using System.Text; 12 | using System.Xml; 13 | 14 | namespace AddInSpy 15 | { 16 | internal class ManifestReader 17 | { 18 | internal static string[] GetClickOnceInfo(ref string manifestPath, bool scanRemote, ref bool isUncPath, ref bool isHttpPath) 19 | { 20 | string[] strArray = new string[2]; 21 | string str1 = string.Empty; 22 | string baseDir = string.Empty; 23 | string str2 = string.Empty; 24 | XmlDocument deployDoc = new XmlDocument(); 25 | if (manifestPath == null || manifestPath.Length == 0) 26 | throw new ArgumentException(Resources.EMPTY_MANIFESTPATH); 27 | try 28 | { 29 | Uri uri = new Uri(manifestPath); 30 | bool flag; 31 | if (uri.IsLoopback) 32 | flag = ManifestReader.GetManifestFromLocalPath(deployDoc, ref manifestPath, out baseDir); 33 | else if (uri.IsUnc) 34 | { 35 | isUncPath = true; 36 | flag = scanRemote && ManifestReader.GetManifestFromUncPath(deployDoc, ref manifestPath, out baseDir); 37 | } 38 | else if (uri.Host != null && uri.Host.Length > 0) 39 | { 40 | isHttpPath = true; 41 | flag = scanRemote && ManifestReader.GetManifestFromHttpUrlPath(manifestPath, deployDoc, out baseDir); 42 | } 43 | else 44 | flag = false; 45 | if (flag) 46 | { 47 | XmlNamespaceManager nsmgr = new XmlNamespaceManager(deployDoc.NameTable); 48 | nsmgr.AddNamespace("asmv1", "urn:schemas-microsoft-com:asm.v1"); 49 | nsmgr.AddNamespace("def", "urn:schemas-microsoft-com:asm.v2"); 50 | XmlNode xmlNode1 = (XmlNode) deployDoc.DocumentElement; 51 | XmlNode xmlNode2 = xmlNode1.SelectSingleNode("/asmv1:assembly/def:dependency/def:dependentAssembly", nsmgr); 52 | XmlNode xmlNode3 = xmlNode1.SelectSingleNode("/asmv1:assembly/def:dependency/def:dependentAssembly/def:assemblyIdentity", nsmgr); 53 | string path2_1 = xmlNode2.Attributes["codebase"].Value; 54 | string path2_2 = xmlNode3.Attributes["name"].Value; 55 | str2 = xmlNode3.Attributes["version"].Value; 56 | if (isHttpPath) 57 | { 58 | string str3 = (baseDir + path2_1).Replace("\\", "/"); 59 | str1 = str3.Substring(0, str3.LastIndexOf(".manifest")) + ".deploy"; 60 | } 61 | else 62 | str1 = Path.Combine(Path.GetDirectoryName(Path.Combine(baseDir, path2_1)), path2_2) + ".deploy"; 63 | } 64 | else 65 | { 66 | str1 = (string) null; 67 | str2 = (string) null; 68 | } 69 | } 70 | catch (Exception ex) 71 | { 72 | Globals.AddException(ex); 73 | } 74 | strArray[0] = str1; 75 | strArray[1] = str2; 76 | return strArray; 77 | } 78 | 79 | private static bool GetManifestFromLocalPath(XmlDocument deployDoc, ref string manifestPath, out string baseDir) 80 | { 81 | bool flag = true; 82 | string uriString = manifestPath.Substring("file:///".Length); 83 | manifestPath = new Uri(uriString).LocalPath; 84 | baseDir = Path.GetDirectoryName(manifestPath); 85 | if (System.IO.File.Exists(manifestPath)) 86 | deployDoc.Load(manifestPath); 87 | else 88 | flag = false; 89 | return flag; 90 | } 91 | 92 | private static bool GetManifestFromUncPath(XmlDocument deployDoc, ref string manifestPath, out string baseDir) 93 | { 94 | bool flag = true; 95 | string uriString = manifestPath.Substring("file:".Length); 96 | manifestPath = new Uri(uriString).LocalPath; 97 | string str = Path.GetFileName(manifestPath); 98 | try 99 | { 100 | str = Path.Combine(Path.GetTempPath(), str); 101 | System.IO.File.Copy(manifestPath, str, true); 102 | } 103 | catch (Exception ex) 104 | { 105 | flag = false; 106 | } 107 | baseDir = Path.GetDirectoryName(manifestPath); 108 | deployDoc.Load(str); 109 | return flag; 110 | } 111 | 112 | private static bool GetManifestFromHttpUrlPath(string manifestPath, XmlDocument deployDoc, out string baseDir) 113 | { 114 | bool flag = true; 115 | try 116 | { 117 | HttpWebRequest httpWebRequest = (HttpWebRequest) WebRequest.Create(manifestPath); 118 | httpWebRequest.Credentials = CredentialCache.DefaultCredentials; 119 | HttpWebResponse httpWebResponse = (HttpWebResponse) httpWebRequest.GetResponse(); 120 | StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream(), Encoding.UTF8); 121 | deployDoc.LoadXml(streamReader.ReadToEnd()); 122 | httpWebResponse.Close(); 123 | streamReader.Close(); 124 | } 125 | catch (Exception ex) 126 | { 127 | flag = false; 128 | } 129 | baseDir = manifestPath.Substring(0, manifestPath.LastIndexOf('/') + 1); 130 | return flag; 131 | } 132 | } 133 | } 134 | -------------------------------------------------------------------------------- /AddInScanEngine/MethodInstruction.cs: -------------------------------------------------------------------------------- 1 | // Decompiled with JetBrains decompiler 2 | // Type: AddInSpy.MethodInstruction 3 | // Assembly: AddInScanEngine, Version=1.5.0.0, Culture=neutral, PublicKeyToken=null 4 | // MVID: F92CC3BC-B994-4216-9D73-6B4F2C71BD20 5 | // Assembly location: C:\Users\Jozef\Downloads\AddInSpy\AddInScanEngine.dll 6 | 7 | using System.Reflection; 8 | using System.Reflection.Emit; 9 | 10 | namespace AddInSpy 11 | { 12 | internal class MethodInstruction 13 | { 14 | private ModuleScopeTokenResolver resolver; 15 | private MethodBase method; 16 | private int offset; 17 | private OpCode opCode; 18 | private int token; 19 | 20 | public int Offset 21 | { 22 | get 23 | { 24 | return this.offset; 25 | } 26 | } 27 | 28 | public OpCode OpCode 29 | { 30 | get 31 | { 32 | return this.opCode; 33 | } 34 | } 35 | 36 | public int Token 37 | { 38 | get 39 | { 40 | return this.token; 41 | } 42 | } 43 | 44 | public MethodBase Method 45 | { 46 | get 47 | { 48 | if (this.method == null) 49 | this.method = this.resolver.ResolveTokenAsMethod(this.token); 50 | return this.method; 51 | } 52 | } 53 | 54 | internal MethodInstruction(int offset, OpCode opCode, int token, ModuleScopeTokenResolver resolver) 55 | { 56 | this.offset = offset; 57 | this.opCode = opCode; 58 | this.resolver = resolver; 59 | this.token = token; 60 | } 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /AddInScanEngine/ModuleScopeTokenResolver.cs: -------------------------------------------------------------------------------- 1 | // Decompiled with JetBrains decompiler 2 | // Type: AddInSpy.ModuleScopeTokenResolver 3 | // Assembly: AddInScanEngine, Version=1.5.0.0, Culture=neutral, PublicKeyToken=null 4 | // MVID: F92CC3BC-B994-4216-9D73-6B4F2C71BD20 5 | // Assembly location: C:\Users\Jozef\Downloads\AddInSpy\AddInScanEngine.dll 6 | 7 | using System; 8 | using System.Reflection; 9 | 10 | namespace AddInSpy 11 | { 12 | internal class ModuleScopeTokenResolver 13 | { 14 | private Module module; 15 | private Type[] methodContext; 16 | private Type[] typeContext; 17 | 18 | public ModuleScopeTokenResolver(MethodBase method) 19 | { 20 | this.module = method.Module; 21 | this.methodContext = method is ConstructorInfo ? (Type[]) null : method.GetGenericArguments(); 22 | this.typeContext = method.DeclaringType == null ? (Type[]) null : method.DeclaringType.GetGenericArguments(); 23 | } 24 | 25 | public MethodBase ResolveTokenAsMethod(int token) 26 | { 27 | MethodBase methodBase = (MethodBase) null; 28 | try 29 | { 30 | methodBase = this.module.ResolveMethod(token, this.typeContext, this.methodContext); 31 | } 32 | catch (Exception ex) 33 | { 34 | } 35 | return methodBase; 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /AddInScanEngine/NativeAddInScanner.cs: -------------------------------------------------------------------------------- 1 | // Decompiled with JetBrains decompiler 2 | // Type: AddInSpy.NativeAddInScanner 3 | // Assembly: AddInScanEngine, Version=1.5.0.0, Culture=neutral, PublicKeyToken=null 4 | // MVID: F92CC3BC-B994-4216-9D73-6B4F2C71BD20 5 | // Assembly location: C:\Users\Jozef\Downloads\AddInSpy\AddInScanEngine.dll 6 | 7 | using AddInSpy.Properties; 8 | using System; 9 | using System.Collections.Generic; 10 | using System.IO; 11 | using System.Runtime.InteropServices; 12 | using System.Text; 13 | 14 | namespace AddInSpy 15 | { 16 | internal class NativeAddInScanner 17 | { 18 | private SecondaryExtensibility secondaryExtensibility; 19 | 20 | internal SecondaryExtensibility SecondaryExtensibility 21 | { 22 | get 23 | { 24 | return this.secondaryExtensibility; 25 | } 26 | } 27 | 28 | public NativeAddInScanner(string hostName) 29 | { 30 | this.secondaryExtensibility = new SecondaryExtensibility(hostName); 31 | } 32 | 33 | internal string GetSupportedInterfaces(string guid) 34 | { 35 | string str = (string) null; 36 | List list = new List(); 37 | IntPtr pUnk = IntPtr.Zero; 38 | IntPtr ppv = IntPtr.Zero; 39 | if (guid == "{5B7AB748-6D2E-4827-90A5-32B426DC61B7}" || guid == "{EFEF7FDB-0CED-4FB6-B3BB-3C50D39F4120}" || guid == "{F959DBBB-3867-41F2-8E5F-3B8BEFAA81B3}") 40 | { 41 | Globals.AddErrorMessage(Resources.PROBLEM_OUTLOOK_ADDIN); 42 | return str; 43 | } 44 | else 45 | { 46 | try 47 | { 48 | pUnk = Marshal.GetIUnknownForObject(Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid(guid), true))); 49 | foreach (KeyValuePair keyValuePair in (IEnumerable>) this.secondaryExtensibility.AddInInterfaces) 50 | { 51 | Guid iid = keyValuePair.Value; 52 | if (Marshal.QueryInterface(pUnk, ref iid, out ppv) >= 0 && ppv != IntPtr.Zero) 53 | { 54 | list.Add(keyValuePair.Key); 55 | Marshal.Release(ppv); 56 | ppv = IntPtr.Zero; 57 | } 58 | } 59 | if (list.Count > 0) 60 | { 61 | StringBuilder stringBuilder = new StringBuilder(); 62 | for (int index = 0; index < list.Count; ++index) 63 | { 64 | stringBuilder.Append(list[index]); 65 | if (index + 1 < list.Count) 66 | stringBuilder.Append(", "); 67 | } 68 | str = ((object) stringBuilder).ToString(); 69 | } 70 | else 71 | str = Resources.SECONDARY_INTERFACES_NONE; 72 | } 73 | catch (FileNotFoundException ex) 74 | { 75 | Globals.AddException((Exception) ex); 76 | } 77 | catch (Exception ex) 78 | { 79 | Globals.AddException(ex); 80 | } 81 | finally 82 | { 83 | if (ppv != IntPtr.Zero) 84 | Marshal.Release(ppv); 85 | if (pUnk != IntPtr.Zero) 86 | Marshal.Release(pUnk); 87 | } 88 | return str; 89 | } 90 | } 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /AddInScanEngine/NativeMethods.cs: -------------------------------------------------------------------------------- 1 | // Decompiled with JetBrains decompiler 2 | // Type: AddInSpy.NativeMethods 3 | // Assembly: AddInScanEngine, Version=1.5.0.0, Culture=neutral, PublicKeyToken=null 4 | // MVID: F92CC3BC-B994-4216-9D73-6B4F2C71BD20 5 | // Assembly location: C:\Users\Jozef\Downloads\AddInSpy\AddInScanEngine.dll 6 | 7 | using System; 8 | using System.Collections; 9 | using System.Runtime.CompilerServices; 10 | using System.Runtime.InteropServices; 11 | using System.Text; 12 | 13 | namespace AddInSpy 14 | { 15 | internal static class NativeMethods 16 | { 17 | [DllImport("fusion.dll", PreserveSig = false)] 18 | internal static extern int CreateAssemblyCache(out NativeMethods.IAssemblyCache ppAsmCache, int reserved); 19 | 20 | [DllImport("fusion.dll", PreserveSig = false)] 21 | internal static extern int CreateAssemblyNameObject(out NativeMethods.IAssemblyName ppAssemblyNameObj, [MarshalAs(UnmanagedType.LPWStr)] string szAssemblyName, NativeMethods.CreateAssemblyNameObjectFlags flags, IntPtr pvReserved); 22 | 23 | [DllImport("fusion.dll", PreserveSig = false)] 24 | internal static extern int CreateAssemblyEnum(out NativeMethods.IAssemblyEnum ppEnum, IntPtr pUnkReserved, NativeMethods.IAssemblyName pName, NativeMethods.AssemblyCacheFlags flags, IntPtr pvReserved); 25 | 26 | [Flags] 27 | internal enum AssemblyCacheFlags 28 | { 29 | GAC = 2, 30 | } 31 | 32 | internal enum CreateAssemblyNameObjectFlags 33 | { 34 | CANOF_PARSE_DISPLAY_NAME = 1, 35 | } 36 | 37 | [Flags] 38 | internal enum AssemblyNameDisplayFlags 39 | { 40 | VERSION = 1, 41 | CULTURE = 2, 42 | PUBLIC_KEY_TOKEN = 4, 43 | PROCESSORARCHITECTURE = 32, 44 | RETARGETABLE = 128, 45 | ALL = RETARGETABLE | PROCESSORARCHITECTURE | PUBLIC_KEY_TOKEN | CULTURE | VERSION, 46 | } 47 | 48 | [Guid("e707dcde-d1cd-11d2-bab9-00c04f8eceae")] 49 | [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 50 | [ComImport] 51 | internal interface IAssemblyCache 52 | { 53 | [SpecialName] 54 | void _VtblGap1_1(); 55 | 56 | void QueryAssemblyInfo(int flags, [MarshalAs(UnmanagedType.LPWStr)] string assemblyName, ref NativeMethods.AssemblyInfo assemblyInfo); 57 | 58 | [SpecialName] 59 | void _VtblGap3_3(); 60 | } 61 | 62 | [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 63 | [Guid("CD193BC0-B4BC-11d2-9833-00C04FC31D2E")] 64 | [ComImport] 65 | internal interface IAssemblyName 66 | { 67 | [SpecialName] 68 | void _VtblGap1_2(); 69 | 70 | void Finalize(); 71 | 72 | void GetDisplayName(StringBuilder pDisplayName, ref int pccDisplayName, int displayFlags); 73 | 74 | [SpecialName] 75 | void _VtblGap5_5(); 76 | } 77 | 78 | [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 79 | [Guid("21b8916c-f28e-11d2-a473-00c04f8ef448")] 80 | [ComImport] 81 | internal interface IAssemblyEnum 82 | { 83 | void GetNextAssembly(IntPtr pvReserved, out NativeMethods.IAssemblyName ppName, int flags); 84 | 85 | [SpecialName] 86 | void _VtblGap2_2(); 87 | } 88 | 89 | internal struct AssemblyInfo 90 | { 91 | public int cbAssemblyInfo; 92 | public int assemblyFlags; 93 | public long assemblySizeInKB; 94 | [MarshalAs(UnmanagedType.LPWStr)] 95 | public string currentAssemblyPath; 96 | public int cchBuf; 97 | } 98 | 99 | [Guid("000C0339-0000-0000-C000-000000000046")] 100 | [TypeLibType((short) 4288)] 101 | [ComImport] 102 | public interface COMAddIns : IEnumerable 103 | { 104 | [DispId(1610743808)] 105 | object Application { [DispId(1610743808), MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] get; } 106 | 107 | [DispId(1610743809)] 108 | int Creator { [DispId(1610743809), MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] get; } 109 | 110 | [DispId(1)] 111 | int Count { [DispId(1), MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] get; } 112 | 113 | [DispId(3)] 114 | object Parent { [DispId(3), MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] get; } 115 | 116 | [DispId(0)] 117 | [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] 118 | [return: MarshalAs(UnmanagedType.Interface)] 119 | NativeMethods.COMAddIn Item([MarshalAs(UnmanagedType.Struct), In] ref object Index); 120 | 121 | [SpecialName] 122 | void _VtblGap4_1(); 123 | 124 | [DispId(2)] 125 | [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] 126 | void Update(); 127 | 128 | [DispId(4)] 129 | [TypeLibFunc((short) 1088)] 130 | [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] 131 | void SetAppModal([In] bool varfModal); 132 | } 133 | 134 | [Guid("000C033A-0000-0000-C000-000000000046")] 135 | [TypeLibType((short) 4288)] 136 | [ComImport] 137 | public interface COMAddIn 138 | { 139 | [DispId(1610743808)] 140 | object Application { [DispId(1610743808), MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] get; } 141 | 142 | [DispId(1610743809)] 143 | int Creator { [DispId(1610743809), MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] get; } 144 | 145 | [DispId(0)] 146 | //[IndexerName("Description")] 147 | string Description { [DispId(0), MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] get; [DispId(0), MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] set; } 148 | 149 | [DispId(3)] 150 | string ProgId { [DispId(3), MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] get; } 151 | 152 | [DispId(4)] 153 | string Guid { [DispId(4), MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] get; } 154 | 155 | [DispId(6)] 156 | bool Connect { [DispId(6), MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] get; [DispId(6), MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] set; } 157 | 158 | [DispId(7)] 159 | object Object { [DispId(7), MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] get; [DispId(7), MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] set; } 160 | 161 | [DispId(8)] 162 | object Parent { [DispId(8), MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] get; } 163 | } 164 | } 165 | } 166 | -------------------------------------------------------------------------------- /AddInScanEngine/Properties/Resources.cs: -------------------------------------------------------------------------------- 1 | // Decompiled with JetBrains decompiler 2 | // Type: AddInSpy.Properties.Resources 3 | // Assembly: AddInScanEngine, Version=1.5.0.0, Culture=neutral, PublicKeyToken=null 4 | // MVID: F92CC3BC-B994-4216-9D73-6B4F2C71BD20 5 | // Assembly location: C:\Users\Jozef\Downloads\AddInSpy\AddInScanEngine.dll 6 | 7 | using System.CodeDom.Compiler; 8 | using System.ComponentModel; 9 | using System.Diagnostics; 10 | using System.Drawing; 11 | using System.Globalization; 12 | using System.Resources; 13 | using System.Runtime.CompilerServices; 14 | 15 | namespace AddInSpy.Properties 16 | { 17 | [GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] 18 | [DebuggerNonUserCode] 19 | [CompilerGenerated] 20 | internal class Resources 21 | { 22 | private static ResourceManager resourceMan; 23 | private static CultureInfo resourceCulture; 24 | 25 | [EditorBrowsable(EditorBrowsableState.Advanced)] 26 | internal static ResourceManager ResourceManager 27 | { 28 | get 29 | { 30 | if (object.ReferenceEquals((object) Resources.resourceMan, (object) null)) 31 | Resources.resourceMan = new ResourceManager("AddInSpy.Properties.Resources", typeof (Resources).Assembly); 32 | return Resources.resourceMan; 33 | } 34 | } 35 | 36 | [EditorBrowsable(EditorBrowsableState.Advanced)] 37 | internal static CultureInfo Culture 38 | { 39 | get 40 | { 41 | return Resources.resourceCulture; 42 | } 43 | set 44 | { 45 | Resources.resourceCulture = value; 46 | } 47 | } 48 | 49 | internal static string ADDIN_DISABLED 50 | { 51 | get 52 | { 53 | return Resources.ResourceManager.GetString("ADDIN_DISABLED", Resources.resourceCulture); 54 | } 55 | } 56 | 57 | internal static string ADDIN_TYPE_MANAGED 58 | { 59 | get 60 | { 61 | return Resources.ResourceManager.GetString("ADDIN_TYPE_MANAGED", Resources.resourceCulture); 62 | } 63 | } 64 | 65 | internal static string ADDIN_TYPE_NATIVE 66 | { 67 | get 68 | { 69 | return Resources.ResourceManager.GetString("ADDIN_TYPE_NATIVE", Resources.resourceCulture); 70 | } 71 | } 72 | 73 | internal static string ADDIN_TYPE_VSTO 74 | { 75 | get 76 | { 77 | return Resources.ResourceManager.GetString("ADDIN_TYPE_VSTO", Resources.resourceCulture); 78 | } 79 | } 80 | 81 | internal static string CONTEXT_ADDIN_EMPTY 82 | { 83 | get 84 | { 85 | return Resources.ResourceManager.GetString("CONTEXT_ADDIN_EMPTY", Resources.resourceCulture); 86 | } 87 | } 88 | 89 | internal static string EMPTY_MANIFESTPATH 90 | { 91 | get 92 | { 93 | return Resources.ResourceManager.GetString("EMPTY_MANIFESTPATH", Resources.resourceCulture); 94 | } 95 | } 96 | 97 | internal static string HTTP_PARTIAL_INFORMATION 98 | { 99 | get 100 | { 101 | return Resources.ResourceManager.GetString("HTTP_PARTIAL_INFORMATION", Resources.resourceCulture); 102 | } 103 | } 104 | 105 | internal static string INVALID_ASSEMBLYNAME 106 | { 107 | get 108 | { 109 | return Resources.ResourceManager.GetString("INVALID_ASSEMBLYNAME", Resources.resourceCulture); 110 | } 111 | } 112 | 113 | internal static string MESSAGECLASS_FORMREGION 114 | { 115 | get 116 | { 117 | return Resources.ResourceManager.GetString("MESSAGECLASS_FORMREGION", Resources.resourceCulture); 118 | } 119 | } 120 | 121 | internal static string NATIVE_SCAN_FAILED 122 | { 123 | get 124 | { 125 | return Resources.ResourceManager.GetString("NATIVE_SCAN_FAILED", Resources.resourceCulture); 126 | } 127 | } 128 | 129 | internal static string NOT_APPLICABLE 130 | { 131 | get 132 | { 133 | return Resources.ResourceManager.GetString("NOT_APPLICABLE", Resources.resourceCulture); 134 | } 135 | } 136 | 137 | internal static Bitmap OkImage 138 | { 139 | get 140 | { 141 | return (Bitmap) Resources.ResourceManager.GetObject("OkImage", Resources.resourceCulture); 142 | } 143 | } 144 | 145 | internal static string PATH_INVALID 146 | { 147 | get 148 | { 149 | return Resources.ResourceManager.GetString("PATH_INVALID", Resources.resourceCulture); 150 | } 151 | } 152 | 153 | internal static string PROBLEM_OUTLOOK_ADDIN 154 | { 155 | get 156 | { 157 | return Resources.ResourceManager.GetString("PROBLEM_OUTLOOK_ADDIN", Resources.resourceCulture); 158 | } 159 | } 160 | 161 | internal static string REGISTERED_MULTIPLE_TIMES 162 | { 163 | get 164 | { 165 | return Resources.ResourceManager.GetString("REGISTERED_MULTIPLE_TIMES", Resources.resourceCulture); 166 | } 167 | } 168 | 169 | internal static string REGISTRATION_INVALID 170 | { 171 | get 172 | { 173 | return Resources.ResourceManager.GetString("REGISTRATION_INVALID", Resources.resourceCulture); 174 | } 175 | } 176 | 177 | internal static string REMOTE_NOT_SELECTED 178 | { 179 | get 180 | { 181 | return Resources.ResourceManager.GetString("REMOTE_NOT_SELECTED", Resources.resourceCulture); 182 | } 183 | } 184 | 185 | internal static string REPORT_ADDINS 186 | { 187 | get 188 | { 189 | return Resources.ResourceManager.GetString("REPORT_ADDINS", Resources.resourceCulture); 190 | } 191 | } 192 | 193 | internal static string REPORT_CONTEXT 194 | { 195 | get 196 | { 197 | return Resources.ResourceManager.GetString("REPORT_CONTEXT", Resources.resourceCulture); 198 | } 199 | } 200 | 201 | internal static string REPORT_ELEMENT_ADDINS 202 | { 203 | get 204 | { 205 | return Resources.ResourceManager.GetString("REPORT_ELEMENT_ADDINS", Resources.resourceCulture); 206 | } 207 | } 208 | 209 | internal static string REPORT_ELEMENT_CONTEXT 210 | { 211 | get 212 | { 213 | return Resources.ResourceManager.GetString("REPORT_ELEMENT_CONTEXT", Resources.resourceCulture); 214 | } 215 | } 216 | 217 | internal static string REPORT_ELEMENT_DOMAINNAME 218 | { 219 | get 220 | { 221 | return Resources.ResourceManager.GetString("REPORT_ELEMENT_DOMAINNAME", Resources.resourceCulture); 222 | } 223 | } 224 | 225 | internal static string REPORT_ELEMENT_IPADDRESS 226 | { 227 | get 228 | { 229 | return Resources.ResourceManager.GetString("REPORT_ELEMENT_IPADDRESS", Resources.resourceCulture); 230 | } 231 | } 232 | 233 | internal static string REPORT_ELEMENT_MACHINE 234 | { 235 | get 236 | { 237 | return Resources.ResourceManager.GetString("REPORT_ELEMENT_MACHINE", Resources.resourceCulture); 238 | } 239 | } 240 | 241 | internal static string REPORT_ELEMENT_OS 242 | { 243 | get 244 | { 245 | return Resources.ResourceManager.GetString("REPORT_ELEMENT_OS", Resources.resourceCulture); 246 | } 247 | } 248 | 249 | internal static string REPORT_ELEMENT_REPORT 250 | { 251 | get 252 | { 253 | return Resources.ResourceManager.GetString("REPORT_ELEMENT_REPORT", Resources.resourceCulture); 254 | } 255 | } 256 | 257 | internal static string REPORT_ELEMENT_TIMESTAMP 258 | { 259 | get 260 | { 261 | return Resources.ResourceManager.GetString("REPORT_ELEMENT_TIMESTAMP", Resources.resourceCulture); 262 | } 263 | } 264 | 265 | internal static string REPORT_ELEMENT_USERNAME 266 | { 267 | get 268 | { 269 | return Resources.ResourceManager.GetString("REPORT_ELEMENT_USERNAME", Resources.resourceCulture); 270 | } 271 | } 272 | 273 | internal static string RPC_E_CALL_REJECTED_MESSAGE 274 | { 275 | get 276 | { 277 | return Resources.ResourceManager.GetString("RPC_E_CALL_REJECTED_MESSAGE", Resources.resourceCulture); 278 | } 279 | } 280 | 281 | internal static string SCAN_DISABLED_ITEMS 282 | { 283 | get 284 | { 285 | return Resources.ResourceManager.GetString("SCAN_DISABLED_ITEMS", Resources.resourceCulture); 286 | } 287 | } 288 | 289 | internal static string SCAN_FORMREGIONS 290 | { 291 | get 292 | { 293 | return Resources.ResourceManager.GetString("SCAN_FORMREGIONS", Resources.resourceCulture); 294 | } 295 | } 296 | 297 | internal static string SCAN_HKCU 298 | { 299 | get 300 | { 301 | return Resources.ResourceManager.GetString("SCAN_HKCU", Resources.resourceCulture); 302 | } 303 | } 304 | 305 | internal static string SCAN_HKLM 306 | { 307 | get 308 | { 309 | return Resources.ResourceManager.GetString("SCAN_HKLM", Resources.resourceCulture); 310 | } 311 | } 312 | 313 | internal static string SCAN_MANAGED_INTERFACES 314 | { 315 | get 316 | { 317 | return Resources.ResourceManager.GetString("SCAN_MANAGED_INTERFACES", Resources.resourceCulture); 318 | } 319 | } 320 | 321 | internal static string SCAN_NATIVE_INTERFACES 322 | { 323 | get 324 | { 325 | return Resources.ResourceManager.GetString("SCAN_NATIVE_INTERFACES", Resources.resourceCulture); 326 | } 327 | } 328 | 329 | internal static string SCAN_REMOTE 330 | { 331 | get 332 | { 333 | return Resources.ResourceManager.GetString("SCAN_REMOTE", Resources.resourceCulture); 334 | } 335 | } 336 | 337 | internal static string SECONDARY_INTERFACES_NONE 338 | { 339 | get 340 | { 341 | return Resources.ResourceManager.GetString("SECONDARY_INTERFACES_NONE", Resources.resourceCulture); 342 | } 343 | } 344 | 345 | internal static string STATUS_ALERT 346 | { 347 | get 348 | { 349 | return Resources.ResourceManager.GetString("STATUS_ALERT", Resources.resourceCulture); 350 | } 351 | } 352 | 353 | internal static string STATUS_FALSE 354 | { 355 | get 356 | { 357 | return Resources.ResourceManager.GetString("STATUS_FALSE", Resources.resourceCulture); 358 | } 359 | } 360 | 361 | internal static string STATUS_OK 362 | { 363 | get 364 | { 365 | return Resources.ResourceManager.GetString("STATUS_OK", Resources.resourceCulture); 366 | } 367 | } 368 | 369 | internal static string STATUS_TRUE 370 | { 371 | get 372 | { 373 | return Resources.ResourceManager.GetString("STATUS_TRUE", Resources.resourceCulture); 374 | } 375 | } 376 | 377 | internal static string TYPELOADEXCEPTION_MESSAGE 378 | { 379 | get 380 | { 381 | return Resources.ResourceManager.GetString("TYPELOADEXCEPTION_MESSAGE", Resources.resourceCulture); 382 | } 383 | } 384 | 385 | internal static string VALUE_UNKNOWN 386 | { 387 | get 388 | { 389 | return Resources.ResourceManager.GetString("VALUE_UNKNOWN", Resources.resourceCulture); 390 | } 391 | } 392 | 393 | internal static string VSTO_FORMREGION 394 | { 395 | get 396 | { 397 | return Resources.ResourceManager.GetString("VSTO_FORMREGION", Resources.resourceCulture); 398 | } 399 | } 400 | 401 | internal static string VSTO_RIBBON 402 | { 403 | get 404 | { 405 | return Resources.ResourceManager.GetString("VSTO_RIBBON", Resources.resourceCulture); 406 | } 407 | } 408 | 409 | internal static string VSTO_TASKPANE 410 | { 411 | get 412 | { 413 | return Resources.ResourceManager.GetString("VSTO_TASKPANE", Resources.resourceCulture); 414 | } 415 | } 416 | 417 | internal static Bitmap WarningImage 418 | { 419 | get 420 | { 421 | return (Bitmap) Resources.ResourceManager.GetObject("WarningImage", Resources.resourceCulture); 422 | } 423 | } 424 | 425 | internal Resources() 426 | { 427 | } 428 | } 429 | } 430 | -------------------------------------------------------------------------------- /AddInScanEngine/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | OK 122 | 123 | 124 | This add-in cannot be loaded independently of the host application. 125 | 126 | 127 | 128 | 129 | iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 130 | JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsRAAALEQF/ZF+RAAACiElE 131 | QVQ4T7WRW0iTYRzGP7VGU3POQ5SQh6GVkXXhjRiWsc+55U3ghS0wwi6KOcJD3YaJUCGGRs1qs5lWc+a3 132 | pWlruXlIrXk+U9qB5tosU8MyvoG0p9dtFwYhdtEPnpvn/zy8//d9qf8Gn8+nCs8XFqakHEr3Wv9GVlbW 133 | iTbzHZdGUzPP4/GivfbGIKcHMozOZp/Zi4nR05DJcu8T288z3QBFRUUlA30XsfKTgx9fQ2Fq1a9ERUUd 134 | 9o7XJzExUWA2PWXHBw/genkGVLdpvB2RorS0rIeMt3hS66BWVzPvX8sx2L0PeXkFKMg/iaXpOAxbGFdS 135 | UlKON/Z3aJoWjo+ZXMv2XRjqSoBUmo1T2RJ8m4zFu6406PWNVg6HE+qN/0lwcLCf2dw2aXsjxbI1HoPm 136 | eKSm0sjJPoKFgQjMdYdgoqfClZmZeZnEfTytNcjl8tyxAbVraToa8yMReNUQDh6Pj+PH9sNh9IO9xRdT 137 | j8LQanz2nfzSHm/NQ0xMTJjBYJj/0L0bsz0BcHT6Y4ThInzbdpzLSYa9iYJNR2Gm3gf9ujPIy8+vJ7VN 138 | njbhUnHxjd7nuXC88IejnQt7KwcOgy8elgTCouLC1kDBWueLjw82Y0rtD+OTul8CgYB2l4VCYUKjvnbF 139 | 1hmJ2Y4wOMx8snIQRjUB2BkZjQsyET4xQbDWh8CqDXXLUiPClaul/aTOpRSVtwxDJhkWhsXkscRY7EvH 140 | Ym8aFi00tBUivNRkYK5DjC/tErfmOsX43CaCUVfpSk4+eJYqK7tmuatUOFWVFc57KoWzrrbKqdfWOlse 141 | a53GZsatZr2WJR6rqVGx1cqbrFJRzqqrlKxEcrRq9RZbiWKJ4jag1dwaUTt+AwJ7VakXZN4zAAAAAElF 142 | TkSuQmCC 143 | 144 | 145 | 146 | Context 147 | 148 | 149 | ipAddress 150 | 151 | 152 | userName 153 | 154 | 155 | domainName 156 | 157 | 158 | Native Interfaces 159 | 160 | 161 | Managed Interfaces 162 | 163 | 164 | RPC Call Rejected: We attempted to connect to the host application, to determine whether each add-in is loaded, but we failed to connect to the host. The host is busy. If there is a dialog open in the host, close it and hit Refresh in this app. 165 | 166 | 167 | true 168 | 169 | 170 | Invalid name 171 | 172 | 173 | Add-in DLL path is not found. 174 | 175 | 176 | n/a 177 | 178 | 179 | This is a remote-deployed add-in and remote scanning is not selected. 180 | 181 | 182 | (none) 183 | 184 | 185 | false 186 | 187 | 188 | Alert 189 | 190 | 191 | 192 | iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 193 | JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsRAAALEQF/ZF+RAAAB4ElE 194 | QVQ4T2MgFZjLisgvjbCtz7PW1IcKEQ+AmoWfNoff+zYn4f/L9vD/wTryilAp4sD9quDJX2bG//8yLeb/ 195 | 3drAN6oifMQbsCzCNuH9pBig5uj/b7vC/lc46NQDhVkhsgQA0OmSz1vCH3+ZGv3/Y2/Y/9UxdruBwvwQ 196 | WSLAg6rgFZ8mR/3/1Bf2/2a53ys1ET5DqBRhAAzxqLfd4UCbQ/+/agoEBVwiUJgFIgsFQCdCWagAHOoN 197 | IQ8/9oT+f9sa8H9qgNkKoDAPRBYKlkXaZb7qi337qD5su6mMiDRUGAyWR9n1ve8K+f++1f//jRKfVyrC 198 | vLpQKQQAan7/e3XW/x9L0/8/bgq7ZyojDI4aYEIxe9UcBNb8stb3f4qpailQGNXpILAsxr7z85zk/z8W 199 | pfwHJZBHdSEPsizUNR5VB95+1+L3/02t1/+Ncfb7gEpxh/rCcJvGdxOiwXH8sT/8/8OqwKdvGiGa7xR7 200 | fdQU47cAKmOEqMYBFoRZF75qC/n/oTPo/7smX6Bmz/8vyt3/t7kbTgBKs0FUEQALQq3Tn9f6/39T4/n/ 201 | VZnr/6t5Hi/EuDnkodLEgYVh1ulPy7z+Pyty+Z9npVELFMIMOEIgy1LdNc1MtZSLlVkYKoQDMDAAAEky 202 | zJMGhDfKAAAAAElFTkSuQmCC 203 | 204 | 205 | 206 | AddInSpy provides only partial information for add-ins deployed to HTTP URLs. 207 | 208 | 209 | manifest path cannot be empty 210 | 211 | 212 | context 213 | 214 | 215 | Context information is empty, and add-in information is empty 216 | 217 | 218 | AddIns 219 | 220 | 221 | timestamp 222 | 223 | 224 | MessageClass={0}, FormRegion={1} 225 | 226 | 227 | report 228 | 229 | 230 | Add-in COM CLSID registration is incomplete or invalid. 231 | 232 | 233 | FormRegions 234 | 235 | 236 | Disabled Items 237 | 238 | 239 | ? 240 | 241 | 242 | addIns 243 | 244 | 245 | VSTO 246 | 247 | 248 | Add-in seems to be disabled in: {0} {1}. 249 | 250 | 251 | Native 252 | 253 | 254 | Add-in is registered multiple times. 255 | 256 | 257 | HKCU 258 | 259 | 260 | HKLM 261 | 262 | 263 | os 264 | 265 | 266 | machine 267 | 268 | 269 | The scan for secondary extensibility interfaces failed on this native add-in. 270 | 271 | 272 | Managed 273 | 274 | 275 | TypeLoadException: one reason you can get this error is if you have an Office 2007 add-in registered on a machine which only has Office 2003 installed.{0}{0}Add-in path:{0}{1}{0}{0}Details:{0}{2} 276 | 277 | 278 | Remote 279 | 280 | 281 | VSTO Ribbon 282 | 283 | 284 | VSTO Task Pane 285 | 286 | 287 | VSTO Form Region 288 | 289 | -------------------------------------------------------------------------------- /AddInScanEngine/RegistryReader.cs: -------------------------------------------------------------------------------- 1 | // Decompiled with JetBrains decompiler 2 | // Type: AddInSpy.RegistryReader 3 | // Assembly: AddInScanEngine, Version=1.5.0.0, Culture=neutral, PublicKeyToken=null 4 | // MVID: F92CC3BC-B994-4216-9D73-6B4F2C71BD20 5 | // Assembly location: C:\Users\Jozef\Downloads\AddInSpy\AddInScanEngine.dll 6 | 7 | using AddInSpy.Properties; 8 | using Microsoft.Win32; 9 | using System; 10 | using System.Collections.Generic; 11 | using System.Collections.Specialized; 12 | using System.Text; 13 | 14 | namespace AddInSpy 15 | { 16 | internal class RegistryReader 17 | { 18 | private static string formRegionRegKeyName = "Software\\Microsoft\\Office\\Outlook\\FormRegions"; 19 | 20 | internal static void GetAddInsRegHiveNames(RegistryKey regHive, string hostName, out string regHiveName, List officeRegKeyNames) 21 | { 22 | regHiveName = (string) null; 23 | regHiveName = regHive != Registry.CurrentUser ? "HKLM" : "HKCU"; 24 | if (hostName == "Visio") 25 | { 26 | officeRegKeyNames.Add("Software\\Microsoft\\Visio\\Addins"); 27 | 28 | if (regHiveName == "HKLM") 29 | officeRegKeyNames.Add("Software\\Wow6432Node\\Microsoft\\Visio\\Addins"); 30 | } 31 | else if (hostName == "Project") 32 | { 33 | officeRegKeyNames.Add("Software\\Microsoft\\Office\\MS Project\\Addins"); 34 | 35 | if (regHiveName == "HKLM") 36 | officeRegKeyNames.Add("Software\\Wow6432Node\\Microsoft\\Office\\MS Project\\Addins"); 37 | } 38 | else 39 | { 40 | officeRegKeyNames.Add("Software\\Microsoft\\Office\\" + hostName + "\\Addins"); 41 | 42 | if (regHiveName == "HKLM") 43 | officeRegKeyNames.Add("Software\\Wow6432Node\\Microsoft\\Office\\" + hostName + "\\Addins"); 44 | } 45 | } 46 | 47 | internal static string GetInprocServerFromClsid(string clsid, string codeBase) 48 | { 49 | string uriString = (string) null; 50 | try 51 | { 52 | RegistryKey registryKey; 53 | using (registryKey = Registry.ClassesRoot.OpenSubKey("CLSID\\" + clsid + "\\InprocServer32")) 54 | { 55 | if (registryKey != null) 56 | { 57 | uriString = (string) registryKey.GetValue(codeBase); 58 | if (uriString != null && uriString.StartsWith("file:///")) 59 | uriString = new Uri(uriString).LocalPath; 60 | } 61 | } 62 | } 63 | catch (Exception ex) 64 | { 65 | Globals.AddException(ex); 66 | } 67 | return uriString; 68 | } 69 | 70 | internal static bool GetIsManagedCodeCategoryRegistered(string clsid) 71 | { 72 | bool flag = false; 73 | try 74 | { 75 | RegistryKey registryKey; 76 | using (registryKey = Registry.ClassesRoot.OpenSubKey("CLSID\\" + clsid + "\\Implemented Categories\\{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}")) 77 | { 78 | if (registryKey != null) 79 | flag = true; 80 | } 81 | } 82 | catch (Exception ex) 83 | { 84 | Globals.AddException(ex); 85 | } 86 | return flag; 87 | } 88 | 89 | internal static bool GetIsMscoreeRegistered(string clsid) 90 | { 91 | bool flag = false; 92 | try 93 | { 94 | RegistryKey registryKey; 95 | using (registryKey = Registry.ClassesRoot.OpenSubKey("CLSID\\" + clsid + "\\InprocServer32")) 96 | { 97 | if (registryKey != null) 98 | { 99 | if (((string) registryKey.GetValue((string) null)).Equals("mscoree.dll", StringComparison.InvariantCultureIgnoreCase)) 100 | flag = true; 101 | } 102 | } 103 | } 104 | catch (Exception ex) 105 | { 106 | Globals.AddException(ex); 107 | } 108 | return flag; 109 | } 110 | 111 | internal static string GetCLSIDFromProgID(string progId) 112 | { 113 | string str = (string) null; 114 | try 115 | { 116 | using (RegistryKey registryKey = Registry.ClassesRoot.OpenSubKey(progId + "\\CLSID")) 117 | { 118 | if (registryKey != null) 119 | str = (string) registryKey.GetValue((string) null); 120 | } 121 | } 122 | catch (Exception ex) 123 | { 124 | Globals.AddException(ex); 125 | } 126 | return str; 127 | } 128 | 129 | internal static bool ReadResiliencyRegistryKeys(string hostName, string addInPath, string addInFriendlyName, out string disabledStatus) 130 | { 131 | disabledStatus = string.Empty; 132 | bool flag = false; 133 | string[] strArray = new string[2] 134 | { 135 | "11.0", 136 | "12.0" 137 | }; 138 | foreach (string officeVersion in strArray) 139 | { 140 | if (RegistryReader.ReadDisabledItems(hostName, officeVersion, addInPath, addInFriendlyName)) 141 | { 142 | string str = string.Format(Resources.ADDIN_DISABLED, (object) hostName, (object) officeVersion); 143 | disabledStatus = disabledStatus.Length != 0 ? string.Format("{0} {1}", (object) disabledStatus, (object) str) : str; 144 | flag = true; 145 | } 146 | } 147 | return flag; 148 | } 149 | 150 | private static bool ReadDisabledItems(string appName, string officeVersion, string addInPath, string addInFriendlyName) 151 | { 152 | bool flag = false; 153 | string name1 = string.Format("Software\\Microsoft\\Office\\{0}\\{1}\\Resiliency\\DisabledItems", (object) officeVersion, (object) appName); 154 | try 155 | { 156 | using (RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(name1)) 157 | { 158 | if (registryKey != null) 159 | { 160 | foreach (string name2 in registryKey.GetValueNames()) 161 | { 162 | Encoding unicode = Encoding.Unicode; 163 | byte[] bytes = (byte[]) registryKey.GetValue(name2); 164 | char[] chars = new char[unicode.GetCharCount(bytes, 0, bytes.Length)]; 165 | unicode.GetChars(bytes, 0, bytes.Length, chars, 0); 166 | string str1 = new string(chars); 167 | int length1 = str1.LastIndexOf(char.MinValue); 168 | string str2 = str1.Substring(0, length1); 169 | int length2 = str2.LastIndexOf(char.MinValue); 170 | string str3 = str2.Substring(0, length2); 171 | int num = str3.LastIndexOf(char.MinValue); 172 | string strB1 = str3.Substring(num + 1); 173 | string strB2 = str2.Substring(length2 + 1, str1.Length - length2 - 2); 174 | if (string.Compare(addInPath, strB1, true) == 0 && string.Compare(addInFriendlyName, strB2, true) == 0) 175 | { 176 | flag = true; 177 | break; 178 | } 179 | } 180 | } 181 | } 182 | } 183 | catch (Exception ex) 184 | { 185 | Globals.AddException(ex); 186 | } 187 | return flag; 188 | } 189 | 190 | internal static NameValueCollection ReadFormRegionRegistrations(RegistryKey regHive) 191 | { 192 | NameValueCollection nameValueCollection = new NameValueCollection(); 193 | try 194 | { 195 | using (RegistryKey registryKey1 = regHive.OpenSubKey(RegistryReader.formRegionRegKeyName)) 196 | { 197 | if (registryKey1 != null) 198 | { 199 | foreach (string name1 in registryKey1.GetSubKeyNames()) 200 | { 201 | using (RegistryKey registryKey2 = registryKey1.OpenSubKey(name1)) 202 | { 203 | foreach (string name2 in registryKey2.GetValueNames()) 204 | { 205 | string name3 = ((string) registryKey2.GetValue(name2)).TrimStart('='); 206 | string str = string.Format(Resources.MESSAGECLASS_FORMREGION, (object) name1, (object) name2); 207 | nameValueCollection.Add(name3, str); 208 | } 209 | } 210 | } 211 | } 212 | } 213 | } 214 | catch (Exception ex) 215 | { 216 | Globals.AddException(ex); 217 | } 218 | return nameValueCollection; 219 | } 220 | } 221 | } 222 | -------------------------------------------------------------------------------- /AddInScanEngine/ReportWriter.cs: -------------------------------------------------------------------------------- 1 | // Decompiled with JetBrains decompiler 2 | // Type: AddInSpy.ReportWriter 3 | // Assembly: AddInScanEngine, Version=1.5.0.0, Culture=neutral, PublicKeyToken=null 4 | // MVID: F92CC3BC-B994-4216-9D73-6B4F2C71BD20 5 | // Assembly location: C:\Users\Jozef\Downloads\AddInSpy\AddInScanEngine.dll 6 | 7 | using AddInSpy.Properties; 8 | using System; 9 | using System.Data; 10 | using System.Xml; 11 | 12 | namespace AddInSpy 13 | { 14 | internal class ReportWriter 15 | { 16 | private DataTable dataTable; 17 | private string hostAddress; 18 | private string hostName; 19 | private string userName; 20 | private string domainName; 21 | private string osVersion; 22 | private string vstoSuppressDisplayAlerts; 23 | private string vstoLogAlerts; 24 | 25 | public ReportWriter(DataTable dataTable, string hostAddress, string hostName, string userName, string domainName, string osVersion, string vstoSuppressDisplayAlerts, string vstoLogAlerts) 26 | { 27 | this.dataTable = dataTable; 28 | this.hostAddress = hostAddress; 29 | this.hostName = hostName; 30 | this.userName = userName; 31 | this.domainName = domainName; 32 | this.osVersion = osVersion; 33 | this.vstoSuppressDisplayAlerts = vstoSuppressDisplayAlerts; 34 | this.vstoLogAlerts = vstoLogAlerts; 35 | } 36 | 37 | internal void GenerateReport(bool reportContext, bool reportAddIns, string reportFileName) 38 | { 39 | XmlDocument contextXml = (XmlDocument) null; 40 | XmlDocument addInXml = (XmlDocument) null; 41 | if (reportContext) 42 | contextXml = this.GetContextXml(); 43 | if (reportAddIns) 44 | addInXml = this.GetAddInsXml(); 45 | this.Export(contextXml, addInXml, reportFileName); 46 | } 47 | 48 | private XmlDocument GetAddInsXml() 49 | { 50 | DataTable dataTable = this.dataTable.Copy(); 51 | dataTable.TableName = "addIn"; 52 | dataTable.Columns.Remove("Status2"); 53 | string xml = new DataSet("addIns") 54 | { 55 | Tables = { 56 | dataTable 57 | } 58 | }.GetXml(); 59 | XmlDocument xmlDocument = new XmlDocument(); 60 | xmlDocument.LoadXml(xml); 61 | foreach (XmlNode xmlNode in xmlDocument.SelectNodes("addIns/addIn/Status")) 62 | xmlNode.InnerXml = xmlNode.InnerXml.CompareTo(Resources.STATUS_TRUE) != 0 ? Resources.STATUS_ALERT : Resources.STATUS_OK; 63 | return xmlDocument; 64 | } 65 | 66 | private XmlDocument GetContextXml() 67 | { 68 | XmlDocument xmlDocument = new XmlDocument(); 69 | XmlElement element1 = xmlDocument.CreateElement(Resources.REPORT_ELEMENT_CONTEXT); 70 | XmlElement element2 = xmlDocument.CreateElement(Resources.REPORT_ELEMENT_TIMESTAMP); 71 | element2.InnerText = DateTime.Now.ToString(); 72 | element1.AppendChild((XmlNode) element2); 73 | XmlElement element3 = xmlDocument.CreateElement(Resources.REPORT_ELEMENT_MACHINE); 74 | element3.InnerText = this.hostName; 75 | element1.AppendChild((XmlNode) element3); 76 | XmlElement element4 = xmlDocument.CreateElement(Resources.REPORT_ELEMENT_IPADDRESS); 77 | element4.InnerText = this.hostAddress; 78 | element1.AppendChild((XmlNode) element4); 79 | XmlElement element5 = xmlDocument.CreateElement(Resources.REPORT_ELEMENT_USERNAME); 80 | element5.InnerText = this.userName; 81 | element1.AppendChild((XmlNode) element5); 82 | XmlElement element6 = xmlDocument.CreateElement(Resources.REPORT_ELEMENT_DOMAINNAME); 83 | element6.InnerText = this.domainName; 84 | element1.AppendChild((XmlNode) element6); 85 | XmlElement element7 = xmlDocument.CreateElement(Resources.REPORT_ELEMENT_OS); 86 | element7.InnerText = this.osVersion; 87 | element1.AppendChild((XmlNode) element7); 88 | xmlDocument.AppendChild((XmlNode) element1); 89 | return xmlDocument; 90 | } 91 | 92 | private void Export(XmlDocument contextXml, XmlDocument addInXml, string reportFileName) 93 | { 94 | if (contextXml == null && addInXml == null) 95 | { 96 | Globals.AddErrorMessage(Resources.CONTEXT_ADDIN_EMPTY); 97 | } 98 | else 99 | { 100 | XmlDocument xmlDocument = new XmlDocument(); 101 | XmlElement element1 = xmlDocument.CreateElement(Resources.REPORT_ELEMENT_REPORT); 102 | xmlDocument.AppendChild((XmlNode) element1); 103 | if (contextXml != null) 104 | { 105 | XmlElement element2 = xmlDocument.CreateElement(Resources.REPORT_ELEMENT_CONTEXT); 106 | element2.InnerXml = contextXml.FirstChild.InnerXml; 107 | xmlDocument.FirstChild.AppendChild((XmlNode) element2); 108 | if (addInXml != null) 109 | { 110 | XmlElement element3 = xmlDocument.CreateElement(Resources.REPORT_ELEMENT_ADDINS); 111 | element3.InnerXml = addInXml.FirstChild.InnerXml; 112 | xmlDocument.FirstChild.AppendChild((XmlNode) element3); 113 | } 114 | } 115 | else if (addInXml != null) 116 | { 117 | XmlElement element2 = xmlDocument.CreateElement(Resources.REPORT_ELEMENT_ADDINS); 118 | element2.InnerXml = addInXml.FirstChild.InnerXml; 119 | xmlDocument.FirstChild.AppendChild((XmlNode) element2); 120 | } 121 | if (reportFileName == null || reportFileName.Length == 0) 122 | reportFileName = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\" + string.Format("{0}_{1}@{2}", (object) this.hostAddress, (object) this.userName, (object) this.domainName).Replace(":", ".") + ".xml"; 123 | xmlDocument.Save(reportFileName); 124 | } 125 | } 126 | } 127 | } 128 | -------------------------------------------------------------------------------- /AddInScanEngine/SecondaryExtensibility.cs: -------------------------------------------------------------------------------- 1 | // Decompiled with JetBrains decompiler 2 | // Type: AddInSpy.SecondaryExtensibility 3 | // Assembly: AddInScanEngine, Version=1.5.0.0, Culture=neutral, PublicKeyToken=null 4 | // MVID: F92CC3BC-B994-4216-9D73-6B4F2C71BD20 5 | // Assembly location: C:\Users\Jozef\Downloads\AddInSpy\AddInScanEngine.dll 6 | 7 | using System; 8 | using System.Collections.Generic; 9 | 10 | namespace AddInSpy 11 | { 12 | internal class SecondaryExtensibility 13 | { 14 | private IDictionary addInInterfaces; 15 | 16 | internal IDictionary AddInInterfaces 17 | { 18 | get 19 | { 20 | return this.addInInterfaces; 21 | } 22 | } 23 | 24 | public SecondaryExtensibility(string hostName) 25 | { 26 | this.addInInterfaces = (IDictionary) new Dictionary(); 27 | switch (hostName) 28 | { 29 | case "Access": 30 | this.addInInterfaces.Add(new KeyValuePair("ICustomTaskPaneConsumer", new Guid("{000C033E-0000-0000-C000-000000000046}"))); 31 | this.addInInterfaces.Add(new KeyValuePair("IRibbonExtensibility", new Guid("{000C0396-0000-0000-C000-000000000046}"))); 32 | break; 33 | case "Excel": 34 | this.addInInterfaces.Add(new KeyValuePair("ICustomTaskPaneConsumer", new Guid("{000C033E-0000-0000-C000-000000000046}"))); 35 | this.addInInterfaces.Add(new KeyValuePair("IRibbonExtensibility", new Guid("{000C0396-0000-0000-C000-000000000046}"))); 36 | this.addInInterfaces.Add(new KeyValuePair("EncryptionProvider", new Guid("{000CD809-0000-0000-C000-000000000046}"))); 37 | this.addInInterfaces.Add(new KeyValuePair("SignatureProvider", new Guid("{000CD6A3-0000-0000-C000-000000000046}"))); 38 | this.addInInterfaces.Add(new KeyValuePair("IDocumentInspector", new Guid("{000C0393-0000-0000-C000-000000000046}"))); 39 | break; 40 | case "InfoPath": 41 | this.addInInterfaces.Add(new KeyValuePair("ICustomTaskPaneConsumer", new Guid("{000C033E-0000-0000-C000-000000000046}"))); 42 | break; 43 | case "Outlook": 44 | this.addInInterfaces.Add(new KeyValuePair("ICustomTaskPaneConsumer", new Guid("{000C033E-0000-0000-C000-000000000046}"))); 45 | this.addInInterfaces.Add(new KeyValuePair("IRibbonExtensibility", new Guid("{000C0396-0000-0000-C000-000000000046}"))); 46 | this.addInInterfaces.Add(new KeyValuePair("FormRegionStartup", new Guid("{00063059-0000-0000-C000-000000000046}"))); 47 | break; 48 | case "PowerPoint": 49 | this.addInInterfaces.Add(new KeyValuePair("ICustomTaskPaneConsumer", new Guid("{000C033E-0000-0000-C000-000000000046}"))); 50 | this.addInInterfaces.Add(new KeyValuePair("IRibbonExtensibility", new Guid("{000C0396-0000-0000-C000-000000000046}"))); 51 | this.addInInterfaces.Add(new KeyValuePair("EncryptionProvider", new Guid("{000CD809-0000-0000-C000-000000000046}"))); 52 | this.addInInterfaces.Add(new KeyValuePair("SignatureProvider", new Guid("{000CD6A3-0000-0000-C000-000000000046}"))); 53 | this.addInInterfaces.Add(new KeyValuePair("IDocumentInspector", new Guid("{000C0393-0000-0000-C000-000000000046}"))); 54 | break; 55 | case "Word": 56 | this.addInInterfaces.Add(new KeyValuePair("ICustomTaskPaneConsumer", new Guid("{000C033E-0000-0000-C000-000000000046}"))); 57 | this.addInInterfaces.Add(new KeyValuePair("IRibbonExtensibility", new Guid("{000C0396-0000-0000-C000-000000000046}"))); 58 | this.addInInterfaces.Add(new KeyValuePair("EncryptionProvider", new Guid("{000CD809-0000-0000-C000-000000000046}"))); 59 | this.addInInterfaces.Add(new KeyValuePair("SignatureProvider", new Guid("{000CD6A3-0000-0000-C000-000000000046}"))); 60 | this.addInInterfaces.Add(new KeyValuePair("IDocumentInspector", new Guid("{000C0393-0000-0000-C000-000000000046}"))); 61 | this.addInInterfaces.Add(new KeyValuePair("IBlogExtensibility", new Guid("{000C03C4-0000-0000-C000-000000000046}"))); 62 | this.addInInterfaces.Add(new KeyValuePair("IBlogPictureExtensibility", new Guid("{000C03C5-0000-0000-C000-000000000046}"))); 63 | break; 64 | } 65 | } 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /AddInSpy.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 2013 4 | VisualStudioVersion = 12.0.31101.0 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddInSpy", "AddInSpy\AddInSpy.csproj", "{5A0D7117-5711-4C74-A1D0-BC2D878BC093}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddInScanEngine", "AddInScanEngine\AddInScanEngine.csproj", "{5DAF28B6-078C-457D-9591-13DFE22C1CE3}" 9 | EndProject 10 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AS", "AS\AS.csproj", "{26FB0558-0C68-49D4-96BE-CB305EE1FD1E}" 11 | EndProject 12 | Global 13 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 14 | Debug|Any CPU = Debug|Any CPU 15 | Release|Any CPU = Release|Any CPU 16 | EndGlobalSection 17 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 18 | {5A0D7117-5711-4C74-A1D0-BC2D878BC093}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 19 | {5A0D7117-5711-4C74-A1D0-BC2D878BC093}.Debug|Any CPU.Build.0 = Debug|Any CPU 20 | {5A0D7117-5711-4C74-A1D0-BC2D878BC093}.Release|Any CPU.ActiveCfg = Release|Any CPU 21 | {5A0D7117-5711-4C74-A1D0-BC2D878BC093}.Release|Any CPU.Build.0 = Release|Any CPU 22 | {5DAF28B6-078C-457D-9591-13DFE22C1CE3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 23 | {5DAF28B6-078C-457D-9591-13DFE22C1CE3}.Debug|Any CPU.Build.0 = Debug|Any CPU 24 | {5DAF28B6-078C-457D-9591-13DFE22C1CE3}.Release|Any CPU.ActiveCfg = Release|Any CPU 25 | {5DAF28B6-078C-457D-9591-13DFE22C1CE3}.Release|Any CPU.Build.0 = Release|Any CPU 26 | {26FB0558-0C68-49D4-96BE-CB305EE1FD1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 27 | {26FB0558-0C68-49D4-96BE-CB305EE1FD1E}.Debug|Any CPU.Build.0 = Debug|Any CPU 28 | {26FB0558-0C68-49D4-96BE-CB305EE1FD1E}.Release|Any CPU.ActiveCfg = Release|Any CPU 29 | {26FB0558-0C68-49D4-96BE-CB305EE1FD1E}.Release|Any CPU.Build.0 = Release|Any CPU 30 | EndGlobalSection 31 | GlobalSection(SolutionProperties) = preSolution 32 | HideSolutionNode = FALSE 33 | EndGlobalSection 34 | EndGlobal 35 | -------------------------------------------------------------------------------- /AddInSpy/AddInDataControl.cs: -------------------------------------------------------------------------------- 1 | // Decompiled with JetBrains decompiler 2 | // Type: AddInSpy.AddInDataControl 3 | // Assembly: AddInSpy, Version=1.5.0.0, Culture=neutral, PublicKeyToken=null 4 | // MVID: 348DAB18-01AB-4E5E-BAAD-807E7B0E72BC 5 | // Assembly location: C:\Users\Jozef\Downloads\AddInSpy\AddInSpy.exe 6 | 7 | using System.ComponentModel; 8 | using System.Drawing; 9 | using System.Windows.Forms; 10 | 11 | namespace AddInSpy 12 | { 13 | public class AddInDataControl : UserControl 14 | { 15 | private IContainer components = (IContainer) null; 16 | internal DataGridView dataGrid; 17 | private DataGridViewTextBoxColumn Item; 18 | private DataGridViewTextBoxColumn Value; 19 | 20 | public AddInDataControl() 21 | { 22 | this.InitializeComponent(); 23 | } 24 | 25 | protected override void Dispose(bool disposing) 26 | { 27 | if (disposing && this.components != null) 28 | this.components.Dispose(); 29 | base.Dispose(disposing); 30 | } 31 | 32 | private void InitializeComponent() 33 | { 34 | DataGridViewCellStyle gridViewCellStyle = new DataGridViewCellStyle(); 35 | ComponentResourceManager componentResourceManager = new ComponentResourceManager(typeof (AddInDataControl)); 36 | this.dataGrid = new DataGridView(); 37 | this.Item = new DataGridViewTextBoxColumn(); 38 | this.Value = new DataGridViewTextBoxColumn(); 39 | ((ISupportInitialize) this.dataGrid).BeginInit(); 40 | this.SuspendLayout(); 41 | this.dataGrid.AllowUserToAddRows = false; 42 | this.dataGrid.AllowUserToDeleteRows = false; 43 | gridViewCellStyle.BackColor = Color.Lavender; 44 | gridViewCellStyle.SelectionBackColor = Color.Thistle; 45 | gridViewCellStyle.SelectionForeColor = Color.Black; 46 | this.dataGrid.AlternatingRowsDefaultCellStyle = gridViewCellStyle; 47 | this.dataGrid.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; 48 | this.dataGrid.Columns.AddRange((DataGridViewColumn) this.Item, (DataGridViewColumn) this.Value); 49 | componentResourceManager.ApplyResources((object) this.dataGrid, "dataGrid"); 50 | this.dataGrid.Name = "dataGrid"; 51 | this.Item.AutoSizeMode = DataGridViewAutoSizeColumnMode.None; 52 | this.Item.DataPropertyName = "Item"; 53 | this.Item.FillWeight = 121.8274f; 54 | componentResourceManager.ApplyResources((object) this.Item, "Item"); 55 | this.Item.Name = "Item"; 56 | this.Value.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; 57 | this.Value.DataPropertyName = "Value"; 58 | this.Value.FillWeight = 78.17259f; 59 | componentResourceManager.ApplyResources((object) this.Value, "Value"); 60 | this.Value.Name = "Value"; 61 | componentResourceManager.ApplyResources((object) this, "$this"); 62 | this.AutoScaleMode = AutoScaleMode.Font; 63 | this.Controls.Add((Control) this.dataGrid); 64 | this.Name = "AddInDataControl"; 65 | ((ISupportInitialize) this.dataGrid).EndInit(); 66 | this.ResumeLayout(false); 67 | } 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /AddInSpy/AddInDataControl.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | 0, 0 123 | 124 | 125 | 840, 540 126 | 127 | 128 | Value 129 | 130 | 131 | dataGrid 132 | 133 | 134 | System.Windows.Forms.DataGridView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 135 | 136 | 137 | $this 138 | 139 | 140 | 0 141 | 142 | 143 | System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 144 | 145 | 146 | Item 147 | 148 | 149 | 150 | Fill 151 | 152 | 153 | 840, 540 154 | 155 | 156 | 157 | 0 158 | 159 | 160 | Item 161 | 162 | 163 | True 164 | 165 | 166 | 120 167 | 168 | 169 | Value 170 | 171 | 172 | System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 173 | 174 | 175 | AddInDataControl 176 | 177 | 178 | System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 179 | 180 | 181 | 820, 506 182 | 183 | 184 | 6, 13 185 | 186 | -------------------------------------------------------------------------------- /AddInSpy/AddInGridControl.cs: -------------------------------------------------------------------------------- 1 | // Decompiled with JetBrains decompiler 2 | // Type: AddInSpy.AddInGridControl 3 | // Assembly: AddInSpy, Version=1.5.0.0, Culture=neutral, PublicKeyToken=null 4 | // MVID: 348DAB18-01AB-4E5E-BAAD-807E7B0E72BC 5 | // Assembly location: C:\Users\Jozef\Downloads\AddInSpy\AddInSpy.exe 6 | 7 | using System.ComponentModel; 8 | using System.Drawing; 9 | using System.Windows.Forms; 10 | 11 | namespace AddInSpy 12 | { 13 | public class AddInGridControl : UserControl, IAddInGridControl 14 | { 15 | private IContainer components = (IContainer) null; 16 | private DataGridView addInGrid; 17 | private DataGridViewTextBoxColumn Item; 18 | private DataGridViewTextBoxColumn Host; 19 | private DataGridViewCheckBoxColumn Running; 20 | private DataGridViewCheckBoxColumn Loaded; 21 | private DataGridViewTextBoxColumn Type; 22 | private DataGridViewTextBoxColumn FriendlyName; 23 | private DataGridViewTextBoxColumn ProgID; 24 | private DataGridViewTextBoxColumn CLSID; 25 | private DataGridViewTextBoxColumn Manifest; 26 | private DataGridViewTextBoxColumn DllPath; 27 | private DataGridViewTextBoxColumn LoadBehavior; 28 | private DataGridViewTextBoxColumn RegHive; 29 | private DataGridViewCheckBoxColumn Wow6432; 30 | private DataGridViewTextBoxColumn AssemblyName; 31 | private DataGridViewTextBoxColumn CLR_version; 32 | private DataGridViewCheckBoxColumn Exposed; 33 | private DataGridViewTextBoxColumn Interfaces; 34 | private DataGridViewTextBoxColumn FormRegions; 35 | private DataGridViewTextBoxColumn VSTOR; 36 | private DataGridViewTextBoxColumn Installed; 37 | private DataGridViewTextBoxColumn PubVer; 38 | private DataGridViewImageColumn Status2; 39 | private DataGridViewCheckBoxColumn Status; 40 | private DataGridViewTextBoxColumn StatusDescription; 41 | 42 | public DataGridView AddInGrid 43 | { 44 | get 45 | { 46 | return this.addInGrid; 47 | } 48 | } 49 | 50 | public AddInGridControl() 51 | { 52 | this.InitializeComponent(); 53 | } 54 | 55 | protected override void Dispose(bool disposing) 56 | { 57 | if (disposing && this.components != null) 58 | this.components.Dispose(); 59 | base.Dispose(disposing); 60 | } 61 | 62 | private void InitializeComponent() 63 | { 64 | DataGridViewCellStyle gridViewCellStyle1 = new DataGridViewCellStyle(); 65 | DataGridViewCellStyle gridViewCellStyle2 = new DataGridViewCellStyle(); 66 | DataGridViewCellStyle gridViewCellStyle3 = new DataGridViewCellStyle(); 67 | ComponentResourceManager componentResourceManager = new ComponentResourceManager(typeof (AddInGridControl)); 68 | this.addInGrid = new DataGridView(); 69 | this.Item = new DataGridViewTextBoxColumn(); 70 | this.Host = new DataGridViewTextBoxColumn(); 71 | this.Running = new DataGridViewCheckBoxColumn(); 72 | this.Loaded = new DataGridViewCheckBoxColumn(); 73 | this.Type = new DataGridViewTextBoxColumn(); 74 | this.FriendlyName = new DataGridViewTextBoxColumn(); 75 | this.ProgID = new DataGridViewTextBoxColumn(); 76 | this.CLSID = new DataGridViewTextBoxColumn(); 77 | this.Manifest = new DataGridViewTextBoxColumn(); 78 | this.DllPath = new DataGridViewTextBoxColumn(); 79 | this.LoadBehavior = new DataGridViewTextBoxColumn(); 80 | this.RegHive = new DataGridViewTextBoxColumn(); 81 | this.Wow6432 = new DataGridViewCheckBoxColumn(); 82 | this.AssemblyName = new DataGridViewTextBoxColumn(); 83 | this.CLR_version = new DataGridViewTextBoxColumn(); 84 | this.Exposed = new DataGridViewCheckBoxColumn(); 85 | this.Interfaces = new DataGridViewTextBoxColumn(); 86 | this.FormRegions = new DataGridViewTextBoxColumn(); 87 | this.VSTOR = new DataGridViewTextBoxColumn(); 88 | this.Installed = new DataGridViewTextBoxColumn(); 89 | this.PubVer = new DataGridViewTextBoxColumn(); 90 | this.Status2 = new DataGridViewImageColumn(); 91 | this.Status = new DataGridViewCheckBoxColumn(); 92 | this.StatusDescription = new DataGridViewTextBoxColumn(); 93 | ((ISupportInitialize) this.addInGrid).BeginInit(); 94 | this.SuspendLayout(); 95 | this.addInGrid.AllowUserToAddRows = false; 96 | this.addInGrid.AllowUserToDeleteRows = false; 97 | this.addInGrid.AllowUserToOrderColumns = true; 98 | gridViewCellStyle1.BackColor = Color.Lavender; 99 | gridViewCellStyle1.SelectionBackColor = Color.Thistle; 100 | gridViewCellStyle1.SelectionForeColor = Color.Black; 101 | this.addInGrid.AlternatingRowsDefaultCellStyle = gridViewCellStyle1; 102 | this.addInGrid.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; 103 | this.addInGrid.Columns.AddRange((DataGridViewColumn) this.Item, (DataGridViewColumn) this.Host, (DataGridViewColumn) this.Running, (DataGridViewColumn) this.Loaded, (DataGridViewColumn) this.Type, (DataGridViewColumn) this.FriendlyName, (DataGridViewColumn) this.ProgID, (DataGridViewColumn) this.CLSID, (DataGridViewColumn) this.Manifest, (DataGridViewColumn) this.DllPath, (DataGridViewColumn) this.LoadBehavior, (DataGridViewColumn) this.RegHive, (DataGridViewColumn) this.Wow6432, (DataGridViewColumn) this.AssemblyName, (DataGridViewColumn) this.CLR_version, (DataGridViewColumn) this.Exposed, (DataGridViewColumn) this.Interfaces, (DataGridViewColumn) this.FormRegions, (DataGridViewColumn) this.VSTOR, (DataGridViewColumn) this.Installed, (DataGridViewColumn) this.PubVer, (DataGridViewColumn) this.Status2, (DataGridViewColumn) this.Status, (DataGridViewColumn) this.StatusDescription); 104 | gridViewCellStyle2.Alignment = DataGridViewContentAlignment.MiddleLeft; 105 | gridViewCellStyle2.BackColor = SystemColors.Window; 106 | gridViewCellStyle2.Font = new Font("Microsoft Sans Serif", 8.25f, FontStyle.Regular, GraphicsUnit.Point, (byte) 0); 107 | gridViewCellStyle2.ForeColor = SystemColors.ControlText; 108 | gridViewCellStyle2.SelectionBackColor = Color.Thistle; 109 | gridViewCellStyle2.SelectionForeColor = SystemColors.ControlText; 110 | gridViewCellStyle2.WrapMode = DataGridViewTriState.False; 111 | this.addInGrid.DefaultCellStyle = gridViewCellStyle2; 112 | componentResourceManager.ApplyResources((object) this.addInGrid, "addInGrid"); 113 | this.addInGrid.Name = "addInGrid"; 114 | gridViewCellStyle3.SelectionBackColor = Color.Thistle; 115 | gridViewCellStyle3.SelectionForeColor = Color.Black; 116 | this.addInGrid.RowsDefaultCellStyle = gridViewCellStyle3; 117 | this.Item.DataPropertyName = "Item"; 118 | componentResourceManager.ApplyResources((object) this.Item, "Item"); 119 | this.Item.Name = "Item"; 120 | this.Host.DataPropertyName = "Host"; 121 | componentResourceManager.ApplyResources((object) this.Host, "Host"); 122 | this.Host.Name = "Host"; 123 | this.Running.DataPropertyName = "Running"; 124 | componentResourceManager.ApplyResources((object) this.Running, "Running"); 125 | this.Running.Name = "Running"; 126 | this.Loaded.DataPropertyName = "Loaded"; 127 | componentResourceManager.ApplyResources((object) this.Loaded, "Loaded"); 128 | this.Loaded.Name = "Loaded"; 129 | this.Type.DataPropertyName = "Type"; 130 | componentResourceManager.ApplyResources((object) this.Type, "Type"); 131 | this.Type.Name = "Type"; 132 | this.FriendlyName.DataPropertyName = "FriendlyName"; 133 | componentResourceManager.ApplyResources((object) this.FriendlyName, "FriendlyName"); 134 | this.FriendlyName.Name = "FriendlyName"; 135 | this.ProgID.DataPropertyName = "ProgID"; 136 | componentResourceManager.ApplyResources((object) this.ProgID, "ProgID"); 137 | this.ProgID.Name = "ProgID"; 138 | this.CLSID.DataPropertyName = "CLSID"; 139 | componentResourceManager.ApplyResources((object) this.CLSID, "CLSID"); 140 | this.CLSID.Name = "CLSID"; 141 | this.Manifest.DataPropertyName = "Manifest"; 142 | componentResourceManager.ApplyResources((object) this.Manifest, "Manifest"); 143 | this.Manifest.Name = "Manifest"; 144 | this.DllPath.DataPropertyName = "DllPath"; 145 | componentResourceManager.ApplyResources((object) this.DllPath, "DllPath"); 146 | this.DllPath.Name = "DllPath"; 147 | this.LoadBehavior.DataPropertyName = "LoadBehavior"; 148 | componentResourceManager.ApplyResources((object) this.LoadBehavior, "LoadBehavior"); 149 | this.LoadBehavior.Name = "LoadBehavior"; 150 | this.RegHive.DataPropertyName = "RegHive"; 151 | componentResourceManager.ApplyResources((object) this.RegHive, "RegHive"); 152 | this.RegHive.Name = "RegHive"; 153 | this.Wow6432.DataPropertyName = "Wow6432"; 154 | componentResourceManager.ApplyResources((object)this.Wow6432, "Wow6432"); 155 | this.Wow6432.Name = "Wow6432"; 156 | this.AssemblyName.DataPropertyName = "AssemblyName"; 157 | componentResourceManager.ApplyResources((object) this.AssemblyName, "AssemblyName"); 158 | this.AssemblyName.Name = "AssemblyName"; 159 | this.CLR_version.DataPropertyName = "CLR_version"; 160 | componentResourceManager.ApplyResources((object) this.CLR_version, "CLR_version"); 161 | this.CLR_version.Name = "CLR_version"; 162 | this.Exposed.DataPropertyName = "Exposed"; 163 | componentResourceManager.ApplyResources((object) this.Exposed, "Exposed"); 164 | this.Exposed.Name = "Exposed"; 165 | this.Interfaces.DataPropertyName = "Interfaces"; 166 | componentResourceManager.ApplyResources((object) this.Interfaces, "Interfaces"); 167 | this.Interfaces.Name = "Interfaces"; 168 | this.FormRegions.DataPropertyName = "FormRegions"; 169 | componentResourceManager.ApplyResources((object) this.FormRegions, "FormRegions"); 170 | this.FormRegions.Name = "FormRegions"; 171 | this.VSTOR.DataPropertyName = "VSTOR"; 172 | componentResourceManager.ApplyResources((object) this.VSTOR, "VSTOR"); 173 | this.VSTOR.Name = "VSTOR"; 174 | this.Installed.DataPropertyName = "Installed"; 175 | componentResourceManager.ApplyResources((object) this.Installed, "Installed"); 176 | this.Installed.Name = "Installed"; 177 | this.PubVer.DataPropertyName = "PubVer"; 178 | componentResourceManager.ApplyResources((object) this.PubVer, "PubVer"); 179 | this.PubVer.Name = "PubVer"; 180 | this.Status2.DataPropertyName = "Status2"; 181 | componentResourceManager.ApplyResources((object) this.Status2, "Status2"); 182 | this.Status2.Name = "Status2"; 183 | this.Status.DataPropertyName = "Status"; 184 | componentResourceManager.ApplyResources((object) this.Status, "Status"); 185 | this.Status.Name = "Status"; 186 | this.StatusDescription.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; 187 | this.StatusDescription.DataPropertyName = "StatusDescription"; 188 | componentResourceManager.ApplyResources((object) this.StatusDescription, "StatusDescription"); 189 | this.StatusDescription.Name = "StatusDescription"; 190 | componentResourceManager.ApplyResources((object) this, "$this"); 191 | this.AutoScaleMode = AutoScaleMode.Font; 192 | this.Controls.Add((Control) this.addInGrid); 193 | this.Name = "AddInGridControl"; 194 | ((ISupportInitialize) this.addInGrid).EndInit(); 195 | this.ResumeLayout(false); 196 | } 197 | } 198 | } 199 | -------------------------------------------------------------------------------- /AddInSpy/AddInSpy.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {5A0D7117-5711-4C74-A1D0-BC2D878BC093} 8 | WinExe 9 | AddInSpy 10 | AddInSpy 11 | v4.5 12 | 13 | 14 | 15 | 16 | 2.0 17 | 18 | publish\ 19 | true 20 | Disk 21 | false 22 | Foreground 23 | 7 24 | Days 25 | false 26 | false 27 | true 28 | 0 29 | 1.5.0.0 30 | false 31 | false 32 | true 33 | 34 | 35 | AnyCPU 36 | true 37 | full 38 | false 39 | bin\Debug\ 40 | DEBUG;TRACE 41 | prompt 42 | 4 43 | false 44 | 45 | 46 | AnyCPU 47 | pdbonly 48 | true 49 | bin\Release\ 50 | TRACE 51 | prompt 52 | 4 53 | false 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | UserControl 70 | 71 | 72 | UserControl 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | checkedcombocontrol.xaml 81 | Code 82 | 83 | 84 | helpwindow.xaml 85 | Code 86 | 87 | 88 | addinspywindow.xaml 89 | Code 90 | 91 | 92 | wfgridproxycontrol.xaml 93 | Code 94 | 95 | 96 | wfdataproxywindow.xaml 97 | Code 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | Designer 114 | 115 | 116 | 117 | 118 | 119 | MSBuild:Compile 120 | Designer 121 | MSBuild:Compile 122 | Designer 123 | 124 | 125 | MSBuild:Compile 126 | Designer 127 | MSBuild:Compile 128 | Designer 129 | 130 | 131 | MSBuild:Compile 132 | Designer 133 | MSBuild:Compile 134 | Designer 135 | 136 | 137 | MSBuild:Compile 138 | Designer 139 | MSBuild:Compile 140 | Designer 141 | 142 | 143 | MSBuild:Compile 144 | Designer 145 | MSBuild:Compile 146 | Designer 147 | 148 | 149 | 150 | 151 | {5daf28b6-078c-457d-9591-13dfe22c1ce3} 152 | AddInScanEngine 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | False 161 | .NET Framework 3.5 SP1 Client Profile 162 | false 163 | 164 | 165 | False 166 | .NET Framework 3.5 SP1 167 | true 168 | 169 | 170 | 171 | -------------------------------------------------------------------------------- /AddInSpy/App.cs: -------------------------------------------------------------------------------- 1 | // Decompiled with JetBrains decompiler 2 | // Type: AddInSpy.App 3 | // Assembly: AddInSpy, Version=1.5.0.0, Culture=neutral, PublicKeyToken=null 4 | // MVID: 348DAB18-01AB-4E5E-BAAD-807E7B0E72BC 5 | // Assembly location: C:\Users\Jozef\Downloads\AddInSpy\AddInSpy.exe 6 | 7 | using System; 8 | using System.Diagnostics; 9 | using System.Windows; 10 | 11 | namespace AddInSpy 12 | { 13 | public class App : Application 14 | { 15 | [DebuggerNonUserCode] 16 | public void InitializeComponent() 17 | { 18 | this.StartupUri = new Uri("AddInSpyWindow.xaml", UriKind.Relative); 19 | } 20 | 21 | [DebuggerNonUserCode] 22 | [STAThread] 23 | public static void Main() 24 | { 25 | App app = new App(); 26 | app.InitializeComponent(); 27 | app.Run(); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /AddInSpy/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.InteropServices; 3 | using System.Windows; 4 | 5 | [assembly: AssemblyTitle("AddInSpy")] 6 | [assembly: AssemblyDescription("")] 7 | [assembly: AssemblyConfiguration("")] 8 | [assembly: AssemblyCompany("Microsoft")] 9 | [assembly: AssemblyProduct("AddInSpy")] 10 | [assembly: AssemblyCopyright("Copyright © Microsoft 2008")] 11 | [assembly: AssemblyTrademark("")] 12 | [assembly: ComVisible(false)] 13 | [assembly: ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)] 14 | [assembly: AssemblyFileVersion("1.5.0.0")] 15 | [assembly: AssemblyVersion("1.5.0.0")] 16 | -------------------------------------------------------------------------------- /AddInSpy/CheckedComboClick.cs: -------------------------------------------------------------------------------- 1 | // Decompiled with JetBrains decompiler 2 | // Type: AddInSpy.CheckedComboClick 3 | // Assembly: AddInSpy, Version=1.5.0.0, Culture=neutral, PublicKeyToken=null 4 | // MVID: 348DAB18-01AB-4E5E-BAAD-807E7B0E72BC 5 | // Assembly location: C:\Users\Jozef\Downloads\AddInSpy\AddInSpy.exe 6 | 7 | namespace AddInSpy 8 | { 9 | public delegate void CheckedComboClick(object sender, CheckedComboEventArgs e); 10 | } 11 | -------------------------------------------------------------------------------- /AddInSpy/CheckedComboControl.xaml.cs: -------------------------------------------------------------------------------- 1 | // Decompiled with JetBrains decompiler 2 | // Type: AddInSpy.CheckedComboControl 3 | // Assembly: AddInSpy, Version=1.5.0.0, Culture=neutral, PublicKeyToken=null 4 | // MVID: 348DAB18-01AB-4E5E-BAAD-807E7B0E72BC 5 | // Assembly location: C:\Users\Jozef\Downloads\AddInSpy\AddInSpy.exe 6 | 7 | using AddInSpy.Properties; 8 | using System; 9 | using System.Collections; 10 | using System.Collections.Generic; 11 | using System.ComponentModel; 12 | using System.Diagnostics; 13 | using System.Windows; 14 | using System.Windows.Controls; 15 | using System.Windows.Controls.Primitives; 16 | using System.Windows.Markup; 17 | using AppResources = AddInSpy.Properties.Resources; 18 | 19 | namespace AddInSpy 20 | { 21 | public partial class CheckedComboControl : UserControl, IComponentConnector 22 | { 23 | public string[] CheckedItems 24 | { 25 | get 26 | { 27 | List list = new List(); 28 | foreach (object obj in (IEnumerable) this.Combo.Items) 29 | { 30 | int num; 31 | if (obj is CheckBox) 32 | { 33 | bool? isChecked = ((ToggleButton) obj).IsChecked; 34 | if (isChecked.HasValue) 35 | { 36 | isChecked = ((ToggleButton) obj).IsChecked; 37 | num = !isChecked.Value ? 1 : 0; 38 | goto label_6; 39 | } 40 | } 41 | num = 1; 42 | label_6: 43 | if (num == 0) 44 | list.Add(((ContentControl) obj).Content.ToString()); 45 | } 46 | return list.ToArray(); 47 | } 48 | } 49 | 50 | public event CheckedComboClick CheckedComboClickEvent; 51 | 52 | public CheckedComboControl() 53 | { 54 | this.InitializeComponent(); 55 | } 56 | 57 | internal void CheckBox_Click(object sender, RoutedEventArgs e) 58 | { 59 | List list = new List(); 60 | string str = string.Empty; 61 | CheckBox checkBox1 = (CheckBox) sender; 62 | if (checkBox1.Name == "checkAll") 63 | { 64 | for (int index = 1; index < this.Combo.Items.Count; ++index) 65 | ((ToggleButton) this.Combo.Items[index]).IsChecked = checkBox1.IsChecked; 66 | } 67 | for (int index = 1; index < this.Combo.Items.Count; ++index) 68 | { 69 | CheckBox checkBox2 = (CheckBox) this.Combo.Items[index]; 70 | bool? isChecked = checkBox2.IsChecked; 71 | int num; 72 | if (isChecked.HasValue) 73 | { 74 | isChecked = checkBox2.IsChecked; 75 | num = !isChecked.Value ? 1 : 0; 76 | } 77 | else 78 | num = 1; 79 | if (num == 0) 80 | { 81 | str = checkBox2.Content.ToString(); 82 | list.Add(str); 83 | } 84 | } 85 | if (list.Count == 0) 86 | this.Combo.Text = AppResources.OPTION_NONE; 87 | else if (list.Count == 1) 88 | this.Combo.Text = str; 89 | else if (list.Count == this.Combo.Items.Count - 1) 90 | this.Combo.Text = AppResources.OPTION_ALL; 91 | else if (list.Count > 1) 92 | this.Combo.Text = AppResources.OPTION_MULTIPLE; 93 | CheckedComboEventArgs e1 = new CheckedComboEventArgs(list.ToArray()); 94 | if (this.CheckedComboClickEvent == null) 95 | return; 96 | this.CheckedComboClickEvent((object) this, e1); 97 | } 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /AddInSpy/CheckedComboEventArgs.cs: -------------------------------------------------------------------------------- 1 | // Decompiled with JetBrains decompiler 2 | // Type: AddInSpy.CheckedComboEventArgs 3 | // Assembly: AddInSpy, Version=1.5.0.0, Culture=neutral, PublicKeyToken=null 4 | // MVID: 348DAB18-01AB-4E5E-BAAD-807E7B0E72BC 5 | // Assembly location: C:\Users\Jozef\Downloads\AddInSpy\AddInSpy.exe 6 | 7 | using System; 8 | 9 | namespace AddInSpy 10 | { 11 | public class CheckedComboEventArgs : EventArgs 12 | { 13 | public string[] Names; 14 | 15 | public CheckedComboEventArgs(string[] names) 16 | { 17 | this.Names = names; 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /AddInSpy/HelpWindow.xaml.cs: -------------------------------------------------------------------------------- 1 | // Decompiled with JetBrains decompiler 2 | // Type: AddInSpy.HelpWindow 3 | // Assembly: AddInSpy, Version=1.5.0.0, Culture=neutral, PublicKeyToken=null 4 | // MVID: 348DAB18-01AB-4E5E-BAAD-807E7B0E72BC 5 | // Assembly location: C:\Users\Jozef\Downloads\AddInSpy\AddInSpy.exe 6 | 7 | using AddInSpy.Properties; 8 | using System; 9 | using System.ComponentModel; 10 | using System.Diagnostics; 11 | using System.Windows; 12 | using System.Windows.Controls; 13 | using System.Windows.Markup; 14 | using System.Windows.Navigation; 15 | using AppResources = AddInSpy.Properties.Resources; 16 | 17 | namespace AddInSpy 18 | { 19 | public partial class HelpWindow : Window, IComponentConnector 20 | { 21 | private string helpFilePath; 22 | 23 | public HelpWindow() 24 | { 25 | this.InitializeComponent(); 26 | } 27 | 28 | public HelpWindow(string helpFilePath) 29 | : this() 30 | { 31 | this.helpFilePath = helpFilePath; 32 | this.InitializeUI(); 33 | this.webBrowser.Navigate(new Uri(helpFilePath)); 34 | this.webBrowser.Navigated += new NavigatedEventHandler(this.webBrowser_Navigated); 35 | } 36 | 37 | private void InitializeUI() 38 | { 39 | this.buttonHomeText.Text = AppResources.BUTTON_HOME; 40 | this.buttonHome.ToolTip = (object) AppResources.BUTTON_HOME_TOOLTIP; 41 | this.buttonBackText.Text = AppResources.BUTTON_BACK; 42 | this.buttonBack.ToolTip = (object) AppResources.BUTTON_BACK_TOOLTIP; 43 | this.buttonForwardText.Text = AppResources.BUTTON_FORWARD; 44 | this.buttonForward.ToolTip = (object) AppResources.BUTTON_FORWARD_TOOLTIP; 45 | } 46 | 47 | private void webBrowser_Navigated(object sender, NavigationEventArgs e) 48 | { 49 | this.buttonBack.IsEnabled = this.webBrowser.CanGoBack; 50 | this.buttonForward.IsEnabled = this.webBrowser.CanGoForward; 51 | } 52 | 53 | private void buttonHome_Click(object sender, RoutedEventArgs e) 54 | { 55 | this.webBrowser.Navigate(new Uri(this.helpFilePath)); 56 | } 57 | 58 | private void buttonBack_Click(object sender, RoutedEventArgs e) 59 | { 60 | this.webBrowser.GoBack(); 61 | } 62 | 63 | private void buttonForward_Click(object sender, RoutedEventArgs e) 64 | { 65 | this.webBrowser.GoForward(); 66 | } 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /AddInSpy/Properties/Resources.cs: -------------------------------------------------------------------------------- 1 | // Decompiled with JetBrains decompiler 2 | // Type: AddInSpy.Properties.Resources 3 | // Assembly: AddInSpy, Version=1.5.0.0, Culture=neutral, PublicKeyToken=null 4 | // MVID: 348DAB18-01AB-4E5E-BAAD-807E7B0E72BC 5 | // Assembly location: C:\Users\Jozef\Downloads\AddInSpy\AddInSpy.exe 6 | 7 | using System.CodeDom.Compiler; 8 | using System.ComponentModel; 9 | using System.Diagnostics; 10 | using System.Drawing; 11 | using System.Globalization; 12 | using System.Resources; 13 | using System.Runtime.CompilerServices; 14 | 15 | namespace AddInSpy.Properties 16 | { 17 | [DebuggerNonUserCode] 18 | [CompilerGenerated] 19 | [GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] 20 | internal class Resources 21 | { 22 | private static ResourceManager resourceMan; 23 | private static CultureInfo resourceCulture; 24 | 25 | [EditorBrowsable(EditorBrowsableState.Advanced)] 26 | internal static ResourceManager ResourceManager 27 | { 28 | get 29 | { 30 | if (object.ReferenceEquals((object) Resources.resourceMan, (object) null)) 31 | Resources.resourceMan = new ResourceManager("AddInSpy.Properties.Resources", typeof (Resources).Assembly); 32 | return Resources.resourceMan; 33 | } 34 | } 35 | 36 | [EditorBrowsable(EditorBrowsableState.Advanced)] 37 | internal static CultureInfo Culture 38 | { 39 | get 40 | { 41 | return Resources.resourceCulture; 42 | } 43 | set 44 | { 45 | Resources.resourceCulture = value; 46 | } 47 | } 48 | 49 | internal static Icon AddInSpy 50 | { 51 | get 52 | { 53 | return (Icon) Resources.ResourceManager.GetObject("AddInSpy", Resources.resourceCulture); 54 | } 55 | } 56 | 57 | internal static string BUTTON_BACK 58 | { 59 | get 60 | { 61 | return Resources.ResourceManager.GetString("BUTTON_BACK", Resources.resourceCulture); 62 | } 63 | } 64 | 65 | internal static string BUTTON_BACK_TOOLTIP 66 | { 67 | get 68 | { 69 | return Resources.ResourceManager.GetString("BUTTON_BACK_TOOLTIP", Resources.resourceCulture); 70 | } 71 | } 72 | 73 | internal static string BUTTON_FORWARD 74 | { 75 | get 76 | { 77 | return Resources.ResourceManager.GetString("BUTTON_FORWARD", Resources.resourceCulture); 78 | } 79 | } 80 | 81 | internal static string BUTTON_FORWARD_TOOLTIP 82 | { 83 | get 84 | { 85 | return Resources.ResourceManager.GetString("BUTTON_FORWARD_TOOLTIP", Resources.resourceCulture); 86 | } 87 | } 88 | 89 | internal static string BUTTON_HELP 90 | { 91 | get 92 | { 93 | return Resources.ResourceManager.GetString("BUTTON_HELP", Resources.resourceCulture); 94 | } 95 | } 96 | 97 | internal static string BUTTON_HELP_TOOLTIP 98 | { 99 | get 100 | { 101 | return Resources.ResourceManager.GetString("BUTTON_HELP_TOOLTIP", Resources.resourceCulture); 102 | } 103 | } 104 | 105 | internal static string BUTTON_HOME 106 | { 107 | get 108 | { 109 | return Resources.ResourceManager.GetString("BUTTON_HOME", Resources.resourceCulture); 110 | } 111 | } 112 | 113 | internal static string BUTTON_HOME_TOOLTIP 114 | { 115 | get 116 | { 117 | return Resources.ResourceManager.GetString("BUTTON_HOME_TOOLTIP", Resources.resourceCulture); 118 | } 119 | } 120 | 121 | internal static string BUTTON_REFRESH 122 | { 123 | get 124 | { 125 | return Resources.ResourceManager.GetString("BUTTON_REFRESH", Resources.resourceCulture); 126 | } 127 | } 128 | 129 | internal static string BUTTON_REFRESH_TOOLTIP 130 | { 131 | get 132 | { 133 | return Resources.ResourceManager.GetString("BUTTON_REFRESH_TOOLTIP", Resources.resourceCulture); 134 | } 135 | } 136 | 137 | internal static string BUTTON_REPORT 138 | { 139 | get 140 | { 141 | return Resources.ResourceManager.GetString("BUTTON_REPORT", Resources.resourceCulture); 142 | } 143 | } 144 | 145 | internal static string BUTTON_REPORT_TOOLTIP 146 | { 147 | get 148 | { 149 | return Resources.ResourceManager.GetString("BUTTON_REPORT_TOOLTIP", Resources.resourceCulture); 150 | } 151 | } 152 | 153 | internal static string CHECKBOX_AUTOREFRESH 154 | { 155 | get 156 | { 157 | return Resources.ResourceManager.GetString("CHECKBOX_AUTOREFRESH", Resources.resourceCulture); 158 | } 159 | } 160 | 161 | internal static string CHECKBOX_AUTOREFRESH_TOOLTIP 162 | { 163 | get 164 | { 165 | return Resources.ResourceManager.GetString("CHECKBOX_AUTOREFRESH_TOOLTIP", Resources.resourceCulture); 166 | } 167 | } 168 | 169 | internal static string CHECKEDCOMBO_HOSTS_TOOLTIP 170 | { 171 | get 172 | { 173 | return Resources.ResourceManager.GetString("CHECKEDCOMBO_HOSTS_TOOLTIP", Resources.resourceCulture); 174 | } 175 | } 176 | 177 | internal static string CHECKEDCOMBO_REPORT_TOOLTIP 178 | { 179 | get 180 | { 181 | return Resources.ResourceManager.GetString("CHECKEDCOMBO_REPORT_TOOLTIP", Resources.resourceCulture); 182 | } 183 | } 184 | 185 | internal static string CHECKEDCOMBO_SCANS_TOOLTIP 186 | { 187 | get 188 | { 189 | return Resources.ResourceManager.GetString("CHECKEDCOMBO_SCANS_TOOLTIP", Resources.resourceCulture); 190 | } 191 | } 192 | 193 | internal static Bitmap Help 194 | { 195 | get 196 | { 197 | return (Bitmap) Resources.ResourceManager.GetObject("Help", Resources.resourceCulture); 198 | } 199 | } 200 | 201 | internal static string HELPFILE_NOT_FOUND 202 | { 203 | get 204 | { 205 | return Resources.ResourceManager.GetString("HELPFILE_NOT_FOUND", Resources.resourceCulture); 206 | } 207 | } 208 | 209 | internal static Bitmap HomeHS 210 | { 211 | get 212 | { 213 | return (Bitmap) Resources.ResourceManager.GetObject("HomeHS", Resources.resourceCulture); 214 | } 215 | } 216 | 217 | internal static string LABEL_HOSTS 218 | { 219 | get 220 | { 221 | return Resources.ResourceManager.GetString("LABEL_HOSTS", Resources.resourceCulture); 222 | } 223 | } 224 | 225 | internal static string LABEL_MACHINE 226 | { 227 | get 228 | { 229 | return Resources.ResourceManager.GetString("LABEL_MACHINE", Resources.resourceCulture); 230 | } 231 | } 232 | 233 | internal static string LABEL_OS 234 | { 235 | get 236 | { 237 | return Resources.ResourceManager.GetString("LABEL_OS", Resources.resourceCulture); 238 | } 239 | } 240 | 241 | internal static string LABEL_REPORT 242 | { 243 | get 244 | { 245 | return Resources.ResourceManager.GetString("LABEL_REPORT", Resources.resourceCulture); 246 | } 247 | } 248 | 249 | internal static string LABEL_SCANS 250 | { 251 | get 252 | { 253 | return Resources.ResourceManager.GetString("LABEL_SCANS", Resources.resourceCulture); 254 | } 255 | } 256 | 257 | internal static string LABEL_USER 258 | { 259 | get 260 | { 261 | return Resources.ResourceManager.GetString("LABEL_USER", Resources.resourceCulture); 262 | } 263 | } 264 | 265 | internal static Bitmap NavBack 266 | { 267 | get 268 | { 269 | return (Bitmap) Resources.ResourceManager.GetObject("NavBack", Resources.resourceCulture); 270 | } 271 | } 272 | 273 | internal static Bitmap NavForward 274 | { 275 | get 276 | { 277 | return (Bitmap) Resources.ResourceManager.GetObject("NavForward", Resources.resourceCulture); 278 | } 279 | } 280 | 281 | internal static string OPTION_ALL 282 | { 283 | get 284 | { 285 | return Resources.ResourceManager.GetString("OPTION_ALL", Resources.resourceCulture); 286 | } 287 | } 288 | 289 | internal static string OPTION_MULTIPLE 290 | { 291 | get 292 | { 293 | return Resources.ResourceManager.GetString("OPTION_MULTIPLE", Resources.resourceCulture); 294 | } 295 | } 296 | 297 | internal static string OPTION_NONE 298 | { 299 | get 300 | { 301 | return Resources.ResourceManager.GetString("OPTION_NONE", Resources.resourceCulture); 302 | } 303 | } 304 | 305 | internal static Bitmap Refresh 306 | { 307 | get 308 | { 309 | return (Bitmap) Resources.ResourceManager.GetObject("Refresh", Resources.resourceCulture); 310 | } 311 | } 312 | 313 | internal static Bitmap Report 314 | { 315 | get 316 | { 317 | return (Bitmap) Resources.ResourceManager.GetObject("Report", Resources.resourceCulture); 318 | } 319 | } 320 | 321 | internal static string REPORT_ADDINS 322 | { 323 | get 324 | { 325 | return Resources.ResourceManager.GetString("REPORT_ADDINS", Resources.resourceCulture); 326 | } 327 | } 328 | 329 | internal static string REPORT_ADDINS_TOOLTIP 330 | { 331 | get 332 | { 333 | return Resources.ResourceManager.GetString("REPORT_ADDINS_TOOLTIP", Resources.resourceCulture); 334 | } 335 | } 336 | 337 | internal static string REPORT_CONTEXT 338 | { 339 | get 340 | { 341 | return Resources.ResourceManager.GetString("REPORT_CONTEXT", Resources.resourceCulture); 342 | } 343 | } 344 | 345 | internal static string REPORT_CONTEXT_TOOLTIP 346 | { 347 | get 348 | { 349 | return Resources.ResourceManager.GetString("REPORT_CONTEXT_TOOLTIP", Resources.resourceCulture); 350 | } 351 | } 352 | 353 | internal static string SCAN_DISABLED_ITEMS 354 | { 355 | get 356 | { 357 | return Resources.ResourceManager.GetString("SCAN_DISABLED_ITEMS", Resources.resourceCulture); 358 | } 359 | } 360 | 361 | internal static string SCAN_DISABLED_ITEMS_TOOLTIP 362 | { 363 | get 364 | { 365 | return Resources.ResourceManager.GetString("SCAN_DISABLED_ITEMS_TOOLTIP", Resources.resourceCulture); 366 | } 367 | } 368 | 369 | internal static string SCAN_FORMREGIONS 370 | { 371 | get 372 | { 373 | return Resources.ResourceManager.GetString("SCAN_FORMREGIONS", Resources.resourceCulture); 374 | } 375 | } 376 | 377 | internal static string SCAN_FORMREGIONS_TOOLTIP 378 | { 379 | get 380 | { 381 | return Resources.ResourceManager.GetString("SCAN_FORMREGIONS_TOOLTIP", Resources.resourceCulture); 382 | } 383 | } 384 | 385 | internal static string SCAN_HKCU 386 | { 387 | get 388 | { 389 | return Resources.ResourceManager.GetString("SCAN_HKCU", Resources.resourceCulture); 390 | } 391 | } 392 | 393 | internal static string SCAN_HKCU_TOOLTIP 394 | { 395 | get 396 | { 397 | return Resources.ResourceManager.GetString("SCAN_HKCU_TOOLTIP", Resources.resourceCulture); 398 | } 399 | } 400 | 401 | internal static string SCAN_HKLM 402 | { 403 | get 404 | { 405 | return Resources.ResourceManager.GetString("SCAN_HKLM", Resources.resourceCulture); 406 | } 407 | } 408 | 409 | internal static string SCAN_HKLM_TOOLTIP 410 | { 411 | get 412 | { 413 | return Resources.ResourceManager.GetString("SCAN_HKLM_TOOLTIP", Resources.resourceCulture); 414 | } 415 | } 416 | 417 | internal static string SCAN_MANAGED_INTERFACES 418 | { 419 | get 420 | { 421 | return Resources.ResourceManager.GetString("SCAN_MANAGED_INTERFACES", Resources.resourceCulture); 422 | } 423 | } 424 | 425 | internal static string SCAN_MANAGED_INTERFACES_TOOLTIP 426 | { 427 | get 428 | { 429 | return Resources.ResourceManager.GetString("SCAN_MANAGED_INTERFACES_TOOLTIP", Resources.resourceCulture); 430 | } 431 | } 432 | 433 | internal static string SCAN_NATIVE_INTERFACES 434 | { 435 | get 436 | { 437 | return Resources.ResourceManager.GetString("SCAN_NATIVE_INTERFACES", Resources.resourceCulture); 438 | } 439 | } 440 | 441 | internal static string SCAN_NATIVE_INTERFACES_TOOLTIP 442 | { 443 | get 444 | { 445 | return Resources.ResourceManager.GetString("SCAN_NATIVE_INTERFACES_TOOLTIP", Resources.resourceCulture); 446 | } 447 | } 448 | 449 | internal static string SCAN_REMOTE 450 | { 451 | get 452 | { 453 | return Resources.ResourceManager.GetString("SCAN_REMOTE", Resources.resourceCulture); 454 | } 455 | } 456 | 457 | internal static string SCAN_REMOTE_TOOLTIP 458 | { 459 | get 460 | { 461 | return Resources.ResourceManager.GetString("SCAN_REMOTE_TOOLTIP", Resources.resourceCulture); 462 | } 463 | } 464 | 465 | internal static string SINGLE_ROW_TABLE_ITEM_COLUMN 466 | { 467 | get 468 | { 469 | return Resources.ResourceManager.GetString("SINGLE_ROW_TABLE_ITEM_COLUMN", Resources.resourceCulture); 470 | } 471 | } 472 | 473 | internal static string SINGLE_ROW_TABLE_ITEM_NUMBER 474 | { 475 | get 476 | { 477 | return Resources.ResourceManager.GetString("SINGLE_ROW_TABLE_ITEM_NUMBER", Resources.resourceCulture); 478 | } 479 | } 480 | 481 | internal static string SINGLE_ROW_TABLE_VALUE_COLUMN 482 | { 483 | get 484 | { 485 | return Resources.ResourceManager.GetString("SINGLE_ROW_TABLE_VALUE_COLUMN", Resources.resourceCulture); 486 | } 487 | } 488 | 489 | internal static string STATUS_ADDIN_COUNT 490 | { 491 | get 492 | { 493 | return Resources.ResourceManager.GetString("STATUS_ADDIN_COUNT", Resources.resourceCulture); 494 | } 495 | } 496 | 497 | internal static string STATUS_ALERT 498 | { 499 | get 500 | { 501 | return Resources.ResourceManager.GetString("STATUS_ALERT", Resources.resourceCulture); 502 | } 503 | } 504 | 505 | internal static string STATUS_OK 506 | { 507 | get 508 | { 509 | return Resources.ResourceManager.GetString("STATUS_OK", Resources.resourceCulture); 510 | } 511 | } 512 | 513 | internal static string WARNING 514 | { 515 | get 516 | { 517 | return Resources.ResourceManager.GetString("WARNING", Resources.resourceCulture); 518 | } 519 | } 520 | 521 | internal Resources() 522 | { 523 | } 524 | } 525 | } 526 | -------------------------------------------------------------------------------- /AddInSpy/Properties/Settings.cs: -------------------------------------------------------------------------------- 1 | // Decompiled with JetBrains decompiler 2 | // Type: AddInSpy.Properties.Settings 3 | // Assembly: AddInSpy, Version=1.5.0.0, Culture=neutral, PublicKeyToken=null 4 | // MVID: 348DAB18-01AB-4E5E-BAAD-807E7B0E72BC 5 | // Assembly location: C:\Users\Jozef\Downloads\AddInSpy\AddInSpy.exe 6 | 7 | using System.CodeDom.Compiler; 8 | using System.Configuration; 9 | using System.Runtime.CompilerServices; 10 | 11 | namespace AddInSpy.Properties 12 | { 13 | [CompilerGenerated] 14 | [GeneratedCode("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] 15 | internal sealed class Settings : ApplicationSettingsBase 16 | { 17 | private static Settings defaultInstance = (Settings) SettingsBase.Synchronized((SettingsBase) new Settings()); 18 | 19 | public static Settings Default 20 | { 21 | get 22 | { 23 | Settings settings = Settings.defaultInstance; 24 | return settings; 25 | } 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /AddInSpy/WfDataProxyWindow.xaml.cs: -------------------------------------------------------------------------------- 1 | // Decompiled with JetBrains decompiler 2 | // Type: AddInSpy.WfDataProxyWindow 3 | // Assembly: AddInSpy, Version=1.5.0.0, Culture=neutral, PublicKeyToken=null 4 | // MVID: 348DAB18-01AB-4E5E-BAAD-807E7B0E72BC 5 | // Assembly location: C:\Users\Jozef\Downloads\AddInSpy\AddInSpy.exe 6 | 7 | using System; 8 | using System.ComponentModel; 9 | using System.Diagnostics; 10 | using System.Windows; 11 | using System.Windows.Forms.Integration; 12 | using System.Windows.Markup; 13 | 14 | namespace AddInSpy 15 | { 16 | public partial class WfDataProxyWindow : Window, IComponentConnector 17 | { 18 | public WfDataProxyWindow() 19 | { 20 | this.InitializeComponent(); 21 | } 22 | 23 | protected override void OnRenderSizeChanged(SizeChangedInfo sizeInfo) 24 | { 25 | base.OnRenderSizeChanged(sizeInfo); 26 | int num1 = 14; 27 | int num2 = 0; 28 | if (Environment.OSVersion.Version.Major == 5 && Environment.OSVersion.Version.Minor == 1) 29 | num2 = (int) (SystemParameters.HorizontalScrollBarHeight * 0.5); 30 | this.wfHost.Width = sizeInfo.NewSize.Width - 2.0 * SystemParameters.ResizeFrameVerticalBorderWidth + SystemParameters.VerticalScrollBarWidth - (double) num1; 31 | this.wfHost.Height = sizeInfo.NewSize.Height - 2.0 * SystemParameters.ResizeFrameHorizontalBorderHeight - SystemParameters.HorizontalScrollBarHeight - (double) num2; 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /AddInSpy/WfGridProxyControl.xaml.cs: -------------------------------------------------------------------------------- 1 | // Decompiled with JetBrains decompiler 2 | // Type: AddInSpy.WfGridProxyControl 3 | // Assembly: AddInSpy, Version=1.5.0.0, Culture=neutral, PublicKeyToken=null 4 | // MVID: 348DAB18-01AB-4E5E-BAAD-807E7B0E72BC 5 | // Assembly location: C:\Users\Jozef\Downloads\AddInSpy\AddInSpy.exe 6 | 7 | using System; 8 | using System.ComponentModel; 9 | using System.Diagnostics; 10 | using System.Windows; 11 | using System.Windows.Controls; 12 | using System.Windows.Forms.Integration; 13 | using System.Windows.Markup; 14 | 15 | namespace AddInSpy 16 | { 17 | public partial class WfGridProxyControl : UserControl, IComponentConnector 18 | { 19 | public WfGridProxyControl() 20 | { 21 | this.InitializeComponent(); 22 | } 23 | 24 | protected override void OnRenderSizeChanged(SizeChangedInfo sizeInfo) 25 | { 26 | base.OnRenderSizeChanged(sizeInfo); 27 | int num1 = 0; 28 | int num2 = 12; 29 | if (Environment.OSVersion.Version.Major == 5 && Environment.OSVersion.Version.Minor == 1) 30 | { 31 | num1 = (int) (SystemParameters.VerticalScrollBarWidth * 0.75); 32 | num2 = (int) (SystemParameters.HorizontalScrollBarHeight * 1.5); 33 | } 34 | this.wfHost.Width = sizeInfo.NewSize.Width - 2.0 * SystemParameters.ResizeFrameVerticalBorderWidth + SystemParameters.VerticalScrollBarWidth - (double) num1; 35 | this.wfHost.Height = sizeInfo.NewSize.Height - 2.0 * SystemParameters.ResizeFrameHorizontalBorderHeight - SystemParameters.HorizontalScrollBarHeight - (double) num2; 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /AddInSpy/addinspywindow.xaml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 67 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /AddInSpy/app.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /AddInSpy/checkedcombocontrol.xaml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /AddInSpy/helpwindow.xaml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 27 | 38 | 49 | 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /AddInSpy/images/addinspy.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NetOfficeFw/AddInSpy/1e1105a344110bcd291dc09b18338663e4374bb0/AddInSpy/images/addinspy.ico -------------------------------------------------------------------------------- /AddInSpy/images/help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NetOfficeFw/AddInSpy/1e1105a344110bcd291dc09b18338663e4374bb0/AddInSpy/images/help.png -------------------------------------------------------------------------------- /AddInSpy/images/homehs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NetOfficeFw/AddInSpy/1e1105a344110bcd291dc09b18338663e4374bb0/AddInSpy/images/homehs.png -------------------------------------------------------------------------------- /AddInSpy/images/navback.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NetOfficeFw/AddInSpy/1e1105a344110bcd291dc09b18338663e4374bb0/AddInSpy/images/navback.png -------------------------------------------------------------------------------- /AddInSpy/images/navforward.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NetOfficeFw/AddInSpy/1e1105a344110bcd291dc09b18338663e4374bb0/AddInSpy/images/navforward.png -------------------------------------------------------------------------------- /AddInSpy/images/refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NetOfficeFw/AddInSpy/1e1105a344110bcd291dc09b18338663e4374bb0/AddInSpy/images/refresh.png -------------------------------------------------------------------------------- /AddInSpy/images/report.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NetOfficeFw/AddInSpy/1e1105a344110bcd291dc09b18338663e4374bb0/AddInSpy/images/report.png -------------------------------------------------------------------------------- /AddInSpy/lib/AddInScanEngine.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NetOfficeFw/AddInSpy/1e1105a344110bcd291dc09b18338663e4374bb0/AddInSpy/lib/AddInScanEngine.dll -------------------------------------------------------------------------------- /AddInSpy/wfdataproxywindow.xaml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /AddInSpy/wfgridproxycontrol.xaml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Microsoft Public License (MS-PL) 2 | 3 | This license governs use of the accompanying software. If you use the software, you 4 | accept this license. If you do not accept the license, do not use the software. 5 | 6 | 1. Definitions 7 | The terms "reproduce," "reproduction," "derivative works," and "distribution" have the 8 | same meaning here as under U.S. copyright law. 9 | A "contribution" is the original software, or any additions or changes to the software. 10 | A "contributor" is any person that distributes its contribution under this license. 11 | "Licensed patents" are a contributor's patent claims that read directly on its contribution. 12 | 13 | 2. Grant of Rights 14 | (A) Copyright Grant- Subject to the terms of this license, including the license conditions 15 | and limitations in section 3, each contributor grants you a non-exclusive, worldwide, 16 | royalty-free copyright license to reproduce its contribution, prepare derivative works 17 | of its contribution, and distribute its contribution or any derivative works that you 18 | create. 19 | (B) Patent Grant- Subject to the terms of this license, including the license conditions 20 | and limitations in section 3, each contributor grants you a non-exclusive, worldwide, 21 | royalty-free license under its licensed patents to make, have made, use, sell, offer 22 | for sale, import, and/or otherwise dispose of its contribution in the software or 23 | derivative works of the contribution in the software. 24 | 25 | 3. Conditions and Limitations 26 | (A) No Trademark License- This license does not grant you rights to use any contributors'name, 27 | logo, or trademarks. 28 | (B) If you bring a patent claim against any contributor over patents that you claim are 29 | infringed by the software, your patent license from such contributor to the software 30 | ends automatically. 31 | (C) If you distribute any portion of the software, you must retain all copyright, patent, 32 | trademark, and attribution notices that are present in the software. 33 | (D) If you distribute any portion of the software in source code form, you may do so only 34 | under this license by including a complete copy of this license with your distribution. 35 | If you distribute any portion of the software in compiled or object code form, you may 36 | only do so under a license that complies with this license. 37 | (E) The software is licensed "as-is." You bear the risk of using it. The contributors 38 | give no express warranties, guarantees or conditions. You may have additional consumer 39 | rights under your local laws which this license cannot change. To the extent permitted 40 | under your local laws, the contributors exclude the implied warranties of merchantability, 41 | fitness for a particular purpose and non-infringement. 42 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AddInSpy 2 | 3 | AddInSpy is a diagnostic tool that discovers all registered Microsoft Office add-ins on a computer, and then reports as much information as it can about those add-ins. The tool works with all versions of all Microsoft Office applications that support COM add-ins, and all types of COM add-ins. 4 | 5 | Original AddInSpy tool was [developed by VSTO team][1] in Microsoft. 6 | 7 | This source code is based on disassembled version of original AddInSpy. 8 | 9 | ## Features 10 | 11 | **AddInSpy** is a standalone WPF application. **AddInSpy** is a simple front-end for the `AddInScanEngine.dll` – this DLL contains all the main scanning functionality. 12 | 13 | The scan engine scans the registry for Office add-ins, and reports the following details: 14 | 15 | * Whether the host application is running, and whether the add-in is loaded. 16 | * The type of each add-in: _VSTO_, _managed non-VSTO_, _native_. 17 | * `FriendlyName`, `ProgID`, `CLSID` and `LoadBehavior` of the add-in. 18 | * Manifest path, assembly path, and assembly strong name. 19 | * Registry hive (HKCU or HKLM) where the add-in is registered. 20 | * CLR version the add-in was built against. 21 | * VSTO runtime version used by the add-in. 22 | * Installed date, and publish version. 23 | * Which extensibility interfaces the add-in implements for Ribbon, custom taskpane, etc (including via VSTO wrappers). 24 | * Whether the add-in exposes itself for automation through the COMAddIns collection of the Office host application. 25 | * Whether the add-in is in the disabled items list for the current user, for each selected Office host application. 26 | * Whether the add-in is registered as the provider for any custom form regions. 27 | * Context information: machine name, user/domain name, OS details, VSTO environment variables. 28 | 29 | Reports can be displayed in a grid on-screen and can also be logged to an XML file for printing. 30 | 31 | 32 | ## License 33 | 34 | **AddInSpy** source code is licensed under [Microsoft Public License](LICENSE.txt) 35 | 36 | [1]: https://web.archive.org/web/20140411132835/http://blogs.msdn.com/b/vsto/archive/2008/10/02/diagnosing-troubleshooting-office-add-ins-with-addinspy-beth-massi.aspx 37 | -------------------------------------------------------------------------------- /appveyor.yml: -------------------------------------------------------------------------------- 1 | # 2 | # AddInSpy solution 3 | # AppVeyor configuration 4 | # 5 | 6 | version: 1.5.0.{build} 7 | 8 | branches: 9 | except: 10 | - gh-pages 11 | 12 | os: Windows Server 2012 13 | 14 | platform: Any CPU 15 | configuration: 16 | - Debug 17 | - Release 18 | 19 | build: 20 | project: AddInSpy.sln 21 | verbosity: detailed 22 | 23 | assembly_info: 24 | patch: true 25 | file: AssemblyInfo.* 26 | assembly_version: "{version}" 27 | assembly_file_version: "{version}" 28 | assembly_informational_version: "{version}" 29 | 30 | cache: 31 | - packages --------------------------------------------------------------------------------