31GetRegString(HKEY
key, LPCWSTR value, LPWSTR data, DWORD size, LPCWSTR default_value)
33 LONG
status = RegGetValue(
key, NULL, value, RRF_RT_REG_SZ, NULL, (LPBYTE)data, &size);
35 if (
status == ERROR_FILE_NOT_FOUND && default_value)
37 size_t len = size /
sizeof(data[0]);
38 if (swprintf(data, len, default_value))
44 if (
status != ERROR_SUCCESS)
49 L
"Error querying registry value: HKLM\\SOFTWARE\\" _L(
PACKAGE_NAME) L
"%ls\\%ls",
65 WCHAR install_path[MAX_PATH];
66 WCHAR default_value[MAX_PATH];
70 LONG
status = RegOpenKeyEx(HKEY_LOCAL_MACHINE, reg_path, 0, KEY_READ, &
key);
71 if (
status != ERROR_SUCCESS)
80 if (
status != ERROR_SUCCESS)
86 swprintf(default_value, _countof(default_value), L
"%ls\\bin\\openvpn.exe", install_path);
88 if (error != ERROR_SUCCESS)
93 swprintf(default_value, _countof(default_value), L
"%ls\\config", install_path);
95 if (error != ERROR_SUCCESS)
100 swprintf(default_value, _countof(default_value), L
"%ls\\bin", install_path);
102 if (error != ERROR_SUCCESS)
108 if (error != ERROR_SUCCESS)
113 swprintf(default_value, _countof(default_value), L
"%ls\\log", install_path);
115 if (error != ERROR_SUCCESS)
120 error =
GetRegString(
key, L
"priority", priority,
sizeof(priority), L
"NORMAL_PRIORITY_CLASS");
121 if (error != ERROR_SUCCESS)
126 error =
GetRegString(
key, L
"log_append", append,
sizeof(append), L
"0");
127 if (error != ERROR_SUCCESS)
135 if (error != ERROR_SUCCESS)
142 if (error != ERROR_SUCCESS)
148 if (!_wcsicmp(priority, L
"IDLE_PRIORITY_CLASS"))
152 else if (!_wcsicmp(priority, L
"BELOW_NORMAL_PRIORITY_CLASS"))
154 s->
priority = BELOW_NORMAL_PRIORITY_CLASS;
156 else if (!_wcsicmp(priority, L
"NORMAL_PRIORITY_CLASS"))
158 s->
priority = NORMAL_PRIORITY_CLASS;
160 else if (!_wcsicmp(priority, L
"ABOVE_NORMAL_PRIORITY_CLASS"))
162 s->
priority = ABOVE_NORMAL_PRIORITY_CLASS;
164 else if (!_wcsicmp(priority, L
"HIGH_PRIORITY_CLASS"))
170 SetLastError(ERROR_INVALID_DATA);
176 if (append[0] == L
'0')
180 else if (append[0] == L
'1')
186 SetLastError(ERROR_INVALID_DATA);
187 error =
MsgToEventLog(
M_ERR, L
"Log file append flag (given as '%ls') must be '0' or '1'",
202 static WCHAR buf[256];
206 error = GetLastError();
207 len = FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM
208 | FORMAT_MESSAGE_IGNORE_INSERTS,
209 NULL, error, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&tmp, 0, NULL);
213 swprintf(buf, _countof(buf), L
"Unknown error (0x%lx)", error);
222 while (len && (tmp[len - 1] == L
'\r' || tmp[len - 1] == L
'\n' || tmp[len - 1] == L
' '))
227 swprintf(buf, _countof(buf), L
"%ls (0x%lx)", tmp, error);
240 LPCWSTR err_msg = L
"";
245 error = GetLastError();
249 hEventSource = RegisterEventSource(NULL,
APPNAME);
250 if (hEventSource != NULL)
255 va_start(arglist, format);
256 vswprintf(
msg[1], _countof(
msg[1]), format, arglist);
259 const WCHAR *mesg[] = {
msg[0],
msg[1] };
260 ReportEvent(hEventSource,
261 flags &
MSG_FLAGS_ERROR ? EVENTLOG_ERROR_TYPE : EVENTLOG_INFORMATION_TYPE,
269 DeregisterEventSource(hEventSource);
278 int n = MultiByteToWideChar(CP_UTF8, 0, utf8, size, NULL, 0);
279 wchar_t *utf16 = malloc(n *
sizeof(
wchar_t));
284 MultiByteToWideChar(CP_UTF8, 0, utf8, size, utf16, n);