31GetRegString(HKEY
key, LPCWSTR value, LPWSTR data, DWORD size, LPCWSTR default_value)
33 LONG
status = RegGetValue(
key, NULL, value, RRF_RT_REG_SZ,
34 NULL, (LPBYTE) data, &size);
36 if (
status == ERROR_FILE_NOT_FOUND && default_value)
38 size_t len = size/
sizeof(data[0]);
39 if (swprintf(data, len, default_value))
45 if (
status != ERROR_SUCCESS)
63 WCHAR install_path[MAX_PATH];
64 WCHAR default_value[MAX_PATH];
68 LONG
status = RegOpenKeyEx(HKEY_LOCAL_MACHINE, reg_path, 0, KEY_READ, &
key);
69 if (
status != ERROR_SUCCESS)
77 if (
status != ERROR_SUCCESS)
83 swprintf(default_value, _countof(default_value), L
"%ls\\bin\\openvpn.exe",
86 if (error != ERROR_SUCCESS)
91 swprintf(default_value, _countof(default_value), L
"%ls\\config", install_path);
94 if (error != ERROR_SUCCESS)
99 swprintf(default_value, _countof(default_value), L
"%ls\\bin", install_path);
102 if (error != ERROR_SUCCESS)
109 if (error != ERROR_SUCCESS)
114 swprintf(default_value, _countof(default_value), L
"%ls\\log", install_path);
116 if (error != ERROR_SUCCESS)
122 L
"NORMAL_PRIORITY_CLASS");
123 if (error != ERROR_SUCCESS)
128 error =
GetRegString(
key, L
"log_append", append,
sizeof(append), L
"0");
129 if (error != ERROR_SUCCESS)
137 if (error != ERROR_SUCCESS)
144 if (error != ERROR_SUCCESS)
150 if (!_wcsicmp(priority, L
"IDLE_PRIORITY_CLASS"))
154 else if (!_wcsicmp(priority, L
"BELOW_NORMAL_PRIORITY_CLASS"))
156 s->
priority = BELOW_NORMAL_PRIORITY_CLASS;
158 else if (!_wcsicmp(priority, L
"NORMAL_PRIORITY_CLASS"))
160 s->
priority = NORMAL_PRIORITY_CLASS;
162 else if (!_wcsicmp(priority, L
"ABOVE_NORMAL_PRIORITY_CLASS"))
164 s->
priority = ABOVE_NORMAL_PRIORITY_CLASS;
166 else if (!_wcsicmp(priority, L
"HIGH_PRIORITY_CLASS"))
172 SetLastError(ERROR_INVALID_DATA);
178 if (append[0] == L
'0')
182 else if (append[0] == L
'1')
188 SetLastError(ERROR_INVALID_DATA);
189 error =
MsgToEventLog(
M_ERR, L
"Log file append flag (given as '%ls') must be '0' or '1'", append);
203 static WCHAR buf[256];
207 error = GetLastError();
208 len = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ARGUMENT_ARRAY,
209 NULL, error, LANG_NEUTRAL, tmp, 0, NULL);
211 if (len == 0 || (
long) _countof(buf) < (
long) len + 14)
217 tmp[wcslen(tmp) - 2] = L
'\0';
218 swprintf(buf, _countof(buf), L
"%ls (0x%x)", tmp, error);
236 LPCWSTR err_msg = L
"";
241 error = GetLastError();
245 hEventSource = RegisterEventSource(NULL,
APPNAME);
246 if (hEventSource != NULL)
248 swprintf(
msg[0], _countof(
msg[0]),
252 va_start(arglist, format);
253 vswprintf(
msg[1], _countof(
msg[1]), format, arglist);
256 const WCHAR *mesg[] = {
msg[0],
msg[1] };
258 EVENTLOG_ERROR_TYPE : EVENTLOG_INFORMATION_TYPE,
259 0, 0, NULL, 2, 0, mesg, NULL);
260 DeregisterEventSource(hEventSource);
269 int n = MultiByteToWideChar(CP_UTF8, 0, utf8, size, NULL, 0);
270 wchar_t *utf16 = malloc(n *
sizeof(
wchar_t));
275 MultiByteToWideChar(CP_UTF8, 0, utf8, size, utf16, n);