Exemplo n.º 1
0
        public static Model.Data.ProxySettings GetProxySettings()
        {
            var query   = GenQureyOption(true);
            var success = false;
            var result  = new Model.Data.ProxySettings();

            void action(IntPtr _listPtr, int _listSize)
            {
                var newSize = _listSize;

                success = InternetQueryOption(
                    IntPtr.Zero,
                    InternetOption.INTERNET_OPTION_PER_CONNECTION_OPTION,
                    _listPtr, ref newSize);

                if (success)
                {
                    InternetPerConnOptionList optList =
                        (InternetPerConnOptionList)Marshal.PtrToStructure(
                            _listPtr, typeof(InternetPerConnOptionList));
                    result = IntPtrToProxySettings(optList.options);
                }
            }

            SystemProxyHandler(GenQureyOption(true), action);
            if (!success)
            {
                SystemProxyHandler(GenQureyOption(false), action);
            }
            return(result);
        }
Exemplo n.º 2
0
        private void SaveSettings()
        {
            if (_orgList.dwSize != 0)
            {
                return;
            }
            var opts = new[]
            {
                new InternetPerConnOption {
                    dwOption = PerConnOption.INTERNET_PER_CONN_FLAGS
                },
                new InternetPerConnOption {
                    dwOption = PerConnOption.INTERNET_PER_CONN_AUTOCONFIG_URL
                }
            };
            var list = new InternetPerConnOptionList
            {
                pOptions      = MarshalOptions(opts),
                pszConnection = IntPtr.Zero,
                dwOptionCount = opts.Length,
                dwOptionError = 0
            };
            var listSize = list.dwSize = Marshal.SizeOf(list);

            if (InternetQueryOption(IntPtr.Zero, InternetOption.INTERNET_OPTION_PER_CONNECTION_OPTION,
                                    ref list, ref listSize))
            {
                _orgList = list;
            }
            AdjustLocalIntranetZoneFlags();
        }
Exemplo n.º 3
0
        public static bool GetProxyEnabled()
        {
            InternetPerConnOptionList request = new InternetPerConnOptionList();

            InternetPerConnOption[] options = new InternetPerConnOption[1];
            IntPtr optionsPtr = IntPtr.Zero;

            try
            {
                options[0].dwOption = OptionType.INTERNET_PER_CONN_FLAGS;

                request.dwSize        = Marshal.SizeOf(typeof(InternetPerConnOptionList));
                request.pszConnection = IntPtr.Zero;
                request.dwOptionCount = options.Length;
                request.dwOptionError = 0;

                int optionSize = Marshal.SizeOf(options[0]);

                optionsPtr = Marshal.AllocCoTaskMem(optionSize * options.Length);

                if (optionsPtr == IntPtr.Zero)
                {
                    return(false);
                }

                for (int i = 0; i < options.Length; i++)
                {
                    IntPtr optionPtr = new IntPtr(optionsPtr.ToInt32() + (i * optionSize));
                    Marshal.StructureToPtr(options[i], optionPtr, false);
                }

                request.pOptions = optionsPtr;

                int requestLength = request.dwSize;

                bool result = NativeMethods.InternetQueryOption(IntPtr.Zero, InternetOptionActions.INTERNET_OPTION_PER_CONNECTION_OPTION, ref request, ref requestLength);

                if (!result)
                {
                    throw new Win32Exception(Marshal.GetLastWin32Error());
                }
                else
                {
                    for (int i = 0; i < options.Length; i++)
                    {
                        IntPtr opt = new IntPtr(optionsPtr.ToInt32() + (i * optionSize));
                        options[i] = (InternetPerConnOption)Marshal.PtrToStructure(opt, typeof(InternetPerConnOption));
                    }

                    return(((ProxyFlags)options[0].Value.dwValue & ProxyFlags.PROXY_TYPE_PROXY) == ProxyFlags.PROXY_TYPE_PROXY);
                }
            }
            finally
            {
                if (optionsPtr == IntPtr.Zero)
                {
                    Marshal.FreeCoTaskMem(optionsPtr);
                }
            }
        }
Exemplo n.º 4
0
        public static bool SetProxy(string strProxy, string exceptions)
        {
            InternetPerConnOptionList list = new InternetPerConnOptionList();

            int optionCount = string.IsNullOrEmpty(strProxy) ? 1 : (string.IsNullOrEmpty(exceptions) ? 2 : 3);

            InternetConnectionOption[] options = new InternetConnectionOption[optionCount];
            //use  a proxy server
            options[0].M_Option      = PerConnOption.INTERNET_PER_CONN_FLAGS;
            options[0].M_Value.M_Int = (int)((optionCount < 2) ? PerConnFlags.PROXY_TYPE_DIRECT :
                                             (PerConnFlags.PROXY_TYPE_DIRECT | PerConnFlags.PROXY_TYPE_PROXY));
            //use this proxy server
            if (optionCount > 1)
            {
                options[1].M_Option            = PerConnOption.INTERNET_PER_CONN_PROXY_SERVE;
                options[1].M_Value.M_StringPtr = Marshal.StringToHGlobalAuto(strProxy);
                //except for these addresses
                if (optionCount > 2)
                {
                    options[2].M_Option            = PerConnOption.INTERNET_PER_CONN_PROXY_BYPASS;
                    options[2].M_Value.M_StringPtr = Marshal.StringToHGlobalAuto(exceptions);
                }
            }

            //default stuff
            list.DwSize        = Marshal.SizeOf(list);
            list.SzConnection  = IntPtr.Zero;
            list.DwOptionCount = options.Length;
            list.DwOptionError = 0;

            int optSize = Marshal.SizeOf(typeof(InternetConnectionOption));
            //make a pointer out of all that
            IntPtr optionPtr = Marshal.AllocCoTaskMem(optSize * options.Length);

            //copy the array  over into that  spot in memory
            for (int i = 0; i < options.Length; ++i)
            {
                IntPtr opt = new IntPtr(optionPtr.ToInt32() + (i * optSize));
                Marshal.StructureToPtr(options[i], opt, false);
            }
            list.Options = optionPtr;

            //and then make a pointer out of the whole list
            IntPtr ipcoListPtr = Marshal.AllocCoTaskMem((Int32)list.DwSize);

            Marshal.StructureToPtr(list, ipcoListPtr, false);

            //finally,call the api mehod
            int returnvalue = NativeMethods.InternetSetOption(IntPtr.Zero,
                                                              InternetOption.INTERNET_OPTION_PER_CONNECTION_OPTION,
                                                              ipcoListPtr, list.DwSize) ? -1 : 0;

            if (returnvalue == 0)
            {
                //get the error codes,they might be helpful
                throw new Win32Exception(Marshal.GetLastWin32Error());
            }

            return(returnvalue < 0);
        }
