33GetRegString(HKEY
key, LPCWSTR value, LPWSTR data, DWORD size, LPCWSTR default_value)
35 LONG
status = RegGetValue(
key, NULL, value, RRF_RT_REG_SZ, NULL, (LPBYTE)data, &size);
37 if (
status == ERROR_FILE_NOT_FOUND && default_value)
39 size_t len = size /
sizeof(data[0]);
40 if (swprintf(data, len, default_value))
46 if (
status != ERROR_SUCCESS)
51 L
"Error querying registry value: HKLM\\SOFTWARE\\" _L(PACKAGE_NAME) L
"%ls\\%ls",
83 WCHAR install_path[MAX_PATH];
84 WCHAR default_value[MAX_PATH];
86 swprintf(reg_path, _countof(reg_path), L
"SOFTWARE\\" _L(PACKAGE_NAME) L
"%ls",
service_instance);
88 LONG
status = RegOpenKeyEx(HKEY_LOCAL_MACHINE, reg_path, 0, KEY_READ, &
key);
89 if (
status != ERROR_SUCCESS)
98 if (
status != ERROR_SUCCESS)
104 swprintf(default_value, _countof(default_value), L
"%ls\\bin\\openvpn.exe", install_path);
106 if (error != ERROR_SUCCESS)
111 swprintf(default_value, _countof(default_value), L
"%ls\\config\\", install_path);
118 swprintf(default_value, _countof(default_value), L
"%ls\\bin\\", install_path);
126 if (error != ERROR_SUCCESS)
131 swprintf(default_value, _countof(default_value), L
"%ls\\log\\", install_path);
138 error =
GetRegString(
key, L
"priority", priority,
sizeof(priority), L
"NORMAL_PRIORITY_CLASS");
139 if (error != ERROR_SUCCESS)
144 error =
GetRegString(
key, L
"log_append", append,
sizeof(append), L
"0");
145 if (error != ERROR_SUCCESS)
153 if (error != ERROR_SUCCESS)
160 if (error != ERROR_SUCCESS)
166 if (!_wcsicmp(priority, L
"IDLE_PRIORITY_CLASS"))
170 else if (!_wcsicmp(priority, L
"BELOW_NORMAL_PRIORITY_CLASS"))
172 s->
priority = BELOW_NORMAL_PRIORITY_CLASS;
174 else if (!_wcsicmp(priority, L
"NORMAL_PRIORITY_CLASS"))
176 s->
priority = NORMAL_PRIORITY_CLASS;
178 else if (!_wcsicmp(priority, L
"ABOVE_NORMAL_PRIORITY_CLASS"))
180 s->
priority = ABOVE_NORMAL_PRIORITY_CLASS;
182 else if (!_wcsicmp(priority, L
"HIGH_PRIORITY_CLASS"))
188 SetLastError(ERROR_INVALID_DATA);
194 if (append[0] == L
'0')
198 else if (append[0] == L
'1')
204 SetLastError(ERROR_INVALID_DATA);
205 error =
MsgToEventLog(
M_ERR, L
"Log file append flag (given as '%ls') must be '0' or '1'",
220 static WCHAR buf[256];
224 error = GetLastError();
225 len = FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM
226 | FORMAT_MESSAGE_IGNORE_INSERTS,
227 NULL, error, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&tmp, 0, NULL);
231 swprintf(buf, _countof(buf), L
"Unknown error (0x%lx)", error);
240 while (len && (tmp[len - 1] == L
'\r' || tmp[len - 1] == L
'\n' || tmp[len - 1] == L
' '))
245 swprintf(buf, _countof(buf), L
"%ls (0x%lx)", tmp, error);
258 LPCWSTR err_msg = L
"";
263 error = GetLastError();
267 hEventSource = RegisterEventSource(NULL,
APPNAME);
268 if (hEventSource != NULL)
273 va_start(arglist, format);
274 vswprintf(
msg[1], _countof(
msg[1]), format, arglist);
277 const WCHAR *mesg[] = {
msg[0],
msg[1] };
278 ReportEvent(hEventSource,
279 flags &
MSG_FLAGS_ERROR ? EVENTLOG_ERROR_TYPE : EVENTLOG_INFORMATION_TYPE,
287 DeregisterEventSource(hEventSource);
296 int n = MultiByteToWideChar(CP_UTF8, 0, utf8, size, NULL, 0);
301 wchar_t *utf16 = malloc(n *
sizeof(
wchar_t));
306 MultiByteToWideChar(CP_UTF8, 0, utf8, size, utf16, n);