internal static bool GetProxyDetails(out ProxyInfo proxyInfo) { NativeStructs.WINHTTP_CURRENT_USER_IE_PROXY_CONFIG proxyConfig = new NativeStructs.WINHTTP_CURRENT_USER_IE_PROXY_CONFIG(); bool result = SafeNativeMethods.WinHttpGetIEProxyConfigForCurrentUser(ref proxyConfig); bool autoDetect; string autoConfigUrl; string proxy; string proxyBypass; if (result) { autoDetect = proxyConfig.fAutoDetect; autoConfigUrl = Marshal.PtrToStringUni(proxyConfig.lpszAutoConfigUrl); proxy = Marshal.PtrToStringUni(proxyConfig.lpszProxy); proxyBypass = Marshal.PtrToStringUni(proxyConfig.lpszProxyBypass); if (proxyConfig.lpszAutoConfigUrl != IntPtr.Zero) { SafeNativeMethods.GlobalFree(proxyConfig.lpszAutoConfigUrl); proxyConfig.lpszAutoConfigUrl = IntPtr.Zero; } if (proxyConfig.lpszProxy != IntPtr.Zero) { SafeNativeMethods.GlobalFree(proxyConfig.lpszProxy); proxyConfig.lpszProxy = IntPtr.Zero; } if (proxyConfig.lpszProxyBypass != IntPtr.Zero) { SafeNativeMethods.GlobalFree(proxyConfig.lpszProxyBypass); proxyConfig.lpszProxyBypass = IntPtr.Zero; } } else { autoDetect = false; autoConfigUrl = null; proxy = null; proxyBypass = null; } proxyInfo = new ProxyInfo(autoDetect, autoConfigUrl, proxy, proxyBypass); return(result); }