Exemplo n.º 5
0
        internal static void SystemProxyHandler(InternetConnectionOption[] options, Action <IntPtr, int> action)
        {
            InternetPerConnOptionList list = new InternetPerConnOptionList();

            // default stuff
            list.dwSize        = Marshal.SizeOf(list);
            list.szConnection  = IntPtr.Zero;
            list.dwOptionCount = options.Length;
            list.dwOptionError = 0;

            int optSize = Marshal.SizeOf(typeof(InternetConnectionOption));
            // make a pointer out of all that ...
            IntPtr optionsPtr = Marshal.AllocCoTaskMem(optSize * options.Length);

            // copy the array over into that spot in memory ...
            for (int i = 0; i < options.Length; ++i)
            {
                IntPtr opt = new IntPtr(optionsPtr.ToInt64() + (i * optSize));
                Marshal.StructureToPtr(options[i], opt, false);
            }

            list.options = optionsPtr;

            // and then make a pointer out of the whole list
            IntPtr ipcoListPtr = Marshal.AllocCoTaskMem((Int32)list.dwSize);

            Marshal.StructureToPtr(list, ipcoListPtr, false);

            // and finally, call the API method!
            action(ipcoListPtr, list.dwSize);

            // FREE the data ASAP
            Marshal.FreeCoTaskMem(optionsPtr);
            Marshal.FreeCoTaskMem(ipcoListPtr);
        }
Exemplo n.º 6
0
    public static bool UnsetProxy()
    {
        InternetPerConnOptionList request = new InternetPerConnOptionList();

        InternetPerConnOption[] options = new InternetPerConnOption[3];
        int    optionSize = 0;
        IntPtr optionsPtr = IntPtr.Zero;

        try
        {
            options[0].dwOption      = OptionType.INTERNET_PER_CONN_FLAGS;
            options[0].Value.dwValue = (int)ProxyFlags.PROXY_TYPE_DIRECT;
            options[1].dwOption      = OptionType.INTERNET_PER_CONN_PROXY_SERVER;
            options[1].Value.szValue = IntPtr.Zero;
            options[2].dwOption      = OptionType.INTERNET_PER_CONN_PROXY_BYPASS;
            options[2].Value.szValue = IntPtr.Zero;
            optionSize = Marshal.SizeOf(typeof(InternetPerConnOption));
            optionsPtr = Marshal.AllocCoTaskMem(optionSize * options.Length);
            if (optionsPtr == IntPtr.Zero)
            {
                return(false);
            }
            for (int i = 0; i < options.Length; ++i)
            {
                IntPtr optionPtr = new IntPtr(optionsPtr.ToInt32() + (i * optionSize));
                Marshal.StructureToPtr(options[i], optionPtr, false);
            }
            request.pszConnection = IntPtr.Zero;
            request.dwSize        = Marshal.SizeOf(typeof(InternetPerConnOptionList));
            request.dwOptionCount = options.Length;
            request.dwOptionError = 0;
            request.pOptions      = optionsPtr;
            int requestLength = request.dwSize;
            if (NativeMethods.InternetSetOption(IntPtr.Zero, InternetOptionActions.INTERNET_OPTION_PER_CONNECTION_OPTION, ref request, requestLength))
            {
                NativeMethods.InternetSetOption(IntPtr.Zero, InternetOptionActions.INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0);
                NativeMethods.InternetSetOption(IntPtr.Zero, InternetOptionActions.INTERNET_OPTION_REFRESH, IntPtr.Zero, 0);
                return(true);
            }
            else
            {
                return(false);
            }
        }
        finally
        {
            if (optionsPtr != IntPtr.Zero)
            {
                Marshal.FreeCoTaskMem(optionsPtr);
            }
            for (int i = 1; i < options.Length; i++)
            {
                if (options[i].Value.szValue != IntPtr.Zero)
                {
                    Marshal.FreeHGlobal(options[i].Value.szValue);
                }
            }
        }
    }
Exemplo n.º 7
0
 private static bool ProxyEnable(WebProxy wProxy)
 {
     try
     {
         bool   bReturn = true;
         string sPrx    = wProxy.Address.DnsSafeHost + ":" + wProxy.Address.Port;
         InternetPerConnOptionList list = new InternetPerConnOptionList();
         int dwBufSize = Marshal.SizeOf(list);
         INTERNET_PER_CONN_OPTION[] opts = new INTERNET_PER_CONN_OPTION[3];
         int opt_size = Marshal.SizeOf(opts[0]);
         list.dwSize        = dwBufSize;
         list.pszConnection = String.Empty;
         list.dwOptionCount = 3;
         //set flags
         opts[0].dwOption = (int)MyOptions.InternetPerConnFlags;
         //opts[0].dwValue = (int)(Options.PROXY_TYPE_DIRECT | Options.PROXY_TYPE_PROXY);
         //opts[0].dwValue = (int)(MyOptions.PROXY_TYPE_DIRECT | MyOptions.PROXY_TYPE_PROXY);
         opts[0].dwValue = (int)(Flags.PROXY_TYPE_PROXY);
         //set proxyname
         opts[1].dwOption = (int)MyOptions.InternetPerConnProxyServer;
         //opts[1].pszValue = Marshal.StringToHGlobalAnsi("http://" + sPrx);
         opts[1].pszValue = Marshal.StringToHGlobalAnsi(sPrx);
         //opts[1].pszValue = Marshal.StringToCoTaskMemAnsi("http=http://" + sPrx + "; ftp=ftp://" + sPrx + "; https=https://" + sPrx + "; gopher=gopher://" + sPrx + "; socks=socks://" + sPrx);
         //set override
         opts[2].dwOption = (int)MyOptions.InternetPerConnProxyBypass;
         opts[2].pszValue = Marshal.StringToHGlobalAnsi("localhost");
         //opts[2].pszValue = Marshal.StringToCoTaskMemAnsi("<local>localhost; rado.ra-host.com");
         byte[] b = new byte[3 * opt_size];
         opts[0].GetBytes().CopyTo(b, 0);
         opts[1].GetBytes().CopyTo(b, opt_size);
         opts[2].GetBytes().CopyTo(b, 2 * opt_size);
         IntPtr ptr = Marshal.AllocCoTaskMem(3 * opt_size);
         Marshal.Copy(b, 0, ptr, 3 * opt_size);
         list.pOptions = ptr;
         //set the options on the connection
         bReturn = InternetSetOption(IntPtr.Zero, (int)MyOptions.InternetOptionPerConnectionOption, list,
                                     dwBufSize);
         if (!bReturn)
         {
             Console.WriteLine(GetLastError());
         }
         //Flush the current IE proxy setting
         bReturn = InternetSetOption(IntPtr.Zero, (int)MyOptions.InternetOptionRefresh, IntPtr.Zero, 0);
         if (!bReturn)
         {
             Console.WriteLine(GetLastError());
         }
         Marshal.FreeHGlobal(opts[1].pszValue);
         Marshal.FreeHGlobal(opts[2].pszValue);
         Marshal.FreeCoTaskMem(ptr);
         return(bReturn);
     }
     catch (Exception)
     {
         throw;
     }
 }
