Commit 8b0e1e76 authored by Anton Ryzhov's avatar Anton Ryzhov

Do not call SetInternetOption when restoring proxy state at the system...

Do not call SetInternetOption when restoring proxy state at the system shutdown in Windows 7 or earlier. This re-enables ProxyEnabled registry value.
parent 5759c936
...@@ -18,6 +18,12 @@ namespace Titanium.Web.Proxy.Helpers ...@@ -18,6 +18,12 @@ namespace Titanium.Web.Proxy.Helpers
[DllImport("kernel32.dll", SetLastError = true)] [DllImport("kernel32.dll", SetLastError = true)]
internal static extern bool SetConsoleCtrlHandler(ConsoleEventDelegate callback, bool add); internal static extern bool SetConsoleCtrlHandler(ConsoleEventDelegate callback, bool add);
/// <summary>
/// <see href="https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-getsystemmetrics" />
/// </summary>
[DllImport("user32.dll")]
internal static extern int GetSystemMetrics(int nIndex);
// Pinvoke // Pinvoke
internal delegate bool ConsoleEventDelegate(int eventType); internal delegate bool ConsoleEventDelegate(int eventType);
} }
......
...@@ -80,10 +80,13 @@ namespace Titanium.Web.Proxy.Helpers ...@@ -80,10 +80,13 @@ namespace Titanium.Web.Proxy.Helpers
/// <param name="protocolType"></param> /// <param name="protocolType"></param>
internal void SetProxy(string hostname, int port, ProxyProtocolType protocolType) internal void SetProxy(string hostname, int port, ProxyProtocolType protocolType)
{ {
var reg = Registry.CurrentUser.OpenSubKey(regKeyInternetSettings, true); using (var reg = OpenInternetSettingsKey())
{
if (reg != null) if (reg == null)
{ {
return;
}
saveOriginalProxyConfiguration(reg); saveOriginalProxyConfiguration(reg);
prepareRegistry(reg); prepareRegistry(reg);
...@@ -124,9 +127,13 @@ namespace Titanium.Web.Proxy.Helpers ...@@ -124,9 +127,13 @@ namespace Titanium.Web.Proxy.Helpers
/// </summary> /// </summary>
internal void RemoveProxy(ProxyProtocolType protocolType, bool saveOriginalConfig = true) internal void RemoveProxy(ProxyProtocolType protocolType, bool saveOriginalConfig = true)
{ {
var reg = Registry.CurrentUser.OpenSubKey(regKeyInternetSettings, true); using (var reg = OpenInternetSettingsKey())
if (reg != null) {
if (reg == null)
{ {
return;
}
if (saveOriginalConfig) if (saveOriginalConfig)
{ {
saveOriginalProxyConfiguration(reg); saveOriginalProxyConfiguration(reg);
...@@ -161,10 +168,13 @@ namespace Titanium.Web.Proxy.Helpers ...@@ -161,10 +168,13 @@ namespace Titanium.Web.Proxy.Helpers
/// </summary> /// </summary>
internal void DisableAllProxy() internal void DisableAllProxy()
{ {
var reg = Registry.CurrentUser.OpenSubKey(regKeyInternetSettings, true); using (var reg = OpenInternetSettingsKey())
{
if (reg != null) if (reg == null)
{ {
return;
}
saveOriginalProxyConfiguration(reg); saveOriginalProxyConfiguration(reg);
reg.SetValue(regProxyEnable, 0); reg.SetValue(regProxyEnable, 0);
...@@ -176,10 +186,13 @@ namespace Titanium.Web.Proxy.Helpers ...@@ -176,10 +186,13 @@ namespace Titanium.Web.Proxy.Helpers
internal void SetAutoProxyUrl(string url) internal void SetAutoProxyUrl(string url)
{ {
var reg = Registry.CurrentUser.OpenSubKey(regKeyInternetSettings, true); using (var reg = OpenInternetSettingsKey())
if (reg != null)
{ {
if (reg == null)
{
return;
}
saveOriginalProxyConfiguration(reg); saveOriginalProxyConfiguration(reg);
reg.SetValue(regAutoConfigUrl, url); reg.SetValue(regAutoConfigUrl, url);
refresh(); refresh();
...@@ -188,10 +201,13 @@ namespace Titanium.Web.Proxy.Helpers ...@@ -188,10 +201,13 @@ namespace Titanium.Web.Proxy.Helpers
internal void SetProxyOverride(string proxyOverride) internal void SetProxyOverride(string proxyOverride)
{ {
var reg = Registry.CurrentUser.OpenSubKey(regKeyInternetSettings, true); using (var reg = OpenInternetSettingsKey())
{
if (reg != null) if (reg == null)
{ {
return;
}
saveOriginalProxyConfiguration(reg); saveOriginalProxyConfiguration(reg);
reg.SetValue(regProxyOverride, proxyOverride); reg.SetValue(regProxyOverride, proxyOverride);
refresh(); refresh();
...@@ -205,10 +221,13 @@ namespace Titanium.Web.Proxy.Helpers ...@@ -205,10 +221,13 @@ namespace Titanium.Web.Proxy.Helpers
return; return;
} }
var reg = Registry.CurrentUser.OpenSubKey(regKeyInternetSettings, true); using (var reg = Registry.CurrentUser.OpenSubKey(regKeyInternetSettings, true))
{
if (reg != null) if (reg == null)
{ {
return;
}
var ov = originalValues; var ov = originalValues;
if (ov.AutoConfigUrl != null) if (ov.AutoConfigUrl != null)
{ {
...@@ -246,26 +265,43 @@ namespace Titanium.Web.Proxy.Helpers ...@@ -246,26 +265,43 @@ namespace Titanium.Web.Proxy.Helpers
reg.DeleteValue(regProxyOverride, false); reg.DeleteValue(regProxyOverride, false);
} }
// This should not be needed, but sometimes the values are not stored into the registry
// at system shutdown without flushing.
reg.Flush();
originalValues = null; originalValues = null;
const int SM_SHUTTINGDOWN = 0x2000;
Version windows7Version = new Version(6, 1);
if (Environment.OSVersion.Version > windows7Version ||
NativeMethods.GetSystemMetrics(SM_SHUTTINGDOWN) == 0)
{
// Do not call refresh() in Windows 7 or earlier at system shutdown.
// SetInternetOption in the refresh method re-enables ProxyEnable registry value
// in Windows 7 or earlier at system shutdown.
refresh(); refresh();
} }
} }
}
internal ProxyInfo GetProxyInfoFromRegistry() internal ProxyInfo GetProxyInfoFromRegistry()
{ {
var reg = Registry.CurrentUser.OpenSubKey(regKeyInternetSettings, true); using (var reg = OpenInternetSettingsKey())
if (reg != null)
{ {
return getProxyInfoFromRegistry(reg); if (reg == null)
{
return null;
} }
return null; return getProxyInfoFromRegistry(reg);
}
} }
private ProxyInfo getProxyInfoFromRegistry(RegistryKey reg) private ProxyInfo getProxyInfoFromRegistry(RegistryKey reg)
{ {
var pi = new ProxyInfo(null, reg.GetValue(regAutoConfigUrl) as string, reg.GetValue(regProxyEnable) as int?, var pi = new ProxyInfo(null,
reg.GetValue(regAutoConfigUrl) as string,
reg.GetValue(regProxyEnable) as int?,
reg.GetValue(regProxyServer) as string, reg.GetValue(regProxyServer) as string,
reg.GetValue(regProxyOverride) as string); reg.GetValue(regProxyOverride) as string);
...@@ -307,5 +343,13 @@ namespace Titanium.Web.Proxy.Helpers ...@@ -307,5 +343,13 @@ namespace Titanium.Web.Proxy.Helpers
NativeMethods.InternetSetOption(IntPtr.Zero, InternetOptionSettingsChanged, IntPtr.Zero, 0); NativeMethods.InternetSetOption(IntPtr.Zero, InternetOptionSettingsChanged, IntPtr.Zero, 0);
NativeMethods.InternetSetOption(IntPtr.Zero, InternetOptionRefresh, IntPtr.Zero, 0); NativeMethods.InternetSetOption(IntPtr.Zero, InternetOptionRefresh, IntPtr.Zero, 0);
} }
/// <summary>
/// Opens the registry key with the internet settings
/// </summary>
private static RegistryKey OpenInternetSettingsKey()
{
return Registry.CurrentUser.OpenSubKey(regKeyInternetSettings, true);
}
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment