Example #1
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);
        }
Example #2
0
 static InternetConnectionOption[] GenQureyOption(bool isWin7OrNewer)
 {
     InternetConnectionOption[] options = new InternetConnectionOption[QueryOptionCount];
     options[QueryIndexProxyMode].m_Option   = isWin7OrNewer ? PerConnOption.INTERNET_PER_CONN_FLAGS_UI : PerConnOption.INTERNET_PER_CONN_FLAGS;
     options[QueryIndexProxyServer].m_Option = PerConnOption.INTERNET_PER_CONN_PROXY_SERVER;
     options[QueryIndexPacUrl].m_Option      = PerConnOption.INTERNET_PER_CONN_AUTOCONFIG_URL;
     return(options);
 }
Example #3
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);
            }
Example #4
0
        static InternetConnectionOption[] GenProxyOption(
            Model.Data.ProxySettings proxySettings)
        {
            InternetConnectionOption[] options = new InternetConnectionOption[QueryOptionCount];

            // USE a proxy server ...
            options[QueryIndexProxyMode].m_Option      = PerConnOption.INTERNET_PER_CONN_FLAGS;
            options[QueryIndexProxyMode].m_Value.m_Int = proxySettings.proxyMode;

            options[QueryIndexProxyServer].m_Option =
                PerConnOption.INTERNET_PER_CONN_PROXY_SERVER;
            options[QueryIndexProxyServer].m_Value.m_StringPtr =
                Marshal.StringToHGlobalAuto(proxySettings.proxyAddr ?? @"");

            options[QueryIndexPacUrl].m_Option =
                PerConnOption.INTERNET_PER_CONN_AUTOCONFIG_URL;
            options[QueryIndexPacUrl].m_Value.m_StringPtr =
                Marshal.StringToHGlobalAuto(proxySettings.pacUrl ?? @"");

            return(options);
        }
        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);
        }
Example #6
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);
        }
Example #7
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);
            }
Example #8
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);
        }
Example #9
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);
        }
Example #10
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;
            }
Example #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;
            }
Example #12
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);
        }