Exemplo n.º 8
0
            static bool SetSingleProxy(string connection, string proxy = "", int flags = 0)
            {
                var list = new InternetPerConnOptionList();

                var options = new InternetConnectionOption[2];

                // USE a proxy server ...
                options[0]               = new InternetConnectionOption();
                options[0].m_Option      = PerConnOption.INTERNET_PER_CONN_FLAGS;
                options[0].m_Value.m_Int = flags != 0 ? flags : (int)(String.IsNullOrEmpty(proxy) ? PerConnFlags.PROXY_TYPE_DIRECT : (PerConnFlags.PROXY_TYPE_DIRECT | PerConnFlags.PROXY_TYPE_PROXY));
                // use THIS proxy server
                options[1]                     = new InternetConnectionOption();
                options[1].m_Option            = PerConnOption.INTERNET_PER_CONN_PROXY_SERVER;
                options[1].m_Value.m_StringPtr = Marshal.StringToHGlobalAuto(proxy);

                // default stuff
                list.dwSize        = Marshal.SizeOf(list);
                list.pszConnection = Marshal.StringToHGlobalAuto(connection);
                list.dwOptionCount = options.Length;
                list.dwOptionError = 0;

                var optSize = Marshal.SizeOf(typeof(InternetConnectionOption));
                // make a pointer out of all that ...
                var optionsPtr = Marshal.AllocCoTaskMem(optSize * options.Length);

                // copy the array over into that spot in memory ...
                for (var i = 0; i < options.Length; i++)
                {
                    var opt = new IntPtr(optionsPtr.ToInt64() + (i * optSize));
                    Marshal.StructureToPtr(options[i], opt, false);
                }

                list.pOptions = optionsPtr;

                // and then make a pointer out of the whole list
                var ipcoListPtr = Marshal.AllocCoTaskMem((Int32)list.dwSize);

                Marshal.StructureToPtr(list, ipcoListPtr, false);

                // and finally, call the API method!
                var success = NativeMethods.InternetSetOption(IntPtr.Zero, (int)InternetOption.INTERNET_OPTION_PER_CONNECTION_OPTION, ipcoListPtr, list.dwSize);

                // FREE the data ASAP
                Marshal.FreeCoTaskMem(optionsPtr);
                Marshal.FreeCoTaskMem(ipcoListPtr);

                return(success);
            }
Exemplo n.º 9
0
        private static void InternetSetOption(InternetPerConnOption[] options)
        {
            InternetPerConnOptionList internetPerConnOptionList = default(InternetPerConnOptionList);

            internetPerConnOptionList.Connection  = null;
            internetPerConnOptionList.OptionCount = options.Length;
            internetPerConnOptionList.OptionError = 0;

            int optionsSize = 0;

            for (int i = 0; i < options.Length; i++)
            {
                optionsSize += Marshal.SizeOf(options[i]);
            }
            IntPtr optionsPtr = Marshal.AllocCoTaskMem(optionsSize);
            IntPtr optionPtr  = optionsPtr;

            for (int j = 0; j < options.Length; j++)
            {
                Marshal.StructureToPtr(options[j], optionPtr, false);
                optionPtr = optionPtr + Marshal.SizeOf(options[j]);
            }

            internetPerConnOptionList.pOptions = optionsPtr;
            internetPerConnOptionList.Size     = Marshal.SizeOf(internetPerConnOptionList);

            IntPtr listPtr = Marshal.AllocCoTaskMem(internetPerConnOptionList.Size);

            Marshal.StructureToPtr(internetPerConnOptionList, listPtr, false);
            bool flag = InternetSetOption(IntPtr.Zero, 75, listPtr, internetPerConnOptionList.Size);

            if (flag == true)
            {
                InternetSetOption(IntPtr.Zero, 95, IntPtr.Zero, 0);
            }

            for (int j = 0; j < options.Length; j++)
            {
                Marshal.FreeHGlobal(options[j].Value.pszValue);
            }
            Marshal.FreeCoTaskMem(optionsPtr);
            Marshal.FreeCoTaskMem(listPtr);
        }
