mirror of https://github.com/OpenVPN/openvpn-gui
Create connection keys inside configs and only if needed
Signed-off-by: Selva Nair <selva.nair@gmail.com>pull/52/head
parent
5880fdcd02
commit
3ce7466b20
17
registry.c
17
registry.c
|
@ -317,14 +317,14 @@ SetRegistryValueNumeric(HKEY regkey, const TCHAR *name, DWORD data)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Open HKCU\Software\OpenVPN-GUI\config-name (create if doesn't exist).
|
* Open HKCU\Software\OpenVPN-GUI\configs\config-name.
|
||||||
* The caller must close the key. Returns 1 on success.
|
* The caller must close the key. Returns 1 on success.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
OpenConfigRegistryKey(const WCHAR *config_name, HKEY *regkey)
|
OpenConfigRegistryKey(const WCHAR *config_name, HKEY *regkey, BOOL create)
|
||||||
{
|
{
|
||||||
DWORD status;
|
DWORD status;
|
||||||
const WCHAR fmt[] = L"SOFTWARE\\OpenVPN-GUI\\%s";
|
const WCHAR fmt[] = L"SOFTWARE\\OpenVPN-GUI\\configs\\%s";
|
||||||
int count = (wcslen(config_name) + wcslen(fmt) + 1);
|
int count = (wcslen(config_name) + wcslen(fmt) + 1);
|
||||||
WCHAR *name = malloc(count * sizeof(WCHAR));
|
WCHAR *name = malloc(count * sizeof(WCHAR));
|
||||||
|
|
||||||
|
@ -334,8 +334,11 @@ OpenConfigRegistryKey(const WCHAR *config_name, HKEY *regkey)
|
||||||
_snwprintf(name, count, fmt, config_name);
|
_snwprintf(name, count, fmt, config_name);
|
||||||
name[count-1] = L'\0';
|
name[count-1] = L'\0';
|
||||||
|
|
||||||
|
if (!create)
|
||||||
|
status = RegOpenKeyEx (HKEY_CURRENT_USER, name, 0, KEY_READ | KEY_WRITE, regkey);
|
||||||
|
else
|
||||||
/* create if key doesn't exist */
|
/* create if key doesn't exist */
|
||||||
status = RegCreateKeyEx(HKEY_CURRENT_USER, name, 0, NULL,
|
status = RegCreateKeyEx(HKEY_CURRENT_USER, name, 0, NULL,
|
||||||
REG_OPTION_NON_VOLATILE, KEY_READ | KEY_WRITE, NULL, regkey, NULL);
|
REG_OPTION_NON_VOLATILE, KEY_READ | KEY_WRITE, NULL, regkey, NULL);
|
||||||
free (name);
|
free (name);
|
||||||
|
|
||||||
|
@ -348,7 +351,7 @@ SetConfigRegistryValueBinary(const WCHAR *config_name, const WCHAR *name, const
|
||||||
HKEY regkey;
|
HKEY regkey;
|
||||||
DWORD status;
|
DWORD status;
|
||||||
|
|
||||||
if (!OpenConfigRegistryKey(config_name, ®key))
|
if (!OpenConfigRegistryKey(config_name, ®key, TRUE))
|
||||||
return 0;
|
return 0;
|
||||||
status = RegSetValueEx(regkey, name, 0, REG_BINARY, data, len);
|
status = RegSetValueEx(regkey, name, 0, REG_BINARY, data, len);
|
||||||
RegCloseKey(regkey);
|
RegCloseKey(regkey);
|
||||||
|
@ -368,7 +371,7 @@ GetConfigRegistryValue(const WCHAR *config_name, const WCHAR *name, BYTE *data,
|
||||||
DWORD type;
|
DWORD type;
|
||||||
HKEY regkey;
|
HKEY regkey;
|
||||||
|
|
||||||
if (!OpenConfigRegistryKey(config_name, ®key))
|
if (!OpenConfigRegistryKey(config_name, ®key, FALSE))
|
||||||
return 0;
|
return 0;
|
||||||
status = RegQueryValueEx(regkey, name, NULL, &type, data, &len);
|
status = RegQueryValueEx(regkey, name, NULL, &type, data, &len);
|
||||||
RegCloseKey(regkey);
|
RegCloseKey(regkey);
|
||||||
|
@ -384,7 +387,7 @@ DeleteConfigRegistryValue(const WCHAR *config_name, const WCHAR *name)
|
||||||
DWORD status;
|
DWORD status;
|
||||||
HKEY regkey;
|
HKEY regkey;
|
||||||
|
|
||||||
if (!OpenConfigRegistryKey(config_name, ®key))
|
if (!OpenConfigRegistryKey(config_name, ®key, FALSE))
|
||||||
return 0;
|
return 0;
|
||||||
status = RegDeleteValue(regkey, name);
|
status = RegDeleteValue(regkey, name);
|
||||||
RegCloseKey(regkey);
|
RegCloseKey(regkey);
|
||||||
|
|
Loading…
Reference in New Issue