Browse Source

Try to automatically enable access to http://127.0.0.1 in web wrapper if IE is in enhanced security mode.

Adam Ierymenko 10 years ago
parent
commit
63cea7d337
2 changed files with 70 additions and 0 deletions
  1. BIN
      ext/bin/win-ui-wrapper/ZeroTier One.exe
  2. 70 0
      windows/WebUIWrapper/Program.cs

BIN
ext/bin/win-ui-wrapper/ZeroTier One.exe


+ 70 - 0
windows/WebUIWrapper/Program.cs

@@ -3,17 +3,87 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Linq;
 using System.Threading.Tasks;
 using System.Threading.Tasks;
 using System.Windows.Forms;
 using System.Windows.Forms;
+using System.Runtime.InteropServices;
+using System.ComponentModel;
 
 
 namespace WebUIWrapper
 namespace WebUIWrapper
 {
 {
+    [ComImport, GuidAttribute("79EAC9EE-BAF9-11CE-8C82-00AA004BA90B"),
+    InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
+    public interface IInternetSecurityManager
+    {
+        [return: MarshalAs(UnmanagedType.I4)]
+        [PreserveSig]
+        int SetSecuritySite([In] IntPtr pSite);
+
+        [return: MarshalAs(UnmanagedType.I4)]
+        [PreserveSig]
+        int GetSecuritySite([Out] IntPtr pSite);
+
+        [return: MarshalAs(UnmanagedType.I4)]
+        [PreserveSig]
+        int MapUrlToZone([In, MarshalAs(UnmanagedType.LPWStr)] string pwszUrl, out UInt32 pdwZone, UInt32 dwFlags);
+
+        [return: MarshalAs(UnmanagedType.I4)]
+        [PreserveSig]
+        int GetSecurityId([MarshalAs(UnmanagedType.LPWStr)] string pwszUrl, [MarshalAs(UnmanagedType.LPArray)] byte[] pbSecurityId, ref UInt32 pcbSecurityId, uint dwReserved);
+
+        [return: MarshalAs(UnmanagedType.I4)]
+        [PreserveSig]
+        int ProcessUrlAction([In, MarshalAs(UnmanagedType.LPWStr)] string pwszUrl, UInt32 dwAction, out byte pPolicy, UInt32 cbPolicy, byte pContext, UInt32 cbContext, UInt32 dwFlags, UInt32 dwReserved);
+
+        [return: MarshalAs(UnmanagedType.I4)]
+        [PreserveSig]
+        int QueryCustomPolicy([In, MarshalAs(UnmanagedType.LPWStr)] string pwszUrl, ref Guid guidKey, ref byte ppPolicy, ref UInt32 pcbPolicy, ref byte pContext, UInt32 cbContext, UInt32 dwReserved);
+
+        [return: MarshalAs(UnmanagedType.I4)]
+        [PreserveSig]
+        int SetZoneMapping(UInt32 dwZone, [In, MarshalAs(UnmanagedType.LPWStr)] string lpszPattern, UInt32 dwFlags);
+
+        [return: MarshalAs(UnmanagedType.I4)]
+        [PreserveSig]
+        int GetZoneMappings(UInt32 dwZone, out UCOMIEnumString ppenumString, UInt32 dwFlags);
+    }
+
     static class Program
     static class Program
     {
     {
+        // constants from urlmon.h
+        public const UInt32 URLZONE_LOCAL_MACHINE = 0;
+        public const UInt32 URLZONE_INTRANET = URLZONE_LOCAL_MACHINE + 1;
+        public const UInt32 URLZONE_TRUSTED = URLZONE_INTRANET + 1;
+        public const UInt32 URLZONE_INTERNET = URLZONE_TRUSTED + 1;
+        public const UInt32 URLZONE_UNTRUSTED = URLZONE_INTERNET + 1;
+        public const UInt32 URLZONE_ESC_FLAG = 0x100;
+        public const UInt32 SZM_CREATE = 0;
+        public const UInt32 SZM_DELETE = 0x1;
+
+        public static Guid CLSID_InternetSecurityManager = new Guid("7b8a2d94-0ac9-11d1-896c-00c04fb6bfc4");
+        public static Guid IID_IInternetSecurityManager = new Guid("79eac9ee-baf9-11ce-8c82-00aa004ba90b");
+
         /// <summary>
         /// <summary>
         /// The main entry point for the application.
         /// The main entry point for the application.
         /// </summary>
         /// </summary>
         [STAThread]
         [STAThread]
         static void Main()
         static void Main()
         {
         {
+            try
+            {
+                Type t = Type.GetTypeFromCLSID(CLSID_InternetSecurityManager);
+                object securityManager = Activator.CreateInstance(t);
+                if (securityManager != null)
+                {
+                    IInternetSecurityManager ism = (IInternetSecurityManager)securityManager;
+                    ism.SetZoneMapping(URLZONE_TRUSTED, "http://127.0.0.1", SZM_CREATE);
+                    ism.SetZoneMapping(URLZONE_INTRANET, "http://127.0.0.1", SZM_CREATE);
+                    ism.SetZoneMapping(URLZONE_ESC_FLAG | URLZONE_TRUSTED, "http://127.0.0.1", SZM_CREATE);
+                    ism.SetZoneMapping(URLZONE_ESC_FLAG | URLZONE_INTRANET, "http://127.0.0.1", SZM_CREATE);
+                }
+            }
+            catch
+            {
+                // Okay to continue if adding URL to trusted zone doesn't work...
+            }
+
             Application.EnableVisualStyles();
             Application.EnableVisualStyles();
             Application.SetCompatibleTextRenderingDefault(false);
             Application.SetCompatibleTextRenderingDefault(false);
             Application.Run(new Form1());
             Application.Run(new Form1());