Exemplo n.º 10
0
        public void SetAutoConfigUrl(string url)
        {
            SaveSettings();
            var flagValue = new InternetPerConnOptionValue {
                dwValue = (int)PerConnFlags.PROXY_TYPE_AUTO_PROXY_URL
            };
            var urlValue = new InternetPerConnOptionValue {
                pszValue = Marshal.StringToHGlobalAuto(url)
            };

            if (_initialUri == null)
            {
                Uri.TryCreate(url, UriKind.Absolute, out _initialUri);
            }
            var opts = new[]
            {
                new InternetPerConnOption {
                    dwOption = PerConnOption.INTERNET_PER_CONN_FLAGS, Value = flagValue
                },
                new InternetPerConnOption {
                    dwOption = PerConnOption.INTERNET_PER_CONN_AUTOCONFIG_URL, Value = urlValue
                }
            };
            var list = new InternetPerConnOptionList
            {
                pOptions      = MarshalOptions(opts),
                pszConnection = IntPtr.Zero,
                dwOptionCount = opts.Length,
                dwOptionError = 0
            };
            var listSize = list.dwSize = Marshal.SizeOf(list);
            var listBuff = Marshal.AllocCoTaskMem(listSize);

            Marshal.StructureToPtr(list, listBuff, false);
            InternetSetOption(IntPtr.Zero, InternetOption.INTERNET_OPTION_PER_CONNECTION_OPTION, listBuff, listSize);
            Refresh();

            Marshal.FreeHGlobal(urlValue.pszValue);
            Marshal.FreeCoTaskMem(list.pOptions);
            Marshal.FreeCoTaskMem(listBuff);
        }
Exemplo n.º 11
0
            static bool SetSingleProxy(string connection, string proxy = "", int flags = 0) {
                var list = new InternetPerConnOptionList();

                var options = new InternetConnectionOption[2];
                // USE a proxy server ...
                options[0] = new InternetConnectionOption();
                options[0].m_Option = PerConnOption.INTERNET_PER_CONN_FLAGS;
                options[0].m_Value.m_Int = flags != 0 ? flags : (int)(String.IsNullOrEmpty(proxy) ? PerConnFlags.PROXY_TYPE_DIRECT : (PerConnFlags.PROXY_TYPE_DIRECT | PerConnFlags.PROXY_TYPE_PROXY));
                // use THIS proxy server
                options[1] = new InternetConnectionOption();
                options[1].m_Option = PerConnOption.INTERNET_PER_CONN_PROXY_SERVER;
                options[1].m_Value.m_StringPtr = Marshal.StringToHGlobalAuto(proxy);

                // default stuff
                list.dwSize = Marshal.SizeOf(list);
                list.pszConnection = Marshal.StringToHGlobalAuto(connection);
                list.dwOptionCount = options.Length;
                list.dwOptionError = 0;

                var optSize = Marshal.SizeOf(typeof(InternetConnectionOption));
                // make a pointer out of all that ...
                var optionsPtr = Marshal.AllocCoTaskMem(optSize * options.Length);
                // copy the array over into that spot in memory ...
                for (var i = 0; i < options.Length; i++) {
                    var opt = new IntPtr(optionsPtr.ToInt64() + (i * optSize));
                    Marshal.StructureToPtr(options[i], opt, false);
                }

                list.pOptions = optionsPtr;

                // and then make a pointer out of the whole list
                var ipcoListPtr = Marshal.AllocCoTaskMem((Int32)list.dwSize);
                Marshal.StructureToPtr(list, ipcoListPtr, false);

                // and finally, call the API method!
                var success = NativeMethods.InternetSetOption(IntPtr.Zero, (int)InternetOption.INTERNET_OPTION_PER_CONNECTION_OPTION, ipcoListPtr, list.dwSize);

                // FREE the data ASAP
                Marshal.FreeCoTaskMem(optionsPtr);
                Marshal.FreeCoTaskMem(ipcoListPtr);

                return success;
            }
        public static bool SetProxy(string strProxy, string exceptions, int type)
        {
            InternetPerConnOptionList list = new InternetPerConnOptionList();

            int optionCount = 1;

            if (type == 1)
            {
                optionCount = 1;
            }
            else if (type == 2 || type == 4)
            {
                optionCount = Utils.IsNullOrEmpty(exceptions) ? 2 : 3;
            }

            int           m_Int    = (int)PerConnFlags.PROXY_TYPE_DIRECT;
            PerConnOption m_Option = PerConnOption.INTERNET_PER_CONN_FLAGS;

            if (type == 2)
            {
                m_Int    = (int)(PerConnFlags.PROXY_TYPE_DIRECT | PerConnFlags.PROXY_TYPE_PROXY);
                m_Option = PerConnOption.INTERNET_PER_CONN_PROXY_SERVER;
            }
            else if (type == 4)
            {
                m_Int    = (int)(PerConnFlags.PROXY_TYPE_DIRECT | PerConnFlags.PROXY_TYPE_AUTO_PROXY_URL);
                m_Option = PerConnOption.INTERNET_PER_CONN_AUTOCONFIG_URL;
            }

            //int optionCount = Utils.IsNullOrEmpty(strProxy) ? 1 : (Utils.IsNullOrEmpty(exceptions) ? 2 : 3);
            InternetConnectionOption[] options = new InternetConnectionOption[optionCount];
            // USE a proxy server ...
            options[0].m_Option = PerConnOption.INTERNET_PER_CONN_FLAGS;
            //options[0].m_Value.m_Int = (int)((optionCount < 2) ? PerConnFlags.PROXY_TYPE_DIRECT : (PerConnFlags.PROXY_TYPE_DIRECT | PerConnFlags.PROXY_TYPE_PROXY));
            options[0].m_Value.m_Int = m_Int;
            // use THIS proxy server
            if (optionCount > 1)
            {
                options[1].m_Option            = m_Option;
                options[1].m_Value.m_StringPtr = Marshal.StringToHGlobalAuto(strProxy);
                // except for these addresses ...
                if (optionCount > 2)
                {
                    options[2].m_Option            = PerConnOption.INTERNET_PER_CONN_PROXY_BYPASS;
                    options[2].m_Value.m_StringPtr = Marshal.StringToHGlobalAuto(exceptions);
                }
            }

            // default stuff
            list.dwSize        = Marshal.SizeOf(list);
            list.szConnection  = IntPtr.Zero;
            list.dwOptionCount = options.Length;
            list.dwOptionError = 0;


            int optSize = Marshal.SizeOf(typeof(InternetConnectionOption));
            // make a pointer out of all that ...
            IntPtr optionsPtr = Marshal.AllocCoTaskMem(optSize * options.Length);

            // copy the array over into that spot in memory ...
            for (int i = 0; i < options.Length; ++i)
            {
                if (Environment.Is64BitOperatingSystem)
                {
                    IntPtr opt = new IntPtr(optionsPtr.ToInt64() + (i * optSize));
                    Marshal.StructureToPtr(options[i], opt, false);
                }
                else
                {
                    IntPtr opt = new IntPtr(optionsPtr.ToInt32() + (i * optSize));
                    Marshal.StructureToPtr(options[i], opt, false);
                }
            }

            list.options = optionsPtr;

            // and then make a pointer out of the whole list
            IntPtr ipcoListPtr = Marshal.AllocCoTaskMem((int)list.dwSize);

            Marshal.StructureToPtr(list, ipcoListPtr, false);

            // and finally, call the API method!
            int returnvalue = NativeMethods.InternetSetOption(IntPtr.Zero,
                                                              InternetOption.INTERNET_OPTION_PER_CONNECTION_OPTION,
                                                              ipcoListPtr, list.dwSize) ? -1 : 0;

            if (returnvalue == 0)
            {  // get the error codes, they might be helpful
                returnvalue = Marshal.GetLastWin32Error();
            }
            // FREE the data ASAP
            Marshal.FreeCoTaskMem(optionsPtr);
            Marshal.FreeCoTaskMem(ipcoListPtr);
            if (returnvalue > 0)
            {  // throw the error codes, they might be helpful
               //throw new Win32Exception(Marshal.GetLastWin32Error());
            }

            return(returnvalue < 0);
        }
Exemplo n.º 13
0
        /// <summary>
        /// Sets proxy.
        /// </summary>
        /// <param name="EnableProxy">If true enables proxy, false disables.</param>
        /// <param name="EnableAutoDetect">If true enables Auto-Detect setting, false disables.</param>
        /// <param name="ProxyAddress">If you want a specific proxy server</param>
        /// <param name="ProxyExceptions">Exceptions if you need it</param>
        /// <param name="AutoConfigURL">If you want an autoconfig URL i.e. PAC file</param>
        /// <param name="ConnectionName">If you want to apply Proxy Setting to dial up connection, specify name here.</param>
        /// <returns></returns>
        public static bool SetProxy(bool EnableProxy, bool EnableAutoDetect, string ProxyAddress, string ProxyExceptions, string AutoConfigURL, string ConnectionName = "")
        {
            // use this to store our proxy settings
            InternetPerConnOptionList list = new InternetPerConnOptionList();

            // get count of number of options we need...starting with a base of 2.
            int optionCount = 1;

            // count out how many options we are going to need to set...
            if (EnableProxy)
            {
                optionCount++;
            }
            if (EnableAutoDetect)
            {
                optionCount++;
            }
            if (!string.IsNullOrEmpty(ProxyExceptions))
            {
                optionCount++;
            }
            if (!string.IsNullOrEmpty(AutoConfigURL))
            {
                optionCount++;
            }

            // we'll use this array to store our options
            InternetConnectionOption[] options = new InternetConnectionOption[optionCount];

            // a counter to identify what option we are setting at the moment...there will always be option [0] at a minimum...
            int optionCurrent = 1;

            // our per connection flags get stored here...
            options[0].m_Option = PerConnOption.INTERNET_PER_CONN_FLAGS;

            // enable or disable proxy?
            if (EnableProxy)
            {
                options[1].m_Option            = PerConnOption.INTERNET_PER_CONN_PROXY_SERVER;
                options[1].m_Value.m_StringPtr = Marshal.StringToHGlobalAuto(ProxyAddress);
                options[0].m_Value.m_Int       = (int)PerConnFlags.PROXY_TYPE_PROXY;

                optionCurrent++;
            }
            else
            {
                options[0].m_Value.m_Int = (int)PerConnFlags.PROXY_TYPE_DIRECT;
            }
//            options[optionCurrent].m_Option = PerConnOption.INTERNET_PER_CONN_FLAGS;
//          optionCurrent++;

            // configure proxy exceptions...use <local> to bypass proxy for local addresses...
            if (!string.IsNullOrEmpty(ProxyExceptions))
            {
                options[optionCurrent].m_Option            = PerConnOption.INTERNET_PER_CONN_PROXY_BYPASS;
                options[optionCurrent].m_Value.m_StringPtr = Marshal.StringToHGlobalUni(ProxyExceptions);
                optionCurrent++;
            }

            // configure auto config URLw
            if (!string.IsNullOrEmpty(AutoConfigURL))
            {
                options[optionCurrent].m_Option            = PerConnOption.INTERNET_PER_CONN_AUTOCONFIG_URL;
                options[optionCurrent].m_Value.m_StringPtr = Marshal.StringToHGlobalUni(AutoConfigURL);
                options[0].m_Value.m_Int = (int)PerConnFlags.PROXY_TYPE_AUTO_PROXY_URL | (int)options[0].m_Value.m_Int;
                optionCurrent++;
            }

            if (EnableAutoDetect)
            {
                options[0].m_Value.m_Int             = (int)PerConnFlags.PROXY_TYPE_AUTO_DETECT | (int)options[0].m_Value.m_Int;
                options[optionCurrent].m_Option      = PerConnOption.INTERNET_PER_CONN_AUTODISCOVERY_FLAGS;
                options[optionCurrent].m_Value.m_Int = (int)AutoDetectFlags.AUTO_PROXY_FLAG_ALWAYS_DETECT;
                optionCurrent++;
            }

            // default stuff
            list.dwSize = Marshal.SizeOf(list);

            // do we have a connection name specified?
            if (string.IsNullOrEmpty(ConnectionName))
            {
                // no - the proxy will apply to 'LAN Connections'
                list.szConnection = IntPtr.Zero;
            }
            else
            {
                // yes - we will apply proxy to a specific connection
                list.szConnection = Marshal.StringToHGlobalAuto(ConnectionName);
            }

            list.dwOptionCount = options.Length;
            list.dwOptionError = 0;

            int optSize = Marshal.SizeOf(typeof(InternetConnectionOption));

            // make a pointer out of all that ...
            IntPtr optionsPtr = Marshal.AllocCoTaskMem(optSize * options.Length);

            // copy the array over into that spot in memory ...
            for (int i = 0; i < options.Length; ++i)
            {
                IntPtr opt = new IntPtr((long)(optionsPtr.ToInt64() + (i * optSize)));
                Marshal.StructureToPtr(options[i], opt, false);
            }

            list.options = optionsPtr;

            // and then make a pointer out of the whole list
            IntPtr ipcoListPtr = Marshal.AllocCoTaskMem((int)list.dwSize);

            Marshal.StructureToPtr(list, ipcoListPtr, false);

            // and finally, call the API method!
            int returnvalue = NativeMethods.InternetSetOption(IntPtr.Zero,
                                                              InternetOption.INTERNET_OPTION_PER_CONNECTION_OPTION,
                                                              ipcoListPtr, list.dwSize) ? -1 : 0;

            if (returnvalue == 0)
            {  // get the error codes, they might be helpful
                returnvalue = Marshal.GetLastWin32Error();
            }

            // FREE the data
            Marshal.FreeCoTaskMem(optionsPtr);
            Marshal.FreeCoTaskMem(ipcoListPtr);

            if (returnvalue > 0)
            {  // throw the error codes, they might be helpful (Most likely not!)
                throw new Win32Exception(returnvalue);
            }

            // refresh IE settings - so we don't need to re-launch internet explorer!
            NativeMethods.InternetSetOption(IntPtr.Zero, InternetOption.INTERNET_OPTION_PROXY_SETTINGS_CHANGED, IntPtr.Zero, 0);

            return(returnvalue < 0);
        }
Exemplo n.º 14
0
            static ProxyInfo GetSingleProxy(string connection)
            {
                var list = new InternetPerConnOptionList();

                var options = new InternetConnectionOption[] {
                    new InternetConnectionOption()
                    {
                        m_Option = PerConnOption.INTERNET_PER_CONN_FLAGS
                    },
                    new InternetConnectionOption()
                    {
                        m_Option = PerConnOption.INTERNET_PER_CONN_PROXY_SERVER
                    }
                };

                // default stuff
                list.dwSize = Marshal.SizeOf(list);
                if (!string.IsNullOrEmpty(connection))
                {
                    list.pszConnection = Marshal.StringToHGlobalAuto(connection);
                }
                list.dwOptionCount = options.Length;
                list.dwOptionError = 0;

                var optSize    = Marshal.SizeOf(typeof(InternetConnectionOption));
                var optionsPtr = Marshal.AllocCoTaskMem(optSize * options.Length);

                // copy the array over into that spot in memory ...
                for (var i = 0; i < options.Length; i++)
                {
                    var opt = new IntPtr(optionsPtr.ToInt32() + (i * optSize));
                    Marshal.StructureToPtr(options[i], opt, false);
                }

                list.pOptions = optionsPtr;

                // and then make a pointer out of the whole list
                var ipcoListPtr = Marshal.AllocCoTaskMem(list.dwSize);

                Marshal.StructureToPtr(list, ipcoListPtr, false);

                // and finally, call the API method!
                var success = NativeMethods.InternetQueryOption(IntPtr.Zero, (int)InternetOption.INTERNET_OPTION_PER_CONNECTION_OPTION, ipcoListPtr, ref list.dwSize);

                Marshal.PtrToStructure(ipcoListPtr, list);
                Marshal.PtrToStructure(list.pOptions, options[0]);
                Marshal.PtrToStructure(new IntPtr(list.pOptions.ToInt32() + optSize), options[1]);

                var proxyInfo = new ProxyInfo()
                {
                    ConnectionName = connection,
                    Flags          = options[0].m_Value.m_Int,
                    Proxy          = Marshal.PtrToStringAuto(options[1].m_Value.m_StringPtr)
                };

                // FREE the data ASAP
                Marshal.FreeCoTaskMem(optionsPtr);
                Marshal.FreeCoTaskMem(ipcoListPtr);

                return(proxyInfo);
            }
Exemplo n.º 15
0
 private static extern bool InternetQueryOption(IntPtr hInternet, InternetOption dwOption,
                                                // ReSharper disable once IdentifierTypo
                                                ref InternetPerConnOptionList optionList, ref int lpdwBufferLength);
Exemplo n.º 16
0
        /// <summary>
        /// Sets proxy.
        /// </summary>
        /// <param name="EnableProxy">If true enables proxy, false disables.</param>
        /// <param name="EnableAutoDetect">If true enables Auto-Detect setting, false disables.</param>
        /// <param name="ProxyAddress">If you want a specific proxy server</param>
        /// <param name="ProxyExceptions">Exceptions if you need it</param>
        /// <param name="AutoConfigURL">If you want an autoconfig URL i.e. PAC file</param>
        /// <param name="ConnectionName">If you want to apply Proxy Setting to dial up connection, specify name here.</param>
        /// <returns></returns>
        public static bool SetProxy(bool EnableProxy,bool EnableAutoDetect,string ProxyAddress,string ProxyExceptions, string AutoConfigURL, string ConnectionName="")
        {
            // use this to store our proxy settings
            InternetPerConnOptionList list = new InternetPerConnOptionList();

            // get count of number of options we need...starting with a base of 2.
            int optionCount = 1;

            // count out how many options we are going to need to set...
            if (EnableProxy) optionCount++;
            if (EnableAutoDetect) optionCount++;
            if (!string.IsNullOrEmpty(ProxyExceptions)) optionCount++;
            if (!string.IsNullOrEmpty(AutoConfigURL)) optionCount++;

            // we'll use this array to store our options
            InternetConnectionOption[] options = new InternetConnectionOption[optionCount];

            // a counter to identify what option we are setting at the moment...there will always be option [0] at a minimum...
            int optionCurrent = 1;

            // our per connection flags get stored here...
            options[0].m_Option = PerConnOption.INTERNET_PER_CONN_FLAGS;

            // enable or disable proxy?
            if (EnableProxy)
            {
                options[1].m_Option = PerConnOption.INTERNET_PER_CONN_PROXY_SERVER;
                options[1].m_Value.m_StringPtr = Marshal.StringToHGlobalAuto(ProxyAddress);
                options[0].m_Value.m_Int = (int)PerConnFlags.PROXY_TYPE_PROXY;

                optionCurrent++;
            }
            else
            {
                options[0].m_Value.m_Int = (int)PerConnFlags.PROXY_TYPE_DIRECT;
            }
//            options[optionCurrent].m_Option = PerConnOption.INTERNET_PER_CONN_FLAGS;
  //          optionCurrent++;

            // configure proxy exceptions...use <local> to bypass proxy for local addresses...
            if (!string.IsNullOrEmpty(ProxyExceptions))
            {
                options[optionCurrent].m_Option = PerConnOption.INTERNET_PER_CONN_PROXY_BYPASS;
                options[optionCurrent].m_Value.m_StringPtr = Marshal.StringToHGlobalUni(ProxyExceptions); 
                optionCurrent++;
            }

            // configure auto config URLw
            if (!string.IsNullOrEmpty(AutoConfigURL))
            {
                options[optionCurrent].m_Option = PerConnOption.INTERNET_PER_CONN_AUTOCONFIG_URL;
                options[optionCurrent].m_Value.m_StringPtr = Marshal.StringToHGlobalUni(AutoConfigURL);
                options[0].m_Value.m_Int = (int)PerConnFlags.PROXY_TYPE_AUTO_PROXY_URL | (int)options[0].m_Value.m_Int;
                optionCurrent++;
            }

            if (EnableAutoDetect)
            {
                options[0].m_Value.m_Int = (int)PerConnFlags.PROXY_TYPE_AUTO_DETECT | (int)options[0].m_Value.m_Int;
                options[optionCurrent].m_Option = PerConnOption.INTERNET_PER_CONN_AUTODISCOVERY_FLAGS;
                options[optionCurrent].m_Value.m_Int=(int)AutoDetectFlags.AUTO_PROXY_FLAG_ALWAYS_DETECT;
                optionCurrent++;
            }

            // default stuff
            list.dwSize = Marshal.SizeOf(list);

            // do we have a connection name specified?
            if (string.IsNullOrEmpty(ConnectionName))
            {
                // no - the proxy will apply to 'LAN Connections'
                list.szConnection = IntPtr.Zero;
            }
            else
            {
                // yes - we will apply proxy to a specific connection
                list.szConnection = Marshal.StringToHGlobalAuto(ConnectionName);
            }

            list.dwOptionCount = options.Length;
            list.dwOptionError = 0;

            int optSize = Marshal.SizeOf(typeof(InternetConnectionOption));

            // make a pointer out of all that ...
            IntPtr optionsPtr = Marshal.AllocCoTaskMem(optSize * options.Length);

            // copy the array over into that spot in memory ...
            for (int i = 0; i < options.Length; ++i)
            {
                IntPtr opt = new IntPtr((long)(optionsPtr.ToInt64() + (i * optSize)));
                Marshal.StructureToPtr(options[i], opt, false);
            }

            list.options = optionsPtr;

            // and then make a pointer out of the whole list
            IntPtr ipcoListPtr = Marshal.AllocCoTaskMem((int)list.dwSize);
            Marshal.StructureToPtr(list, ipcoListPtr, false);

            // and finally, call the API method!
            int returnvalue = NativeMethods.InternetSetOption(IntPtr.Zero,
            InternetOption.INTERNET_OPTION_PER_CONNECTION_OPTION,
            ipcoListPtr, list.dwSize) ? -1 : 0;

            if (returnvalue == 0)
            {  // get the error codes, they might be helpful
                returnvalue = Marshal.GetLastWin32Error();
            }

            // FREE the data
            Marshal.FreeCoTaskMem(optionsPtr);
            Marshal.FreeCoTaskMem(ipcoListPtr);

            if (returnvalue > 0)
            {  // throw the error codes, they might be helpful (Most likely not!)
                throw new Win32Exception(returnvalue);
            }

            // refresh IE settings - so we don't need to re-launch internet explorer!
            NativeMethods.InternetSetOption(IntPtr.Zero, InternetOption.INTERNET_OPTION_PROXY_SETTINGS_CHANGED, IntPtr.Zero, 0);
            
            return (returnvalue < 0);
        }
Exemplo n.º 17
0
        private static bool SetProxy(string strProxy, string exceptions)
        {
            InternetPerConnOptionList list = new InternetPerConnOptionList();

            int optionCount = string.IsNullOrEmpty(strProxy) ? 1 : (string.IsNullOrEmpty(exceptions) ? 2 : 3);

            InternetConnectionOption[] options = new InternetConnectionOption[optionCount];

            options[0].m_Option      = PerConnOption.INTERNET_PER_CONN_FLAGS;
            options[0].m_Value.m_Int = (int)((optionCount < 2)
                ? PerConnFlags.PROXY_TYPE_DIRECT
                : (PerConnFlags.PROXY_TYPE_DIRECT | PerConnFlags.PROXY_TYPE_PROXY));

            if (optionCount > 1)
            {
                options[1].m_Option            = PerConnOption.INTERNET_PER_CONN_PROXY_SERVER;
                options[1].m_Value.m_StringPtr = Marshal.StringToHGlobalAuto(strProxy);
                if (optionCount > 2)
                {
                    options[2].m_Option            = PerConnOption.INTERNET_PER_CONN_PROXY_BYPASS;
                    options[2].m_Value.m_StringPtr = Marshal.StringToHGlobalAuto(exceptions);
                }
            }

            list.dwSize        = Marshal.SizeOf(list);
            list.szConnection  = IntPtr.Zero;
            list.dwOptionCount = options.Length;
            list.dwOptionError = 0;

            int    optSize    = Marshal.SizeOf(typeof(InternetConnectionOption));
            IntPtr optionsPtr = Marshal.AllocCoTaskMem(optSize * options.Length);

            for (int i = 0; i < options.Length; ++i)
            {
                IntPtr opt = new IntPtr(optionsPtr.ToInt64() + (i * optSize));
                Marshal.StructureToPtr(options[i], opt, false);
            }

            list.options = optionsPtr;

            IntPtr ipcoListPtr = Marshal.AllocCoTaskMem((Int32)list.dwSize);

            Marshal.StructureToPtr(list, ipcoListPtr, false);

            int returnvalue = NativeMethods.InternetSetOption(IntPtr.Zero,
                                                              InternetOption.INTERNET_OPTION_PER_CONNECTION_OPTION,
                                                              ipcoListPtr, list.dwSize)
                ? -1
                : 0;

            if (returnvalue == 0)
            {
                returnvalue = Marshal.GetLastWin32Error();
            }

            Marshal.FreeCoTaskMem(optionsPtr);
            Marshal.FreeCoTaskMem(ipcoListPtr);
            if (returnvalue > 0)
            {
                // No need to catch
            }

            return(returnvalue < 0);
        }
Exemplo n.º 18
0
 private static extern bool InternetSetOption(IntPtr hInternet, int dwOption,
                                              InternetPerConnOptionList lpBuffer, int dwBufferLength);
Exemplo n.º 19
0
            static ProxyInfo GetSingleProxy(string connection) {
                var list = new InternetPerConnOptionList();

                var options = new InternetConnectionOption[]{
                    new InternetConnectionOption(){
                        m_Option = PerConnOption.INTERNET_PER_CONN_FLAGS
                    },
                    new InternetConnectionOption(){
                        m_Option = PerConnOption.INTERNET_PER_CONN_PROXY_SERVER
                    }
                };

                // default stuff
                list.dwSize = Marshal.SizeOf(list);
                if (!string.IsNullOrEmpty(connection))
                    list.pszConnection = Marshal.StringToHGlobalAuto(connection);
                list.dwOptionCount = options.Length;
                list.dwOptionError = 0;

                var optSize = Marshal.SizeOf(typeof(InternetConnectionOption));
                var optionsPtr = Marshal.AllocCoTaskMem(optSize * options.Length);
                // copy the array over into that spot in memory ...
                for (var i = 0; i < options.Length; i++) {
                    var opt = new IntPtr(optionsPtr.ToInt32() + (i * optSize));
                    Marshal.StructureToPtr(options[i], opt, false);
                }

                list.pOptions = optionsPtr;

                // and then make a pointer out of the whole list
                var ipcoListPtr = Marshal.AllocCoTaskMem(list.dwSize);
                Marshal.StructureToPtr(list, ipcoListPtr, false);

                // and finally, call the API method!
                var success = NativeMethods.InternetQueryOption(IntPtr.Zero, (int)InternetOption.INTERNET_OPTION_PER_CONNECTION_OPTION, ipcoListPtr, ref list.dwSize);

                Marshal.PtrToStructure(ipcoListPtr, list);
                Marshal.PtrToStructure(list.pOptions, options[0]);
                Marshal.PtrToStructure(new IntPtr(list.pOptions.ToInt32() + optSize), options[1]);

                var proxyInfo = new ProxyInfo() {
                    ConnectionName = connection,
                    Flags = options[0].m_Value.m_Int,
                    Proxy = Marshal.PtrToStringAuto(options[1].m_Value.m_StringPtr)
                };

                // FREE the data ASAP
                Marshal.FreeCoTaskMem(optionsPtr);
                Marshal.FreeCoTaskMem(ipcoListPtr);

                return proxyInfo;
            }
Exemplo n.º 20
0
 public static extern bool InternetSetOption(IntPtr hInternet, InternetOptionActions dwOption, ref InternetPerConnOptionList lpOptionList, int lpdwBufferLength);
Exemplo n.º 21
0
        public static bool SetProxy(string strProxy, string exceptions)
        {
            InternetPerConnOptionList list = new InternetPerConnOptionList();

            int optionCount = string.IsNullOrEmpty(strProxy) ? 1 : (string.IsNullOrEmpty(exceptions) ? 2 : 3);
            InternetConnectionOption[] options = new InternetConnectionOption[optionCount];
            // USE a proxy server ...
            options[0].m_Option = PerConnOption.INTERNET_PER_CONN_FLAGS;
            options[0].m_Value.m_Int = (int)((optionCount < 2) ? PerConnFlags.PROXY_TYPE_DIRECT : (PerConnFlags.PROXY_TYPE_DIRECT | PerConnFlags.PROXY_TYPE_PROXY));
            // use THIS proxy server
            if (optionCount > 1)
            {
                options[1].m_Option = PerConnOption.INTERNET_PER_CONN_PROXY_SERVER;
                options[1].m_Value.m_StringPtr = Marshal.StringToHGlobalAuto(strProxy);
                // except for these addresses ...
                if (optionCount > 2)
                {
                    options[2].m_Option = PerConnOption.INTERNET_PER_CONN_PROXY_BYPASS;
                    options[2].m_Value.m_StringPtr = Marshal.StringToHGlobalAuto(exceptions);
                }
            }

            // default stuff
            list.dwSize = Marshal.SizeOf(list);
            list.szConnection = IntPtr.Zero;
            list.dwOptionCount = options.Length;
            list.dwOptionError = 0;


            int optSize = Marshal.SizeOf(typeof(InternetConnectionOption));
            // make a pointer out of all that ...
            IntPtr optionsPtr = Marshal.AllocCoTaskMem(optSize * options.Length);
            // copy the array over into that spot in memory ...
            for (int i = 0; i < options.Length; ++i)
            {
                IntPtr opt = new IntPtr(optionsPtr.ToInt32() + (i * optSize));
                Marshal.StructureToPtr(options[i], opt, false);
            }

            list.options = optionsPtr;

            // and then make a pointer out of the whole list
            IntPtr ipcoListPtr = Marshal.AllocCoTaskMem((Int32)list.dwSize);
            Marshal.StructureToPtr(list, ipcoListPtr, false);

            // and finally, call the API method!
            int returnvalue = NativeMethods.InternetSetOption(IntPtr.Zero,
               InternetOption.INTERNET_OPTION_PER_CONNECTION_OPTION,
               ipcoListPtr, list.dwSize) ? -1 : 0;
            if (returnvalue == 0)
            {  // get the error codes, they might be helpful
                returnvalue = Marshal.GetLastWin32Error();
            }
            // FREE the data ASAP
            Marshal.FreeCoTaskMem(optionsPtr);
            Marshal.FreeCoTaskMem(ipcoListPtr);
            if (returnvalue > 0)
            {  // throw the error codes, they might be helpful
                //throw new Win32Exception(Marshal.GetLastWin32Error());
            }

            return (returnvalue < 0);
        }