@@ -32,7 +32,7 @@
#pragma comment(lib, "msi.lib")
#endif
#include <stdio.h>
-#include <tchar.h>
+#include <wchar.h>
DWORD openvpnmsica_thread_data_idx = TLS_OUT_OF_INDEXES;
@@ -160,13 +160,13 @@
MsiRecordSetInteger(hRecordProg, 3, dwResult);
/* Field 4: The Windows error description. */
- LPTSTR szErrMessage = NULL;
+ LPWSTR szErrMessage = NULL;
if (FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS,
0,
dwResult,
0,
- (LPTSTR)&szErrMessage,
+ (LPWSTR)&szErrMessage,
0,
NULL) && szErrMessage)
{
@@ -175,7 +175,7 @@
{
if (szErrMessage[i])
{
- if (!_istspace(szErrMessage[i]))
+ if (!iswspace(szErrMessage[i]))
{
i_last = i + 1;
}
@@ -54,9 +54,9 @@
void
msica_arg_seq_add_head(
_Inout_ struct msica_arg_seq *seq,
- _In_z_ LPCTSTR argument)
+ _In_z_ LPCWSTR argument)
{
- size_t argument_size = (_tcslen(argument) + 1) * sizeof(TCHAR);
+ size_t argument_size = (wcslen(argument) + 1) * sizeof(WCHAR);
struct msica_arg *p = malloc(sizeof(struct msica_arg) + argument_size);
if (p == NULL)
{
@@ -75,9 +75,9 @@
void
msica_arg_seq_add_tail(
_Inout_ struct msica_arg_seq *seq,
- _Inout_ LPCTSTR argument)
+ _Inout_ LPCWSTR argument)
{
- size_t argument_size = (_tcslen(argument) + 1) * sizeof(TCHAR);
+ size_t argument_size = (wcslen(argument) + 1) * sizeof(WCHAR);
struct msica_arg *p = malloc(sizeof(struct msica_arg) + argument_size);
if (p == NULL)
{
@@ -90,19 +90,19 @@
}
-LPTSTR
+LPWSTR
msica_arg_seq_join(_In_ const struct msica_arg_seq *seq)
{
/* Count required space. */
size_t size = 2 /*x + zero-terminator*/;
for (struct msica_arg *p = seq->head; p != NULL; p = p->next)
{
- size += _tcslen(p->val) + 1 /*space delimiter|zero-terminator*/;
+ size += wcslen(p->val) + 1 /*space delimiter|zero-terminator*/;
}
- size *= sizeof(TCHAR);
+ size *= sizeof(WCHAR);
/* Allocate. */
- LPTSTR str = malloc(size);
+ LPWSTR str = malloc(size);
if (str == NULL)
{
msg(M_FATAL, "%s: malloc(%u) failed", __FUNCTION__, size);
@@ -115,18 +115,18 @@
#endif
/* Dummy argv[0] (i.e. executable name), for CommandLineToArgvW to work correctly when parsing this string. */
- _tcscpy(str, TEXT("x"));
+ wcscpy(str, L"x");
/* Join. */
- LPTSTR s = str + 1 /*x*/;
+ LPWSTR s = str + 1 /*x*/;
for (struct msica_arg *p = seq->head; p != NULL; p = p->next)
{
/* Convert zero-terminator into space delimiter. */
- s[0] = TEXT(' ');
+ s[0] = L' ';
s++;
/* Append argument. */
- _tcscpy(s, p->val);
- s += _tcslen(p->val);
+ wcscpy(s, p->val);
+ s += wcslen(p->val);
}
#ifdef _MSC_VER
@@ -22,7 +22,7 @@
#define MSICA_ARG_H
#include <windows.h>
-#include <tchar.h>
+#include <wchar.h>
#include "../tapctl/basic.h"
@@ -38,7 +38,7 @@
struct msica_arg
{
struct msica_arg *next; /**< Pointer to the next argument in the sequence */
- TCHAR val[]; /**< Zero terminated argument string */
+ WCHAR val[]; /**< Zero terminated argument string */
};
@@ -80,7 +80,7 @@
void
msica_arg_seq_add_head(
_Inout_ struct msica_arg_seq *seq,
- _In_z_ LPCTSTR argument);
+ _In_z_ LPCWSTR argument);
/**
@@ -93,7 +93,7 @@
void
msica_arg_seq_add_tail(
_Inout_ struct msica_arg_seq *seq,
- _Inout_ LPCTSTR argument);
+ _Inout_ LPCWSTR argument);
/**
* Join arguments of the argument sequence into a space delimited string
@@ -102,7 +102,7 @@
*
* @return Joined argument string. Must be released with free() after use.
*/
-LPTSTR
+LPWSTR
msica_arg_seq_join(_In_ const struct msica_arg_seq *seq);
#ifdef _MSC_VER
@@ -37,8 +37,8 @@
UINT
msi_get_string(
_In_ MSIHANDLE hInstall,
- _In_z_ LPCTSTR szName,
- _Out_ LPTSTR *pszValue)
+ _In_z_ LPCWSTR szName,
+ _Out_ LPWSTR *pszValue)
{
if (pszValue == NULL)
{
@@ -46,29 +46,29 @@
}
/* Try with stack buffer first. */
- TCHAR szBufStack[128];
+ WCHAR szBufStack[128];
DWORD dwLength = _countof(szBufStack);
UINT uiResult = MsiGetProperty(hInstall, szName, szBufStack, &dwLength);
if (uiResult == ERROR_SUCCESS)
{
/* Copy from stack. */
- *pszValue = (LPTSTR)malloc(++dwLength * sizeof(TCHAR));
+ *pszValue = (LPWSTR)malloc(++dwLength * sizeof(WCHAR));
if (*pszValue == NULL)
{
- msg(M_FATAL, "%s: malloc(%u) failed", dwLength * sizeof(TCHAR));
+ msg(M_FATAL, "%s: malloc(%u) failed", dwLength * sizeof(WCHAR));
return ERROR_OUTOFMEMORY;
}
- memcpy(*pszValue, szBufStack, dwLength * sizeof(TCHAR));
+ memcpy(*pszValue, szBufStack, dwLength * sizeof(WCHAR));
return ERROR_SUCCESS;
}
else if (uiResult == ERROR_MORE_DATA)
{
/* Allocate on heap and retry. */
- LPTSTR szBufHeap = (LPTSTR)malloc(++dwLength * sizeof(TCHAR));
+ LPWSTR szBufHeap = (LPWSTR)malloc(++dwLength * sizeof(WCHAR));
if (szBufHeap == NULL)
{
- msg(M_FATAL, "%s: malloc(%u) failed", __FUNCTION__, dwLength * sizeof(TCHAR));
+ msg(M_FATAL, "%s: malloc(%u) failed", __FUNCTION__, dwLength * sizeof(WCHAR));
return ERROR_OUTOFMEMORY;
}
@@ -96,7 +96,7 @@
msi_get_record_string(
_In_ MSIHANDLE hRecord,
_In_ unsigned int iField,
- _Out_ LPTSTR *pszValue)
+ _Out_ LPWSTR *pszValue)
{
if (pszValue == NULL)
{
@@ -104,29 +104,29 @@
}
/* Try with stack buffer first. */
- TCHAR szBufStack[128];
+ WCHAR szBufStack[128];
DWORD dwLength = _countof(szBufStack);
UINT uiResult = MsiRecordGetString(hRecord, iField, szBufStack, &dwLength);
if (uiResult == ERROR_SUCCESS)
{
/* Copy from stack. */
- *pszValue = (LPTSTR)malloc(++dwLength * sizeof(TCHAR));
+ *pszValue = (LPWSTR)malloc(++dwLength * sizeof(WCHAR));
if (*pszValue == NULL)
{
- msg(M_FATAL, "%s: malloc(%u) failed", __FUNCTION__, dwLength * sizeof(TCHAR));
+ msg(M_FATAL, "%s: malloc(%u) failed", __FUNCTION__, dwLength * sizeof(WCHAR));
return ERROR_OUTOFMEMORY;
}
- memcpy(*pszValue, szBufStack, dwLength * sizeof(TCHAR));
+ memcpy(*pszValue, szBufStack, dwLength * sizeof(WCHAR));
return ERROR_SUCCESS;
}
else if (uiResult == ERROR_MORE_DATA)
{
/* Allocate on heap and retry. */
- LPTSTR szBufHeap = (LPTSTR)malloc(++dwLength * sizeof(TCHAR));
+ LPWSTR szBufHeap = (LPWSTR)malloc(++dwLength * sizeof(WCHAR));
if (szBufHeap == NULL)
{
- msg(M_FATAL, "%s: malloc(%u) failed", __FUNCTION__, dwLength * sizeof(TCHAR));
+ msg(M_FATAL, "%s: malloc(%u) failed", __FUNCTION__, dwLength * sizeof(WCHAR));
return ERROR_OUTOFMEMORY;
}
@@ -154,7 +154,7 @@
msi_format_record(
_In_ MSIHANDLE hInstall,
_In_ MSIHANDLE hRecord,
- _Out_ LPTSTR *pszValue)
+ _Out_ LPWSTR *pszValue)
{
if (pszValue == NULL)
{
@@ -162,29 +162,29 @@
}
/* Try with stack buffer first. */
- TCHAR szBufStack[128];
+ WCHAR szBufStack[128];
DWORD dwLength = _countof(szBufStack);
UINT uiResult = MsiFormatRecord(hInstall, hRecord, szBufStack, &dwLength);
if (uiResult == ERROR_SUCCESS)
{
/* Copy from stack. */
- *pszValue = (LPTSTR)malloc(++dwLength * sizeof(TCHAR));
+ *pszValue = (LPWSTR)malloc(++dwLength * sizeof(WCHAR));
if (*pszValue == NULL)
{
- msg(M_FATAL, "%s: malloc(%u) failed", __FUNCTION__, dwLength * sizeof(TCHAR));
+ msg(M_FATAL, "%s: malloc(%u) failed", __FUNCTION__, dwLength * sizeof(WCHAR));
return ERROR_OUTOFMEMORY;
}
- memcpy(*pszValue, szBufStack, dwLength * sizeof(TCHAR));
+ memcpy(*pszValue, szBufStack, dwLength * sizeof(WCHAR));
return ERROR_SUCCESS;
}
else if (uiResult == ERROR_MORE_DATA)
{
/* Allocate on heap and retry. */
- LPTSTR szBufHeap = (LPTSTR)malloc(++dwLength * sizeof(TCHAR));
+ LPWSTR szBufHeap = (LPWSTR)malloc(++dwLength * sizeof(WCHAR));
if (szBufHeap == NULL)
{
- msg(M_FATAL, "%s: malloc(%u) failed", __FUNCTION__, dwLength * sizeof(TCHAR));
+ msg(M_FATAL, "%s: malloc(%u) failed", __FUNCTION__, dwLength * sizeof(WCHAR));
return ERROR_OUTOFMEMORY;
}
@@ -213,7 +213,7 @@
_In_ MSIHANDLE hInstall,
_In_ MSIHANDLE hRecord,
_In_ unsigned int iField,
- _Out_ LPTSTR *pszValue)
+ _Out_ LPWSTR *pszValue)
{
if (pszValue == NULL)
{
@@ -221,7 +221,7 @@
}
/* Read string to format. */
- LPTSTR szValue = NULL;
+ LPWSTR szValue = NULL;
UINT uiResult = msi_get_record_string(hRecord, iField, &szValue);
if (uiResult != ERROR_SUCCESS)
{
@@ -41,8 +41,8 @@
UINT
msi_get_string(
_In_ MSIHANDLE hInstall,
- _In_z_ LPCTSTR szName,
- _Out_ LPTSTR *pszValue);
+ _In_z_ LPCWSTR szName,
+ _Out_ LPWSTR *pszValue);
/**
@@ -61,7 +61,7 @@
msi_get_record_string(
_In_ MSIHANDLE hRecord,
_In_ unsigned int iField,
- _Out_ LPTSTR *pszValue);
+ _Out_ LPWSTR *pszValue);
/**
@@ -83,7 +83,7 @@
msi_format_record(
_In_ MSIHANDLE hInstall,
_In_ MSIHANDLE hRecord,
- _Out_ LPTSTR *pszValue);
+ _Out_ LPWSTR *pszValue);
/**
@@ -107,6 +107,6 @@
_In_ MSIHANDLE hInstall,
_In_ MSIHANDLE hRecord,
_In_ unsigned int iField,
- _Out_ LPTSTR *pszValue);
+ _Out_ LPWSTR *pszValue);
#endif /* ifndef MSIHLP_H */
@@ -40,7 +40,7 @@
#include <shlwapi.h>
#include <stdbool.h>
#include <stdlib.h>
-#include <tchar.h>
+#include <wchar.h>
#include <setupapi.h>
#include <newdev.h>
#include <initguid.h>
@@ -80,11 +80,11 @@
static UINT
setup_sequence(
_In_ MSIHANDLE hInstall,
- _In_z_ LPCTSTR szProperty,
+ _In_z_ LPCWSTR szProperty,
_In_ struct msica_arg_seq *seq)
{
UINT uiResult;
- LPTSTR szSequence = msica_arg_seq_join(seq);
+ LPWSTR szSequence = msica_arg_seq_join(seq);
uiResult = MsiSetProperty(hInstall, szProperty, szSequence);
free(szSequence);
if (uiResult != ERROR_SUCCESS)
@@ -92,7 +92,7 @@
/* MSDN does not mention MsiSetProperty() to set GetLastError(). But we do have an error
* code. Set last error manually. */
SetLastError(uiResult);
- msg(M_NONFATAL | M_ERRNO, "%s: MsiSetProperty(\"%" PRIsLPTSTR "\") failed", __FUNCTION__, szProperty);
+ msg(M_NONFATAL | M_ERRNO, "%s: MsiSetProperty(\"%ls\") failed", __FUNCTION__, szProperty);
return uiResult;
}
return ERROR_SUCCESS;
@@ -111,27 +111,27 @@
static void
_debug_popup(_In_z_ LPCSTR szFunctionName)
{
- TCHAR szTitle[0x100], szMessage[0x100+MAX_PATH], szProcessPath[MAX_PATH];
+ WCHAR szTitle[0x100], szMessage[0x100+MAX_PATH], szProcessPath[MAX_PATH];
/* Compose pop-up title. The dialog title will contain function name to ease the process
* locating. Mind that Visual Studio displays window titles on the process list. */
- _stprintf_s(szTitle, _countof(szTitle), TEXT("%hs v%") TEXT(PRIsLPTSTR),
- szFunctionName, TEXT(PACKAGE_VERSION));
+ swprintf_s(szTitle, _countof(szTitle), L"%hs v%ls",
+ szFunctionName, _L(PACKAGE_VERSION));
/* Get process name. */
GetModuleFileName(NULL, szProcessPath, _countof(szProcessPath));
- LPCTSTR szProcessName = _tcsrchr(szProcessPath, TEXT('\\'));
+ LPCWSTR szProcessName = wcsrchr(szProcessPath, L'\\');
szProcessName = szProcessName ? szProcessName + 1 : szProcessPath;
/* Compose the pop-up message. */
- _stprintf_s(
+ swprintf_s(
szMessage, _countof(szMessage),
- TEXT("The %") TEXT(PRIsLPTSTR) TEXT(" process (PID: %u) has started to execute the %hs")
- TEXT(" custom action.\r\n")
- TEXT("\r\n")
- TEXT("If you would like to debug the custom action, attach a debugger to this process and set breakpoints before dismissing this dialog.\r\n")
- TEXT("\r\n")
- TEXT("If you are not debugging this custom action, you can safely ignore this message."),
+ L"The %ls process (PID: %u) has started to execute the %hs"
+ L" custom action.\r\n"
+ L"\r\n"
+ L"If you would like to debug the custom action, attach a debugger to this process and set breakpoints before dismissing this dialog.\r\n"
+ L"\r\n"
+ L"If you are not debugging this custom action, you can safely ignore this message.",
szProcessName,
GetCurrentProcessId(),
szFunctionName);
@@ -147,9 +147,9 @@
static void
find_adapters(
_In_ MSIHANDLE hInstall,
- _In_z_ LPCTSTR szzHardwareIDs,
- _In_z_ LPCTSTR szAdaptersPropertyName,
- _In_z_ LPCTSTR szActiveAdaptersPropertyName)
+ _In_z_ LPCWSTR szzHardwareIDs,
+ _In_z_ LPCWSTR szAdaptersPropertyName,
+ _In_z_ LPCWSTR szActiveAdaptersPropertyName)
{
UINT uiResult;
@@ -207,28 +207,28 @@
}
/* Prepare semicolon delimited list of TAP adapter ID(s) and active TAP adapter ID(s). */
- LPTSTR
- szAdapters = (LPTSTR)malloc(adapter_count * (38 /*GUID*/ + 1 /*separator/terminator*/) * sizeof(TCHAR)),
+ LPWSTR
+ szAdapters = (LPWSTR)malloc(adapter_count * (38 /*GUID*/ + 1 /*separator/terminator*/) * sizeof(WCHAR)),
szAdaptersTail = szAdapters;
if (szAdapters == NULL)
{
- msg(M_FATAL, "%s: malloc(%u) failed", __FUNCTION__, adapter_count * (38 /*GUID*/ + 1 /*separator/terminator*/) * sizeof(TCHAR));
+ msg(M_FATAL, "%s: malloc(%u) failed", __FUNCTION__, adapter_count * (38 /*GUID*/ + 1 /*separator/terminator*/) * sizeof(WCHAR));
uiResult = ERROR_OUTOFMEMORY; goto cleanup_pAdapterAdresses;
}
- LPTSTR
- szAdaptersActive = (LPTSTR)malloc(adapter_count * (38 /*GUID*/ + 1 /*separator/terminator*/) * sizeof(TCHAR)),
+ LPWSTR
+ szAdaptersActive = (LPWSTR)malloc(adapter_count * (38 /*GUID*/ + 1 /*separator/terminator*/) * sizeof(WCHAR)),
szAdaptersActiveTail = szAdaptersActive;
if (szAdaptersActive == NULL)
{
- msg(M_FATAL, "%s: malloc(%u) failed", __FUNCTION__, adapter_count * (38 /*GUID*/ + 1 /*separator/terminator*/) * sizeof(TCHAR));
+ msg(M_FATAL, "%s: malloc(%u) failed", __FUNCTION__, adapter_count * (38 /*GUID*/ + 1 /*separator/terminator*/) * sizeof(WCHAR));
uiResult = ERROR_OUTOFMEMORY; goto cleanup_szAdapters;
}
for (struct tap_adapter_node *pAdapter = pAdapterList; pAdapter; pAdapter = pAdapter->pNext)
{
/* exclude adapters created by OpenVPN Connect, since they're removed on Connect uninstallation */
- if (_tcsstr(pAdapter->szName, OPENVPN_CONNECT_ADAPTER_SUBSTR))
+ if (wcsstr(pAdapter->szName, OPENVPN_CONNECT_ADAPTER_SUBSTR))
{
msg(M_WARN, "%s: skip OpenVPN Connect adapter '%ls'", __FUNCTION__, pAdapter->szName);
continue;
@@ -241,9 +241,9 @@
/* Append to the list of TAP adapter ID(s). */
if (szAdapters < szAdaptersTail)
{
- *(szAdaptersTail++) = TEXT(';');
+ *(szAdaptersTail++) = L';';
}
- memcpy(szAdaptersTail, szAdapterId, 38 * sizeof(TCHAR));
+ memcpy(szAdaptersTail, szAdapterId, 38 * sizeof(WCHAR));
szAdaptersTail += 38;
/* If this adapter is active (connected), add it to the list of active TAP adapter ID(s). */
@@ -260,9 +260,9 @@
/* This TAP adapter is active (connected). */
if (szAdaptersActive < szAdaptersActiveTail)
{
- *(szAdaptersActiveTail++) = TEXT(';');
+ *(szAdaptersActiveTail++) = L';';
}
- memcpy(szAdaptersActiveTail, szAdapterId, 38 * sizeof(TCHAR));
+ memcpy(szAdaptersActiveTail, szAdapterId, 38 * sizeof(WCHAR));
szAdaptersActiveTail += 38;
}
break;
@@ -315,19 +315,19 @@
find_adapters(
hInstall,
- TEXT("root\\") TEXT(TAP_WIN_COMPONENT_ID) TEXT("\0") TEXT(TAP_WIN_COMPONENT_ID) TEXT("\0"),
- TEXT("TAPWINDOWS6ADAPTERS"),
- TEXT("ACTIVETAPWINDOWS6ADAPTERS"));
+ L"root\\" _L(TAP_WIN_COMPONENT_ID) L"\0" _L(TAP_WIN_COMPONENT_ID) L"\0",
+ L"TAPWINDOWS6ADAPTERS",
+ L"ACTIVETAPWINDOWS6ADAPTERS");
find_adapters(
hInstall,
- TEXT("Wintun") TEXT("\0"),
- TEXT("WINTUNADAPTERS"),
- TEXT("ACTIVEWINTUNADAPTERS"));
+ L"Wintun" L"\0",
+ L"WINTUNADAPTERS",
+ L"ACTIVEWINTUNADAPTERS");
find_adapters(
hInstall,
- TEXT("ovpn-dco") TEXT("\0"),
- TEXT("OVPNDCOADAPTERS"),
- TEXT("ACTIVEOVPNDCOADAPTERS"));
+ L"ovpn-dco" L"\0",
+ L"OVPNDCOADAPTERS",
+ L"ACTIVEOVPNDCOADAPTERS");
if (bIsCoInitialized)
{
@@ -348,7 +348,7 @@
debug_popup(__FUNCTION__);
/* Find OpenVPN GUI window. */
- HWND hWnd = FindWindow(TEXT("OpenVPN-GUI"), NULL);
+ HWND hWnd = FindWindow(L"OpenVPN-GUI", NULL);
if (hWnd)
{
/* Ask it to close and wait for 100ms. Unfortunately, this will succeed only for recent OpenVPN GUI that do not run elevated. */
@@ -382,7 +382,7 @@
msg(M_NONFATAL, "%s: MsiCreateRecord failed", __FUNCTION__);
goto cleanup_CoInitialize;
}
- uiResult = MsiRecordSetString(hRecord, 0, TEXT("\"[#bin.openvpn_gui.exe]\""));
+ uiResult = MsiRecordSetString(hRecord, 0, L"\"[#bin.openvpn_gui.exe]\"");
if (uiResult != ERROR_SUCCESS)
{
SetLastError(uiResult); /* MSDN does not mention MsiRecordSetString() to set GetLastError(). But we do have an error code. Set last error manually. */
@@ -391,17 +391,17 @@
}
/* Format string. */
- TCHAR szStackBuf[MAX_PATH];
+ WCHAR szStackBuf[MAX_PATH];
DWORD dwPathSize = _countof(szStackBuf);
- LPTSTR szPath = szStackBuf;
+ LPWSTR szPath = szStackBuf;
uiResult = MsiFormatRecord(hInstall, hRecord, szPath, &dwPathSize);
if (uiResult == ERROR_MORE_DATA)
{
/* Allocate buffer on heap (+1 for terminator), and retry. */
- szPath = (LPTSTR)malloc((++dwPathSize) * sizeof(TCHAR));
+ szPath = (LPWSTR)malloc((++dwPathSize) * sizeof(WCHAR));
if (szPath == NULL)
{
- msg(M_FATAL, "%s: malloc(%u) failed", __FUNCTION__, dwPathSize * sizeof(TCHAR));
+ msg(M_FATAL, "%s: malloc(%u) failed", __FUNCTION__, dwPathSize * sizeof(WCHAR));
uiResult = ERROR_OUTOFMEMORY; goto cleanup_MsiCreateRecord;
}
@@ -470,8 +470,8 @@
schedule_adapter_create(
_Inout_ struct msica_arg_seq *seq,
_Inout_opt_ struct msica_arg_seq *seqRollback,
- _In_z_ LPCTSTR szDisplayName,
- _In_z_ LPCTSTR szHardwareId,
+ _In_z_ LPCWSTR szDisplayName,
+ _In_z_ LPCWSTR szHardwareId,
_Inout_ int *iTicks)
{
/* Get existing network adapters. */
@@ -488,12 +488,12 @@
if (pAdapterOther == NULL)
{
/* No adapter with a same name found. */
- TCHAR szArgument[10 /*create=""|deleteN=""*/ + MAX_PATH /*szDisplayName*/ + 1 /*|*/ + MAX_PATH /*szHardwareId*/ + 1 /*terminator*/];
+ WCHAR szArgument[10 /*create=""|deleteN=""*/ + MAX_PATH /*szDisplayName*/ + 1 /*|*/ + MAX_PATH /*szHardwareId*/ + 1 /*terminator*/];
/* InstallTUNTAPAdapters will create the adapter. */
- _stprintf_s(
+ swprintf_s(
szArgument, _countof(szArgument),
- TEXT("create=\"%.*s|%.*s\""),
+ L"create=\"%.*s|%.*s\"",
MAX_PATH, szDisplayName,
MAX_PATH, szHardwareId);
msica_arg_seq_add_tail(seq, szArgument);
@@ -501,9 +501,9 @@
if (seqRollback)
{
/* InstallTUNTAPAdaptersRollback will delete the adapter. */
- _stprintf_s(
+ swprintf_s(
szArgument, _countof(szArgument),
- TEXT("deleteN=\"%.*s\""),
+ L"deleteN=\"%.*s\"",
MAX_PATH, szDisplayName);
msica_arg_seq_add_head(seqRollback, szArgument);
}
@@ -511,19 +511,19 @@
*iTicks += MSICA_ADAPTER_TICK_SIZE;
break;
}
- else if (_tcsicmp(szDisplayName, pAdapterOther->szName) == 0)
+ else if (wcsicmp(szDisplayName, pAdapterOther->szName) == 0)
{
/* Adapter with a same name found. */
- for (LPCTSTR hwid = pAdapterOther->szzHardwareIDs;; hwid += _tcslen(hwid) + 1)
+ for (LPCWSTR hwid = pAdapterOther->szzHardwareIDs;; hwid += wcslen(hwid) + 1)
{
if (hwid[0] == 0)
{
/* This adapter has a different hardware ID. */
- msg(M_NONFATAL, "%s: Adapter with name \"%" PRIsLPTSTR "\" already exists", __FUNCTION__, pAdapterOther->szName);
+ msg(M_NONFATAL, "%s: Adapter with name \"%ls\" already exists", __FUNCTION__, pAdapterOther->szName);
dwResult = ERROR_ALREADY_EXISTS;
goto cleanup_pAdapterList;
}
- else if (_tcsicmp(hwid, szHardwareId) == 0)
+ else if (wcsicmp(hwid, szHardwareId) == 0)
{
/* This is an adapter with the requested hardware ID. We already have what we want! */
break;
@@ -571,8 +571,8 @@
_Inout_ struct msica_arg_seq *seq,
_Inout_opt_ struct msica_arg_seq *seqCommit,
_Inout_opt_ struct msica_arg_seq *seqRollback,
- _In_z_ LPCTSTR szDisplayName,
- _In_z_ LPCTSTR szzHardwareIDs,
+ _In_z_ LPCWSTR szDisplayName,
+ _In_z_ LPCWSTR szzHardwareIDs,
_Inout_ int *iTicks)
{
/* Get adapters with given hardware ID. */
@@ -586,39 +586,39 @@
/* Does adapter exist? */
for (struct tap_adapter_node *pAdapter = pAdapterList; pAdapter != NULL; pAdapter = pAdapter->pNext)
{
- if (_tcsicmp(szDisplayName, pAdapter->szName) == 0)
+ if (wcsicmp(szDisplayName, pAdapter->szName) == 0)
{
/* Adapter found. */
- TCHAR szArgument[8 /*disable=|enable=|delete=*/ + 38 /*{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}*/ + 1 /*terminator*/];
+ WCHAR szArgument[8 /*disable=|enable=|delete=*/ + 38 /*{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}*/ + 1 /*terminator*/];
if (seqCommit && seqRollback)
{
/* UninstallTUNTAPAdapters will disable the adapter. */
- _stprintf_s(
+ swprintf_s(
szArgument, _countof(szArgument),
- TEXT("disable=") TEXT(PRIXGUID),
+ L"disable=" _L(PRIXGUID),
PRIGUID_PARAM(pAdapter->guid));
msica_arg_seq_add_tail(seq, szArgument);
/* UninstallTUNTAPAdaptersRollback will re-enable the adapter. */
- _stprintf_s(
+ swprintf_s(
szArgument, _countof(szArgument),
- TEXT("enable=") TEXT(PRIXGUID),
+ L"enable=" _L(PRIXGUID),
PRIGUID_PARAM(pAdapter->guid));
msica_arg_seq_add_head(seqRollback, szArgument);
/* UninstallTUNTAPAdaptersCommit will delete the adapter. */
- _stprintf_s(
+ swprintf_s(
szArgument, _countof(szArgument),
- TEXT("delete=") TEXT(PRIXGUID),
+ L"delete=" _L(PRIXGUID),
PRIGUID_PARAM(pAdapter->guid));
msica_arg_seq_add_tail(seqCommit, szArgument);
}
else
{
/* UninstallTUNTAPAdapters will delete the adapter. */
- _stprintf_s(
+ swprintf_s(
szArgument, _countof(szArgument),
- TEXT("delete=") TEXT(PRIXGUID),
+ L"delete=" _L(PRIXGUID),
PRIGUID_PARAM(pAdapter->guid));
msica_arg_seq_add_tail(seq, szArgument);
}
@@ -662,7 +662,7 @@
msica_arg_seq_init(&seqUninstallRollback);
/* Check rollback state. */
- bool bRollbackEnabled = MsiEvaluateCondition(hInstall, TEXT("RollbackDisabled")) != MSICONDITION_TRUE;
+ bool bRollbackEnabled = MsiEvaluateCondition(hInstall, L"RollbackDisabled") != MSICONDITION_TRUE;
/* Open MSI database. */
MSIHANDLE hDatabase = MsiGetActiveDatabase(hInstall);
@@ -674,7 +674,7 @@
}
/* Check if TUNTAPAdapter table exists. If it doesn't exist, there's nothing to do. */
- switch (MsiDatabaseIsTablePersistent(hDatabase, TEXT("TUNTAPAdapter")))
+ switch (MsiDatabaseIsTablePersistent(hDatabase, L"TUNTAPAdapter"))
{
case MSICONDITION_FALSE:
case MSICONDITION_TRUE: break;
@@ -686,12 +686,12 @@
/* Prepare a query to get a list/view of adapters. */
MSIHANDLE hViewST = 0;
- LPCTSTR szQuery = TEXT("SELECT `Adapter`,`DisplayName`,`Condition`,`Component_`,`HardwareId` FROM `TUNTAPAdapter`");
+ LPCWSTR szQuery = L"SELECT `Adapter`,`DisplayName`,`Condition`,`Component_`,`HardwareId` FROM `TUNTAPAdapter`";
uiResult = MsiDatabaseOpenView(hDatabase, szQuery, &hViewST);
if (uiResult != ERROR_SUCCESS)
{
SetLastError(uiResult); /* MSDN does not mention MsiDatabaseOpenView() to set GetLastError(). But we do have an error code. Set last error manually. */
- msg(M_NONFATAL | M_ERRNO, "%s: MsiDatabaseOpenView(\"%" PRIsLPTSTR "\") failed", __FUNCTION__, szQuery);
+ msg(M_NONFATAL | M_ERRNO, "%s: MsiDatabaseOpenView(\"%ls\") failed", __FUNCTION__, szQuery);
goto cleanup_hDatabase;
}
@@ -700,7 +700,7 @@
if (uiResult != ERROR_SUCCESS)
{
SetLastError(uiResult); /* MSDN does not mention MsiViewExecute() to set GetLastError(). But we do have an error code. Set last error manually. */
- msg(M_NONFATAL | M_ERRNO, "%s: MsiViewExecute(\"%" PRIsLPTSTR "\") failed", __FUNCTION__, szQuery);
+ msg(M_NONFATAL | M_ERRNO, "%s: MsiViewExecute(\"%ls\") failed", __FUNCTION__, szQuery);
goto cleanup_hViewST;
}
@@ -733,7 +733,7 @@
INSTALLSTATE iInstalled, iAction;
{
/* Read adapter component ID (`Component_` is field #4). */
- LPTSTR szValue = NULL;
+ LPWSTR szValue = NULL;
uiResult = msi_get_record_string(hRecord, 4, &szValue);
if (uiResult != ERROR_SUCCESS)
{
@@ -745,7 +745,7 @@
if (uiResult != ERROR_SUCCESS)
{
SetLastError(uiResult); /* MSDN does not mention MsiGetComponentState() to set GetLastError(). But we do have an error code. Set last error manually. */
- msg(M_NONFATAL | M_ERRNO, "%s: MsiGetComponentState(\"%" PRIsLPTSTR "\") failed", __FUNCTION__, szValue);
+ msg(M_NONFATAL | M_ERRNO, "%s: MsiGetComponentState(\"%ls\") failed", __FUNCTION__, szValue);
free(szValue);
goto cleanup_hRecord;
}
@@ -753,26 +753,26 @@
}
/* Get adapter display name (`DisplayName` is field #2). */
- LPTSTR szDisplayName = NULL;
+ LPWSTR szDisplayName = NULL;
uiResult = msi_format_field(hInstall, hRecord, 2, &szDisplayName);
if (uiResult != ERROR_SUCCESS)
{
goto cleanup_hRecord;
}
/* `DisplayName` field type is [Filename](https://docs.microsoft.com/en-us/windows/win32/msi/filename), which is either "8.3|long name" or "8.3". */
- LPTSTR szDisplayNameEx = _tcschr(szDisplayName, TEXT('|'));
+ LPWSTR szDisplayNameEx = wcschr(szDisplayName, L'|');
szDisplayNameEx = szDisplayNameEx != NULL ? szDisplayNameEx + 1 : szDisplayName;
/* Get adapter hardware ID (`HardwareId` is field #5). */
- TCHAR szzHardwareIDs[0x100] = { 0 };
+ WCHAR szzHardwareIDs[0x100] = { 0 };
{
- LPTSTR szHwId = NULL;
+ LPWSTR szHwId = NULL;
uiResult = msi_get_record_string(hRecord, 5, &szHwId);
if (uiResult != ERROR_SUCCESS)
{
goto cleanup_szDisplayName;
}
- memcpy_s(szzHardwareIDs, sizeof(szzHardwareIDs) - 2*sizeof(TCHAR) /*requires double zero termination*/, szHwId, _tcslen(szHwId)*sizeof(TCHAR));
+ memcpy_s(szzHardwareIDs, sizeof(szzHardwareIDs) - 2*sizeof(WCHAR) /*requires double zero termination*/, szHwId, wcslen(szHwId)*sizeof(WCHAR));
free(szHwId);
}
@@ -783,7 +783,7 @@
if (iAction >= INSTALLSTATE_LOCAL)
{
/* Read and evaluate adapter condition (`Condition` is field #3). */
- LPTSTR szValue = NULL;
+ LPWSTR szValue = NULL;
uiResult = msi_get_record_string(hRecord, 3, &szValue);
if (uiResult != ERROR_SUCCESS)
{
@@ -805,7 +805,7 @@
case MSICONDITION_ERROR:
uiResult = ERROR_INVALID_FIELD;
- msg(M_NONFATAL | M_ERRNO, "%s: MsiEvaluateCondition(\"%" PRIsLPTSTR "\") failed", __FUNCTION__, szValue);
+ msg(M_NONFATAL | M_ERRNO, "%s: MsiEvaluateCondition(\"%ls\") failed", __FUNCTION__, szValue);
free(szValue);
goto cleanup_szDisplayName;
}
@@ -864,11 +864,11 @@
}
/* save path to user's temp dir to be used later by deferred actions */
- TCHAR tmpDir[MAX_PATH];
+ WCHAR tmpDir[MAX_PATH];
GetTempPath(MAX_PATH, tmpDir);
- TCHAR str[MAX_PATH + 7];
- _stprintf_s(str, _countof(str), TEXT("tmpdir=%") TEXT(PRIsLPTSTR), tmpDir);
+ WCHAR str[MAX_PATH + 7];
+ swprintf_s(str, _countof(str), L"tmpdir=%ls", tmpDir);
msica_arg_seq_add_tail(&seqInstall, str);
msica_arg_seq_add_tail(&seqInstallCommit, str);
msica_arg_seq_add_tail(&seqInstallRollback, str);
@@ -877,12 +877,12 @@
msica_arg_seq_add_tail(&seqUninstallRollback, str);
/* Store deferred custom action parameters. */
- if ((uiResult = setup_sequence(hInstall, TEXT("InstallTUNTAPAdapters" ), &seqInstall )) != ERROR_SUCCESS
- || (uiResult = setup_sequence(hInstall, TEXT("InstallTUNTAPAdaptersCommit" ), &seqInstallCommit )) != ERROR_SUCCESS
- || (uiResult = setup_sequence(hInstall, TEXT("InstallTUNTAPAdaptersRollback" ), &seqInstallRollback )) != ERROR_SUCCESS
- || (uiResult = setup_sequence(hInstall, TEXT("UninstallTUNTAPAdapters" ), &seqUninstall )) != ERROR_SUCCESS
- || (uiResult = setup_sequence(hInstall, TEXT("UninstallTUNTAPAdaptersCommit" ), &seqUninstallCommit )) != ERROR_SUCCESS
- || (uiResult = setup_sequence(hInstall, TEXT("UninstallTUNTAPAdaptersRollback"), &seqUninstallRollback)) != ERROR_SUCCESS)
+ if ((uiResult = setup_sequence(hInstall, L"InstallTUNTAPAdapters", &seqInstall )) != ERROR_SUCCESS
+ || (uiResult = setup_sequence(hInstall, L"InstallTUNTAPAdaptersCommit", &seqInstallCommit )) != ERROR_SUCCESS
+ || (uiResult = setup_sequence(hInstall, L"InstallTUNTAPAdaptersRollback", &seqInstallRollback )) != ERROR_SUCCESS
+ || (uiResult = setup_sequence(hInstall, L"UninstallTUNTAPAdapters", &seqUninstall )) != ERROR_SUCCESS
+ || (uiResult = setup_sequence(hInstall, L"UninstallTUNTAPAdaptersCommit", &seqUninstallCommit )) != ERROR_SUCCESS
+ || (uiResult = setup_sequence(hInstall, L"UninstallTUNTAPAdaptersRollback", &seqUninstallRollback)) != ERROR_SUCCESS)
{
goto cleanup_hRecordProg;
}
@@ -1027,7 +1027,7 @@
{
/* Report the name of the adapter to installer. */
MSIHANDLE hRecord = MsiCreateRecord(4);
- MsiRecordSetString(hRecord, 1, TEXT("Creating adapter"));
+ MsiRecordSetString(hRecord, 1, L"Creating adapter");
MsiRecordSetString(hRecord, 2, szName);
MsiRecordSetString(hRecord, 3, szHardwareId);
int iResult = MsiProcessMessage(hInstall, INSTALLMESSAGE_ACTIONDATA, hRecord);
@@ -1056,7 +1056,7 @@
{
/* Report the name of the adapter to installer. */
MSIHANDLE hRecord = MsiCreateRecord(3);
- MsiRecordSetString(hRecord, 1, TEXT("Deleting adapter"));
+ MsiRecordSetString(hRecord, 1, L"Deleting adapter");
MsiRecordSetString(hRecord, 2, szName);
int iResult = MsiProcessMessage(hInstall, INSTALLMESSAGE_ACTIONDATA, hRecord);
MsiCloseHandle(hRecord);
@@ -1075,7 +1075,7 @@
/* Does the adapter exist? */
for (struct tap_adapter_node *pAdapter = pAdapterList; pAdapter != NULL; pAdapter = pAdapter->pNext)
{
- if (_tcsicmp(szName, pAdapter->szName) == 0)
+ if (wcsicmp(szName, pAdapter->szName) == 0)
{
/* Adapter found. */
dwResult = tap_delete_adapter(NULL, &pAdapter->guid, &bRebootRequired);
@@ -24,11 +24,11 @@
#include "service.h"
#include "validate.h"
-LPCTSTR service_instance = TEXT("");
+LPCWSTR service_instance = L"";
static wchar_t win_sys_path[MAX_PATH];
static DWORD
-GetRegString(HKEY key, LPCTSTR value, LPTSTR data, DWORD size, LPCTSTR default_value)
+GetRegString(HKEY key, LPCWSTR value, LPWSTR data, DWORD size, LPCWSTR default_value)
{
LONG status = RegGetValue(key, NULL, value, RRF_RT_REG_SZ,
NULL, (LPBYTE) data, &size);
@@ -45,7 +45,7 @@
if (status != ERROR_SUCCESS)
{
SetLastError(status);
- return MsgToEventLog(M_SYSERR, TEXT("Error querying registry value: HKLM\\SOFTWARE\\") TEXT(PACKAGE_NAME) TEXT("%ls\\%ls"), service_instance, value);
+ return MsgToEventLog(M_SYSERR, L"Error querying registry value: HKLM\\SOFTWARE\\" _L(PACKAGE_NAME) L"%ls\\%ls", service_instance, value);
}
return ERROR_SUCCESS;
@@ -55,21 +55,21 @@
DWORD
GetOpenvpnSettings(settings_t *s)
{
- TCHAR reg_path[256];
- TCHAR priority[64];
- TCHAR append[2];
+ WCHAR reg_path[256];
+ WCHAR priority[64];
+ WCHAR append[2];
DWORD error;
HKEY key;
- TCHAR install_path[MAX_PATH];
- TCHAR default_value[MAX_PATH];
+ WCHAR install_path[MAX_PATH];
+ WCHAR default_value[MAX_PATH];
- swprintf(reg_path, _countof(reg_path), TEXT("SOFTWARE\\") TEXT(PACKAGE_NAME) TEXT("%ls"), service_instance);
+ swprintf(reg_path, _countof(reg_path), L"SOFTWARE\\" _L(PACKAGE_NAME) L"%ls", service_instance);
LONG status = RegOpenKeyEx(HKEY_LOCAL_MACHINE, reg_path, 0, KEY_READ, &key);
if (status != ERROR_SUCCESS)
{
SetLastError(status);
- return MsgToEventLog(M_SYSERR, TEXT("Could not open Registry key HKLM\\%ls not found"), reg_path);
+ return MsgToEventLog(M_SYSERR, L"Could not open Registry key HKLM\\%ls not found", reg_path);
}
/* The default value of REG_KEY is the install path */
@@ -80,97 +80,97 @@
goto out;
}
- swprintf(default_value, _countof(default_value), TEXT("%ls\\bin\\openvpn.exe"),
+ swprintf(default_value, _countof(default_value), L"%ls\\bin\\openvpn.exe",
install_path);
- error = GetRegString(key, TEXT("exe_path"), s->exe_path, sizeof(s->exe_path), default_value);
+ error = GetRegString(key, L"exe_path", s->exe_path, sizeof(s->exe_path), default_value);
if (error != ERROR_SUCCESS)
{
goto out;
}
- swprintf(default_value, _countof(default_value), TEXT("%ls\\config"), install_path);
- error = GetRegString(key, TEXT("config_dir"), s->config_dir, sizeof(s->config_dir),
+ swprintf(default_value, _countof(default_value), L"%ls\\config", install_path);
+ error = GetRegString(key, L"config_dir", s->config_dir, sizeof(s->config_dir),
default_value);
if (error != ERROR_SUCCESS)
{
goto out;
}
- error = GetRegString(key, TEXT("config_ext"), s->ext_string, sizeof(s->ext_string),
- TEXT(".ovpn"));
+ error = GetRegString(key, L"config_ext", s->ext_string, sizeof(s->ext_string),
+ L".ovpn");
if (error != ERROR_SUCCESS)
{
goto out;
}
- swprintf(default_value, _countof(default_value), TEXT("%ls\\log"), install_path);
- error = GetRegString(key, TEXT("log_dir"), s->log_dir, sizeof(s->log_dir), default_value);
+ swprintf(default_value, _countof(default_value), L"%ls\\log", install_path);
+ error = GetRegString(key, L"log_dir", s->log_dir, sizeof(s->log_dir), default_value);
if (error != ERROR_SUCCESS)
{
goto out;
}
- error = GetRegString(key, TEXT("priority"), priority, sizeof(priority),
- TEXT("NORMAL_PRIORITY_CLASS"));
+ error = GetRegString(key, L"priority", priority, sizeof(priority),
+ L"NORMAL_PRIORITY_CLASS");
if (error != ERROR_SUCCESS)
{
goto out;
}
- error = GetRegString(key, TEXT("log_append"), append, sizeof(append), TEXT("0"));
+ error = GetRegString(key, L"log_append", append, sizeof(append), L"0");
if (error != ERROR_SUCCESS)
{
goto out;
}
/* read if present, else use default */
- error = GetRegString(key, TEXT("ovpn_admin_group"), s->ovpn_admin_group,
+ error = GetRegString(key, L"ovpn_admin_group", s->ovpn_admin_group,
sizeof(s->ovpn_admin_group), OVPN_ADMIN_GROUP);
if (error != ERROR_SUCCESS)
{
goto out;
}
/* set process priority */
- if (!_wcsicmp(priority, TEXT("IDLE_PRIORITY_CLASS")))
+ if (!_wcsicmp(priority, L"IDLE_PRIORITY_CLASS"))
{
s->priority = IDLE_PRIORITY_CLASS;
}
- else if (!_wcsicmp(priority, TEXT("BELOW_NORMAL_PRIORITY_CLASS")))
+ else if (!_wcsicmp(priority, L"BELOW_NORMAL_PRIORITY_CLASS"))
{
s->priority = BELOW_NORMAL_PRIORITY_CLASS;
}
- else if (!_wcsicmp(priority, TEXT("NORMAL_PRIORITY_CLASS")))
+ else if (!_wcsicmp(priority, L"NORMAL_PRIORITY_CLASS"))
{
s->priority = NORMAL_PRIORITY_CLASS;
}
- else if (!_wcsicmp(priority, TEXT("ABOVE_NORMAL_PRIORITY_CLASS")))
+ else if (!_wcsicmp(priority, L"ABOVE_NORMAL_PRIORITY_CLASS"))
{
s->priority = ABOVE_NORMAL_PRIORITY_CLASS;
}
- else if (!_wcsicmp(priority, TEXT("HIGH_PRIORITY_CLASS")))
+ else if (!_wcsicmp(priority, L"HIGH_PRIORITY_CLASS"))
{
s->priority = HIGH_PRIORITY_CLASS;
}
else
{
SetLastError(ERROR_INVALID_DATA);
- error = MsgToEventLog(M_SYSERR, TEXT("Unknown priority name: %ls"), priority);
+ error = MsgToEventLog(M_SYSERR, L"Unknown priority name: %ls", priority);
goto out;
}
/* set log file append/truncate flag */
- if (append[0] == TEXT('0'))
+ if (append[0] == L'0')
{
s->append = FALSE;
}
- else if (append[0] == TEXT('1'))
+ else if (append[0] == L'1')
{
s->append = TRUE;
}
else
{
SetLastError(ERROR_INVALID_DATA);
- error = MsgToEventLog(M_ERR, TEXT("Log file append flag (given as '%ls') must be '0' or '1'"), append);
+ error = MsgToEventLog(M_ERR, L"Log file append flag (given as '%ls') must be '0' or '1'", append);
goto out;
}
@@ -180,13 +180,13 @@
}
-LPCTSTR
+LPCWSTR
GetLastErrorText(void)
{
DWORD error;
- static TCHAR buf[256];
+ static WCHAR buf[256];
DWORD len;
- LPTSTR tmp = NULL;
+ LPWSTR tmp = NULL;
error = GetLastError();
len = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ARGUMENT_ARRAY,
@@ -194,12 +194,12 @@
if (len == 0 || (long) _countof(buf) < (long) len + 14)
{
- buf[0] = TEXT('\0');
+ buf[0] = L'\0';
}
else
{
- tmp[wcslen(tmp) - 2] = TEXT('\0'); /* remove CR/LF characters */
- swprintf(buf, _countof(buf), TEXT("%ls (0x%x)"), tmp, error);
+ tmp[wcslen(tmp) - 2] = L'\0'; /* remove CR/LF characters */
+ swprintf(buf, _countof(buf), L"%ls (0x%x)", tmp, error);
}
if (tmp)
@@ -212,12 +212,12 @@
DWORD
-MsgToEventLog(DWORD flags, LPCTSTR format, ...)
+MsgToEventLog(DWORD flags, LPCWSTR format, ...)
{
HANDLE hEventSource;
- TCHAR msg[2][256];
+ WCHAR msg[2][256];
DWORD error = 0;
- LPCTSTR err_msg = TEXT("");
+ LPCWSTR err_msg = L"";
va_list arglist;
if (flags & MSG_FLAGS_SYS_CODE)
@@ -230,14 +230,14 @@
if (hEventSource != NULL)
{
swprintf(msg[0], _countof(msg[0]),
- TEXT("%ls%ls%ls: %ls"), APPNAME, service_instance,
- (flags & MSG_FLAGS_ERROR) ? TEXT(" error") : TEXT(""), err_msg);
+ L"%ls%ls%ls: %ls", APPNAME, service_instance,
+ (flags & MSG_FLAGS_ERROR) ? L" error" : L"", err_msg);
va_start(arglist, format);
vswprintf(msg[1], _countof(msg[1]), format, arglist);
va_end(arglist);
- const TCHAR *mesg[] = { msg[0], msg[1] };
+ const WCHAR *mesg[] = { msg[0], msg[1] };
ReportEvent(hEventSource, flags & MSG_FLAGS_ERROR ?
EVENTLOG_ERROR_TYPE : EVENTLOG_INFORMATION_TYPE,
0, 0, NULL, 2, 0, mesg, NULL);
@@ -60,8 +60,8 @@
openvpn_service_t interactive_service = {
interactive,
- TEXT(PACKAGE_NAME) TEXT("ServiceInteractive"),
- TEXT(PACKAGE_NAME) TEXT(" Interactive Service"),
+ _L(PACKAGE_NAME) L"ServiceInteractive",
+ _L(PACKAGE_NAME) L" Interactive Service",
SERVICE_DEPENDENCIES,
SERVICE_AUTO_START
};
@@ -462,7 +462,7 @@
bytes = PeekNamedPipeAsync(pipe, 1, &exit_event);
if (bytes == 0)
{
- MsgToEventLog(M_SYSERR, TEXT("PeekNamedPipeAsync failed"));
+ MsgToEventLog(M_SYSERR, L"PeekNamedPipeAsync failed");
ReturnLastError(pipe, L"PeekNamedPipeAsync");
goto err;
}
@@ -470,7 +470,7 @@
size = bytes / sizeof(*data);
if (size == 0)
{
- MsgToEventLog(M_SYSERR, TEXT("malformed startup data: 1 byte received"));
+ MsgToEventLog(M_SYSERR, L"malformed startup data: 1 byte received");
ReturnError(pipe, ERROR_STARTUP_DATA, L"GetStartupData", 1, &exit_event);
goto err;
}
@@ -478,7 +478,7 @@
data = malloc(bytes);
if (data == NULL)
{
- MsgToEventLog(M_SYSERR, TEXT("malloc failed"));
+ MsgToEventLog(M_SYSERR, L"malloc failed");
ReturnLastError(pipe, L"malloc");
goto err;
}
@@ -486,14 +486,14 @@
read = ReadPipeAsync(pipe, data, bytes, 1, &exit_event);
if (bytes != read)
{
- MsgToEventLog(M_SYSERR, TEXT("ReadPipeAsync failed"));
+ MsgToEventLog(M_SYSERR, L"ReadPipeAsync failed");
ReturnLastError(pipe, L"ReadPipeAsync");
goto err;
}
if (data[size - 1] != 0)
{
- MsgToEventLog(M_ERR, TEXT("Startup data is not NULL terminated"));
+ MsgToEventLog(M_ERR, L"Startup data is not NULL terminated");
ReturnError(pipe, ERROR_STARTUP_DATA, L"GetStartupData", 1, &exit_event);
goto err;
}
@@ -503,7 +503,7 @@
size -= len;
if (size <= 0)
{
- MsgToEventLog(M_ERR, TEXT("Startup data ends at working directory"));
+ MsgToEventLog(M_ERR, L"Startup data ends at working directory");
ReturnError(pipe, ERROR_STARTUP_DATA, L"GetStartupData", 1, &exit_event);
goto err;
}
@@ -513,7 +513,7 @@
size -= len;
if (size <= 0)
{
- MsgToEventLog(M_ERR, TEXT("Startup data ends at command line options"));
+ MsgToEventLog(M_ERR, L"Startup data ends at command line options");
ReturnError(pipe, ERROR_STARTUP_DATA, L"GetStartupData", 1, &exit_event);
goto err;
}
@@ -746,15 +746,15 @@
static void
BlockDNSErrHandler(DWORD err, const char *msg)
{
- TCHAR buf[256];
- LPCTSTR err_str;
+ WCHAR buf[256];
+ LPCWSTR err_str;
if (!err)
{
return;
}
- err_str = TEXT("Unknown Win32 Error");
+ err_str = L"Unknown Win32 Error";
if (FormatMessage(FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM
| FORMAT_MESSAGE_ARGUMENT_ARRAY,
@@ -796,7 +796,7 @@
}
else
{
- MsgToEventLog(M_ERR, TEXT("No previous block filters to delete"));
+ MsgToEventLog(M_ERR, L"No previous block filters to delete");
}
return err;
@@ -913,7 +913,7 @@
WaitForSingleObject(pi.hProcess, timeout ? timeout : INFINITE);
if (!GetExitCodeProcess(pi.hProcess, &exit_code))
{
- MsgToEventLog(M_SYSERR, TEXT("ExecCommand: Error getting exit_code:"));
+ MsgToEventLog(M_SYSERR, L"ExecCommand: Error getting exit_code:");
exit_code = GetLastError();
}
else if (exit_code == STILL_ACTIVE)
@@ -922,17 +922,17 @@
/* kill without impunity */
TerminateProcess(pi.hProcess, exit_code);
- MsgToEventLog(M_ERR, TEXT("ExecCommand: \"%ls %ls\" killed after timeout"),
+ MsgToEventLog(M_ERR, L"ExecCommand: \"%ls %ls\" killed after timeout",
argv0, cmdline);
}
else if (exit_code)
{
- MsgToEventLog(M_ERR, TEXT("ExecCommand: \"%ls %ls\" exited with status = %lu"),
+ MsgToEventLog(M_ERR, L"ExecCommand: \"%ls %ls\" exited with status = %lu",
argv0, cmdline, exit_code);
}
else
{
- MsgToEventLog(M_INFO, TEXT("ExecCommand: \"%ls %ls\" completed"), argv0, cmdline);
+ MsgToEventLog(M_INFO, L"ExecCommand: \"%ls %ls\" completed", argv0, cmdline);
}
CloseHandle(pi.hProcess);
@@ -941,7 +941,7 @@
else
{
exit_code = GetLastError();
- MsgToEventLog(M_SYSERR, TEXT("ExecCommand: could not run \"%ls %ls\" :"),
+ MsgToEventLog(M_SYSERR, L"ExecCommand: could not run \"%ls %ls\" :",
argv0, cmdline);
}
@@ -986,12 +986,12 @@
err = 0;
if (!ReleaseSemaphore(rdns_semaphore, 1, NULL) )
{
- err = MsgToEventLog(M_SYSERR, TEXT("RegisterDNS: Failed to release regsiter-dns semaphore:"));
+ err = MsgToEventLog(M_SYSERR, L"RegisterDNS: Failed to release regsiter-dns semaphore:");
}
}
else
{
- MsgToEventLog(M_ERR, TEXT("RegisterDNS: Failed to lock register-dns semaphore"));
+ MsgToEventLog(M_ERR, L"RegisterDNS: Failed to lock register-dns semaphore");
err = ERROR_SEM_TIMEOUT; /* Windows error code 0x79 */
}
return err;
@@ -1194,7 +1194,7 @@
if (apply_gpol && ApplyGpolSettings() == FALSE)
{
- MsgToEventLog(M_ERR, TEXT("ApplyDnsSettings: sending GPOL notification failed"));
+ MsgToEventLog(M_ERR, L"ApplyDnsSettings: sending GPOL notification failed");
}
scm = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
@@ -1442,7 +1442,7 @@
{
if (!list || wcslen(list) == 0)
{
- MsgToEventLog(M_ERR, TEXT("StoreInitialDnsSearchList: empty search list"));
+ MsgToEventLog(M_ERR, L"StoreInitialDnsSearchList: empty search list");
return FALSE;
}
@@ -2079,7 +2079,7 @@
if (!DuplicateHandle(ovpn_proc, orig_handle, GetCurrentProcess(), new_handle, 0, FALSE, DUPLICATE_SAME_ACCESS))
{
err = GetLastError();
- MsgToEventLog(M_SYSERR, TEXT("Could not duplicate handle"));
+ MsgToEventLog(M_SYSERR, L"Could not duplicate handle");
return err;
}
@@ -2103,7 +2103,7 @@
if (*ring == NULL)
{
err = GetLastError();
- MsgToEventLog(M_SYSERR, TEXT("Could not map shared memory"));
+ MsgToEventLog(M_SYSERR, L"Could not map shared memory");
return err;
}
@@ -2166,7 +2166,7 @@
send_tail_moved, receive_tail_moved))
{
err = GetLastError();
- MsgToEventLog(M_SYSERR, TEXT("Could not register ring buffers"));
+ MsgToEventLog(M_SYSERR, L"Could not register ring buffers");
goto out;
}
@@ -2299,7 +2299,7 @@
default:
ack.error_number = ERROR_MESSAGE_TYPE;
- MsgToEventLog(MSG_FLAGS_ERROR, TEXT("Unknown message type %d"), msg.header.type);
+ MsgToEventLog(MSG_FLAGS_ERROR, L"Unknown message type %d", msg.header.type);
break;
}
@@ -2391,7 +2391,7 @@
STARTUPINFOW startup_info;
PROCESS_INFORMATION proc_info;
LPVOID user_env = NULL;
- TCHAR ovpn_pipe_name[256]; /* The entire pipe name string can be up to 256 characters long according to MSDN. */
+ WCHAR ovpn_pipe_name[256]; /* The entire pipe name string can be up to 256 characters long according to MSDN. */
LPCWSTR exe_path;
WCHAR *cmdline = NULL;
size_t cmdline_size;
@@ -2509,14 +2509,14 @@
ea[0].grfInheritance = NO_INHERITANCE;
ea[0].Trustee.TrusteeForm = TRUSTEE_IS_SID;
ea[0].Trustee.TrusteeType = TRUSTEE_IS_UNKNOWN;
- ea[0].Trustee.ptstrName = (LPTSTR) svc_user->User.Sid;
+ ea[0].Trustee.ptstrName = (LPWSTR) svc_user->User.Sid;
ea[1].grfAccessPermissions = READ_CONTROL | SYNCHRONIZE | PROCESS_VM_READ
|SYNCHRONIZE | PROCESS_TERMINATE | PROCESS_QUERY_INFORMATION;
ea[1].grfAccessMode = SET_ACCESS;
ea[1].grfInheritance = NO_INHERITANCE;
ea[1].Trustee.TrusteeForm = TRUSTEE_IS_SID;
ea[1].Trustee.TrusteeType = TRUSTEE_IS_UNKNOWN;
- ea[1].Trustee.ptstrName = (LPTSTR) ovpn_user->User.Sid;
+ ea[1].Trustee.ptstrName = (LPWSTR) ovpn_user->User.Sid;
/* Set owner and DACL of OpenVPN security descriptor */
if (!SetSecurityDescriptorOwner(&ovpn_sd, svc_user->User.Sid, FALSE))
@@ -2543,7 +2543,7 @@
}
/* use /dev/null for stdout of openvpn (client should use --log for output) */
- stdout_write = CreateFile(_T("NUL"), GENERIC_WRITE, FILE_SHARE_WRITE,
+ stdout_write = CreateFile(_L("NUL"), GENERIC_WRITE, FILE_SHARE_WRITE,
&inheritable, OPEN_EXISTING, 0, NULL);
if (stdout_write == INVALID_HANDLE_VALUE)
{
@@ -2559,7 +2559,7 @@
}
swprintf(ovpn_pipe_name, _countof(ovpn_pipe_name),
- TEXT("\\\\.\\pipe\\") TEXT(PACKAGE) TEXT("%ls\\service_%lu"), service_instance, GetCurrentThreadId());
+ L"\\\\.\\pipe\\" _L(PACKAGE) L"%ls\\service_%lu", service_instance, GetCurrentThreadId());
ovpn_pipe = CreateNamedPipe(ovpn_pipe_name,
PIPE_ACCESS_DUPLEX | FILE_FLAG_FIRST_PIPE_INSTANCE | FILE_FLAG_OVERLAPPED,
PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT, 1, 128, 128, 0, NULL);
@@ -2654,7 +2654,7 @@
if (bytes > sizeof(pipe_message_t))
{
/* process at the other side of the pipe is misbehaving, shut it down */
- MsgToEventLog(MSG_FLAGS_ERROR, TEXT("OpenVPN process sent too large payload length to the pipe (%lu bytes), it will be terminated"), bytes);
+ MsgToEventLog(MSG_FLAGS_ERROR, L"OpenVPN process sent too large payload length to the pipe (%lu bytes), it will be terminated", bytes);
break;
}
@@ -2734,12 +2734,12 @@
* allow read/write for authenticated users
* deny all access to anonymous
*/
- const TCHAR *sddlString = TEXT("D:(A;OICI;GA;;;S-1-5-18)(D;OICI;0x4;;;S-1-1-0)(A;OICI;GRGW;;;S-1-5-11)(D;;GA;;;S-1-5-7)");
+ const WCHAR *sddlString = L"D:(A;OICI;GA;;;S-1-5-18)(D;OICI;0x4;;;S-1-1-0)(A;OICI;GRGW;;;S-1-5-11)(D;;GA;;;S-1-5-7)";
PSECURITY_DESCRIPTOR sd = NULL;
if (!ConvertStringSecurityDescriptorToSecurityDescriptor(sddlString, SDDL_REVISION_1, &sd, NULL))
{
- MsgToEventLog(M_SYSERR, TEXT("ConvertStringSecurityDescriptorToSecurityDescriptor failed."));
+ MsgToEventLog(M_SYSERR, L"ConvertStringSecurityDescriptorToSecurityDescriptor failed.");
return INVALID_HANDLE_VALUE;
}
@@ -2758,8 +2758,8 @@
first = FALSE;
}
- TCHAR pipe_name[256]; /* The entire pipe name string can be up to 256 characters long according to MSDN. */
- swprintf(pipe_name, _countof(pipe_name), TEXT("\\\\.\\pipe\\") TEXT(PACKAGE) TEXT("%ls\\service"), service_instance);
+ WCHAR pipe_name[256]; /* The entire pipe name string can be up to 256 characters long according to MSDN. */
+ swprintf(pipe_name, _countof(pipe_name), L"\\\\.\\pipe\\" _L(PACKAGE) L"%ls\\service", service_instance);
HANDLE pipe = CreateNamedPipe(pipe_name, flags,
PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_REJECT_REMOTE_CLIENTS,
PIPE_UNLIMITED_INSTANCES, 1024, 1024, 0, &sa);
@@ -2768,7 +2768,7 @@
if (pipe == INVALID_HANDLE_VALUE)
{
- MsgToEventLog(M_SYSERR, TEXT("Could not create named pipe"));
+ MsgToEventLog(M_SYSERR, L"Could not create named pipe");
return INVALID_HANDLE_VALUE;
}
@@ -2840,7 +2840,7 @@
VOID WINAPI
-ServiceStartInteractiveOwn(DWORD dwArgc, LPTSTR *lpszArgv)
+ServiceStartInteractiveOwn(DWORD dwArgc, LPWSTR *lpszArgv)
{
status.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
ServiceStartInteractive(dwArgc, lpszArgv);
@@ -2876,7 +2876,7 @@
}
VOID WINAPI
-ServiceStartInteractive(DWORD dwArgc, LPTSTR *lpszArgv)
+ServiceStartInteractive(DWORD dwArgc, LPWSTR *lpszArgv)
{
HANDLE pipe, io_event = NULL;
OVERLAPPED overlapped;
@@ -2911,14 +2911,14 @@
exit_event = CreateEvent(NULL, TRUE, FALSE, NULL);
if (!exit_event || !io_event)
{
- error = MsgToEventLog(M_SYSERR, TEXT("Could not create event"));
+ error = MsgToEventLog(M_SYSERR, L"Could not create event");
goto out;
}
rdns_semaphore = CreateSemaphoreW(NULL, 1, 1, NULL);
if (!rdns_semaphore)
{
- error = MsgToEventLog(M_SYSERR, TEXT("Could not create semaphore for register-dns"));
+ error = MsgToEventLog(M_SYSERR, L"Could not create semaphore for register-dns");
goto out;
}
@@ -2944,7 +2944,7 @@
&& GetLastError() != ERROR_PIPE_CONNECTED
&& GetLastError() != ERROR_IO_PENDING)
{
- MsgToEventLog(M_SYSERR, TEXT("Could not connect pipe"));
+ MsgToEventLog(M_SYSERR, L"Could not connect pipe");
break;
}
@@ -2989,7 +2989,7 @@
CancelIo(pipe);
if (error == WAIT_FAILED)
{
- MsgToEventLog(M_SYSERR, TEXT("WaitForMultipleObjects failed"));
+ MsgToEventLog(M_SYSERR, L"WaitForMultipleObjects failed");
SetEvent(exit_event);
/* Give some time for worker threads to exit and then terminate */
Sleep(1000);
@@ -47,7 +47,7 @@
res = SetServiceStatus(service, status);
if (!res)
{
- MsgToEventLog(MSG_FLAGS_ERROR, TEXT("SetServiceStatus"));
+ MsgToEventLog(MSG_FLAGS_ERROR, L"SetServiceStatus");
}
return res;
@@ -58,22 +58,22 @@
{
SC_HANDLE service;
SC_HANDLE svc_ctl_mgr;
- TCHAR path[512];
+ WCHAR path[512];
int i, ret = _service_max;
if (GetModuleFileName(NULL, path + 1, _countof(path) - 2) == 0)
{
- wprintf(TEXT("Unable to install service - %ls\n"), GetLastErrorText());
+ wprintf(L"Unable to install service - %ls\n", GetLastErrorText());
return 1;
}
- path[0] = TEXT('\"');
- wcscat_s(path, _countof(path), TEXT("\""));
+ path[0] = L'\"';
+ wcscat_s(path, _countof(path), L"\"");
svc_ctl_mgr = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT | SC_MANAGER_CREATE_SERVICE);
if (svc_ctl_mgr == NULL)
{
- wprintf(TEXT("OpenSCManager failed - %ls\n"), GetLastErrorText());
+ wprintf(L"OpenSCManager failed - %ls\n", GetLastErrorText());
return 1;
}
@@ -91,13 +91,13 @@
NULL, NULL);
if (service)
{
- wprintf(TEXT("%ls installed.\n"), openvpn_service[i].display_name);
+ wprintf(L"%ls installed.\n", openvpn_service[i].display_name);
CloseServiceHandle(service);
--ret;
}
else
{
- wprintf(TEXT("CreateService failed - %ls\n"), GetLastErrorText());
+ wprintf(L"CreateService failed - %ls\n", GetLastErrorText());
}
}
@@ -116,7 +116,7 @@
svc_ctl_mgr = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (svc_ctl_mgr == NULL)
{
- wprintf(TEXT("OpenSCManager failed - %ls\n"), GetLastErrorText());
+ wprintf(L"OpenSCManager failed - %ls\n", GetLastErrorText());
return 1;
}
@@ -125,19 +125,19 @@
{
if (StartService(service, 0, NULL))
{
- wprintf(TEXT("Service Started\n"));
+ wprintf(L"Service Started\n");
ret = 0;
}
else
{
- wprintf(TEXT("StartService failed - %ls\n"), GetLastErrorText());
+ wprintf(L"StartService failed - %ls\n", GetLastErrorText());
}
CloseServiceHandle(service);
}
else
{
- wprintf(TEXT("OpenService failed - %ls\n"), GetLastErrorText());
+ wprintf(L"OpenService failed - %ls\n", GetLastErrorText());
}
CloseServiceHandle(svc_ctl_mgr);
@@ -156,7 +156,7 @@
svc_ctl_mgr = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT);
if (svc_ctl_mgr == NULL)
{
- wprintf(TEXT("OpenSCManager failed - %ls\n"), GetLastErrorText());
+ wprintf(L"OpenSCManager failed - %ls\n", GetLastErrorText());
return 1;
}
@@ -167,21 +167,21 @@
DELETE | SERVICE_STOP | SERVICE_QUERY_STATUS);
if (service == NULL)
{
- wprintf(TEXT("OpenService failed - %ls\n"), GetLastErrorText());
+ wprintf(L"OpenService failed - %ls\n", GetLastErrorText());
goto out;
}
/* try to stop the service */
if (ControlService(service, SERVICE_CONTROL_STOP, &status))
{
- wprintf(TEXT("Stopping %ls."), ovpn_svc->display_name);
+ wprintf(L"Stopping %ls.", ovpn_svc->display_name);
Sleep(1000);
while (QueryServiceStatus(service, &status))
{
if (status.dwCurrentState == SERVICE_STOP_PENDING)
{
- wprintf(TEXT("."));
+ wprintf(L".");
Sleep(1000);
}
else
@@ -192,23 +192,23 @@
if (status.dwCurrentState == SERVICE_STOPPED)
{
- wprintf(TEXT("\n%ls stopped.\n"), ovpn_svc->display_name);
+ wprintf(L"\n%ls stopped.\n", ovpn_svc->display_name);
}
else
{
- wprintf(TEXT("\n%ls failed to stop.\n"), ovpn_svc->display_name);
+ wprintf(L"\n%ls failed to stop.\n", ovpn_svc->display_name);
}
}
/* now remove the service */
if (DeleteService(service))
{
- wprintf(TEXT("%ls removed.\n"), ovpn_svc->display_name);
+ wprintf(L"%ls removed.\n", ovpn_svc->display_name);
--ret;
}
else
{
- wprintf(TEXT("DeleteService failed - %ls\n"), GetLastErrorText());
+ wprintf(L"DeleteService failed - %ls\n", GetLastErrorText());
}
CloseServiceHandle(service);
@@ -221,7 +221,7 @@
int
-_tmain(int argc, TCHAR *argv[])
+wmain(int argc, WCHAR *argv[])
{
/*
* Interactive service (as a SERVICE_WIN32_SHARE_PROCESS)
@@ -234,7 +234,7 @@
/* Interactive service only (as a SERVICE_WIN32_OWN_PROCESS) */
const SERVICE_TABLE_ENTRY dispatchTable_interactive[] = {
- { TEXT(""), ServiceStartInteractiveOwn },
+ { L"", ServiceStartInteractiveOwn },
{ NULL, NULL }
};
@@ -244,23 +244,23 @@
for (int i = 1; i < argc; i++)
{
- if (*argv[i] == TEXT('-') || *argv[i] == TEXT('/'))
+ if (*argv[i] == L'-' || *argv[i] == L'/')
{
- if (_wcsicmp(TEXT("install"), argv[i] + 1) == 0)
+ if (_wcsicmp(L"install", argv[i] + 1) == 0)
{
return CmdInstallServices();
}
- else if (_wcsicmp(TEXT("remove"), argv[i] + 1) == 0)
+ else if (_wcsicmp(L"remove", argv[i] + 1) == 0)
{
return CmdRemoveServices();
}
- else if (_wcsicmp(TEXT("start"), argv[i] + 1) == 0)
+ else if (_wcsicmp(L"start", argv[i] + 1) == 0)
{
return CmdStartService(interactive);
}
- else if (argc > i + 2 && _wcsicmp(TEXT("instance"), argv[i] + 1) == 0)
+ else if (argc > i + 2 && _wcsicmp(L"instance", argv[i] + 1) == 0)
{
- if (_wcsicmp(TEXT("interactive"), argv[i+1]) == 0)
+ if (_wcsicmp(L"interactive", argv[i+1]) == 0)
{
dispatchTable = dispatchTable_interactive;
service_instance = argv[i + 2];
@@ -274,16 +274,16 @@
}
else
{
- wprintf(TEXT("%ls -install to install the interactive service\n"), APPNAME);
- wprintf(TEXT("%ls -start [name] to start the service (name = \"interactive\" is optional)\n"), APPNAME);
- wprintf(TEXT("%ls -remove to remove the service\n"), APPNAME);
+ wprintf(L"%ls -install to install the interactive service\n", APPNAME);
+ wprintf(L"%ls -start [name] to start the service (name = \"interactive\") is optional\n", APPNAME);
+ wprintf(L"%ls -remove to remove the service\n", APPNAME);
- wprintf(TEXT("\nService run-time parameters:\n"));
- wprintf(TEXT("-instance interactive <id>\n")
- TEXT(" Runs the service as an alternate instance.\n")
- TEXT(" The service settings will be loaded from\n")
- TEXT(" HKLM\\Software\\") TEXT(PACKAGE_NAME) TEXT("<id> registry key, and the service will accept\n")
- TEXT(" requests on \\\\.\\pipe\\") TEXT(PACKAGE) TEXT("<id>\\service named pipe.\n"));
+ wprintf(L"\nService run-time parameters:\n");
+ wprintf(L"-instance interactive <id>\n"
+ L" Runs the service as an alternate instance.\n"
+ L" The service settings will be loaded from\n"
+ L" HKLM\\Software\\" _L(PACKAGE_NAME) L"<id> registry key, and the service will accept\n"
+ L" requests on \\\\.\\pipe\\" _L(PACKAGE) L"<id>\\service named pipe.\n");
return 0;
}
@@ -294,12 +294,12 @@
* the service control manager may be starting the service
* so we must call StartServiceCtrlDispatcher
*/
- wprintf(TEXT("\nStartServiceCtrlDispatcher being called.\n"));
- wprintf(TEXT("This may take several seconds. Please wait.\n"));
+ wprintf(L"\nStartServiceCtrlDispatcher being called.\n");
+ wprintf(L"This may take several seconds. Please wait.\n");
if (!StartServiceCtrlDispatcher(dispatchTable))
{
- MsgToEventLog(MSG_FLAGS_ERROR, TEXT("StartServiceCtrlDispatcher failed."));
+ MsgToEventLog(MSG_FLAGS_ERROR, L"StartServiceCtrlDispatcher failed.");
}
return 0;
@@ -36,11 +36,11 @@
#include <winsock2.h>
#include <windows.h>
#include <stdlib.h>
-#include <tchar.h>
+#include <wchar.h>
#include "../tapctl/basic.h"
-#define APPNAME TEXT(PACKAGE) TEXT("serv")
-#define SERVICE_DEPENDENCIES TEXT(TAP_WIN_COMPONENT_ID) TEXT("\0Dhcp\0\0")
+#define APPNAME _L(PACKAGE) L"serv"
+#define SERVICE_DEPENDENCIES _L(TAP_WIN_COMPONENT_ID) L"\0Dhcp\0\0"
/*
* Message handling
@@ -58,37 +58,37 @@
typedef struct {
openvpn_service_type type;
- TCHAR *name;
- TCHAR *display_name;
- TCHAR *dependencies;
+ WCHAR *name;
+ WCHAR *display_name;
+ WCHAR *dependencies;
DWORD start_type;
} openvpn_service_t;
#define MAX_NAME 256
typedef struct {
- TCHAR exe_path[MAX_PATH];
- TCHAR config_dir[MAX_PATH];
- TCHAR ext_string[16];
- TCHAR log_dir[MAX_PATH];
- TCHAR ovpn_admin_group[MAX_NAME];
+ WCHAR exe_path[MAX_PATH];
+ WCHAR config_dir[MAX_PATH];
+ WCHAR ext_string[16];
+ WCHAR log_dir[MAX_PATH];
+ WCHAR ovpn_admin_group[MAX_NAME];
DWORD priority;
BOOL append;
} settings_t;
extern openvpn_service_t interactive_service;
-extern LPCTSTR service_instance;
+extern LPCWSTR service_instance;
-VOID WINAPI ServiceStartInteractiveOwn(DWORD argc, LPTSTR *argv);
+VOID WINAPI ServiceStartInteractiveOwn(DWORD argc, LPWSTR *argv);
-VOID WINAPI ServiceStartInteractive(DWORD argc, LPTSTR *argv);
+VOID WINAPI ServiceStartInteractive(DWORD argc, LPWSTR *argv);
DWORD GetOpenvpnSettings(settings_t *s);
BOOL ReportStatusToSCMgr(SERVICE_STATUS_HANDLE service, SERVICE_STATUS *status);
-LPCTSTR GetLastErrorText(void);
+LPCWSTR GetLastErrorText(void);
-DWORD MsgToEventLog(DWORD flags, LPCTSTR lpszMsg, ...);
+DWORD MsgToEventLog(DWORD flags, LPCWSTR lpszMsg, ...);
/**
* Convert a UTF-8 string to UTF-16
@@ -158,7 +158,7 @@
/* Get username */
if (!LookupAccountSidW(NULL, sid, username, &len, domain, &len, &sid_type))
{
- MsgToEventLog(M_SYSERR, TEXT("LookupAccountSid"));
+ MsgToEventLog(M_SYSERR, L"LookupAccountSid");
/* not fatal as this is now used only for logging */
username[0] = '\0';
domain[0] = '\0';
@@ -170,7 +170,7 @@
}
else
{
- MsgToEventLog(M_SYSERR, TEXT("Failed to get the name of Administrators group. Using the default."));
+ MsgToEventLog(M_SYSERR, L"Failed to get the name of Administrators group. Using the default.");
/* use the default value */
admin_group[0] = SYSTEM_ADMIN_GROUP;
}
@@ -182,7 +182,7 @@
ret = IsUserInGroup(sid, token_groups, admin_group[i]);
if (ret)
{
- MsgToEventLog(M_INFO, TEXT("Authorizing user '%ls@%ls' by virtue of membership in group '%ls'"),
+ MsgToEventLog(M_INFO, L"Authorizing user '%ls@%ls' by virtue of membership in group '%ls'",
username, domain, admin_group[i]);
goto out;
}
@@ -302,7 +302,7 @@
if (err != NERR_Success && err != NERR_GroupNotFound)
{
SetLastError(err);
- MsgToEventLog(M_SYSERR, TEXT("In NetLocalGroupGetMembers for group '%ls'"), group_name);
+ MsgToEventLog(M_SYSERR, L"In NetLocalGroupGetMembers for group '%ls'", group_name);
}
return ret;
@@ -28,8 +28,8 @@
#include "service.h"
/* Authorized groups who can use any options and config locations */
-#define SYSTEM_ADMIN_GROUP TEXT("Administrators")
-#define OVPN_ADMIN_GROUP TEXT("OpenVPN Administrators")
+#define SYSTEM_ADMIN_GROUP L"Administrators"
+#define OVPN_ADMIN_GROUP L"OpenVPN Administrators"
/* The last one may be reset in registry: HKLM\Software\OpenVPN\ovpn_admin_group */
BOOL
@@ -23,10 +23,10 @@
#define BASIC_H
#ifdef _UNICODE
-#define PRIsLPTSTR "ls"
+#define PRIsLPWSTR "ls"
#define PRIsLPOLESTR "ls"
#else
-#define PRIsLPTSTR "s"
+#define PRIsLPWSTR "s"
#define PRIsLPOLESTR "ls"
#endif
#define PRIXGUID "{%08lX-%04hX-%04hX-%02hhX%02hhX-%02hhX%02hhX%02hhX%02hhX%02hhX%02hhX}"
@@ -29,7 +29,7 @@
#include <objbase.h>
#include <setupapi.h>
#include <stdio.h>
-#include <tchar.h>
+#include <wchar.h>
#ifdef _MSC_VER
#pragma comment(lib, "ole32.lib")
@@ -37,79 +37,79 @@
#endif
-const TCHAR title_string[] =
- TEXT(PACKAGE_NAME) TEXT(" ") TEXT(PACKAGE_VERSION)
+const WCHAR title_string[] =
+ _L(PACKAGE_NAME) L" " _L(PACKAGE_VERSION)
;
-static const TCHAR usage_message[] =
- TEXT("%") TEXT(PRIsLPTSTR) TEXT("\n")
- TEXT("\n")
- TEXT("Usage:\n")
- TEXT("\n")
- TEXT("tapctl <command> [<command specific options>]\n")
- TEXT("\n")
- TEXT("Commands:\n")
- TEXT("\n")
- TEXT("create Create a new TUN/TAP adapter\n")
- TEXT("list List TUN/TAP adapters\n")
- TEXT("delete Delete specified network adapter\n")
- TEXT("help Display this text\n")
- TEXT("\n")
- TEXT("Hint: Use \"tapctl help <command>\" to display help for particular command.\n")
+static const WCHAR usage_message[] =
+ L"%ls\n"
+ L"\n"
+ L"Usage:\n"
+ L"\n"
+ L"tapctl <command> [<command specific options>]\n"
+ L"\n"
+ L"Commands:\n"
+ L"\n"
+ L"create Create a new TUN/TAP adapter\n"
+ L"list List TUN/TAP adapters\n"
+ L"delete Delete specified network adapter\n"
+ L"help Display this text\n"
+ L"\n"
+ L"Hint: Use \"tapctl help <command>\" to display help for particular command.\n"
;
-static const TCHAR usage_message_create[] =
- TEXT("%") TEXT(PRIsLPTSTR) TEXT("\n")
- TEXT("\n")
- TEXT("Creates a new TUN/TAP adapter\n")
- TEXT("\n")
- TEXT("Usage:\n")
- TEXT("\n")
- TEXT("tapctl create [<options>]\n")
- TEXT("\n")
- TEXT("Options:\n")
- TEXT("\n")
- TEXT("--name <name> Set TUN/TAP adapter name. Should the adapter with given name \n")
- TEXT(" already exist, an error is returned. If this option is not \n")
- TEXT(" specified, a default adapter name is chosen by Windows. \n")
- TEXT(" Note: This name can also be specified as OpenVPN's --dev-node \n")
- TEXT(" option. \n")
- TEXT("--hwid <hwid> Adapter hardware ID. Default value is root\\tap0901, which \n")
- TEXT(" describes tap-windows6 driver. To work with wintun or ovpn-dco \n")
- TEXT(" driver, specify 'wintun' or 'ovpn-dco'. \n")
- TEXT("\n")
- TEXT("Output:\n")
- TEXT("\n")
- TEXT("This command prints newly created TUN/TAP adapter's GUID to stdout. \n")
+static const WCHAR usage_message_create[] =
+ L"%ls\n"
+ L"\n"
+ L"Creates a new TUN/TAP adapter\n"
+ L"\n"
+ L"Usage:\n"
+ L"\n"
+ L"tapctl create [<options>]\n"
+ L"\n"
+ L"Options:\n"
+ L"\n"
+ L"--name <name> Set TUN/TAP adapter name. Should the adapter with given name \n"
+ L" already exist, an error is returned. If this option is not \n"
+ L" specified, a default adapter name is chosen by Windows. \n"
+ L" Note: This name can also be specified as OpenVPN's --dev-node \n"
+ L" option. \n"
+ L"--hwid <hwid> Adapter hardware ID. Default value is root\\tap0901, which \n"
+ L" describes tap-windows6 driver. To work with wintun or ovpn-dco \n"
+ L" driver, specify 'wintun' or 'ovpn-dco'. \n"
+ L"\n"
+ L"Output:\n"
+ L"\n"
+ L"This command prints newly created TUN/TAP adapter's GUID to stdout. \n"
;
-static const TCHAR usage_message_list[] =
- TEXT("%") TEXT(PRIsLPTSTR) TEXT("\n")
- TEXT("\n")
- TEXT("Lists TUN/TAP adapters\n")
- TEXT("\n")
- TEXT("Usage:\n")
- TEXT("\n")
- TEXT("tapctl list\n")
- TEXT("\n")
- TEXT("Options:\n")
- TEXT("\n")
- TEXT("--hwid <hwid> Adapter hardware ID. By default, root\\tap0901, tap0901, wintun and \n")
- TEXT(" ovpn-dco adapters are listed. Use this switch to limit the list.\n")
- TEXT("\n")
- TEXT("Output:\n")
- TEXT("\n")
- TEXT("This command prints all TUN/TAP adapters to stdout. \n")
+static const WCHAR usage_message_list[] =
+ L"%ls\n"
+ L"\n"
+ L"Lists TUN/TAP adapters\n"
+ L"\n"
+ L"Usage:\n"
+ L"\n"
+ L"tapctl list\n"
+ L"\n"
+ L"Options:\n"
+ L"\n"
+ L"--hwid <hwid> Adapter hardware ID. By default, root\\tap0901, tap0901, wintun and \n"
+ L" ovpn-dco adapters are listed. Use this switch to limit the list.\n"
+ L"\n"
+ L"Output:\n"
+ L"\n"
+ L"This command prints all TUN/TAP adapters to stdout. \n"
;
-static const TCHAR usage_message_delete[] =
- TEXT("%") TEXT(PRIsLPTSTR) TEXT("\n")
- TEXT("\n")
- TEXT("Deletes the specified network adapter\n")
- TEXT("\n")
- TEXT("Usage:\n")
- TEXT("\n")
- TEXT("tapctl delete <adapter GUID | adapter name>\n")
+static const WCHAR usage_message_delete[] =
+ L"%ls\n"
+ L"\n"
+ L"Deletes the specified network adapter\n"
+ L"\n"
+ L"Usage:\n"
+ L"\n"
+ L"tapctl delete <adapter GUID | adapter name>\n"
;
@@ -119,27 +119,27 @@
static void
usage(void)
{
- _ftprintf(stderr,
- usage_message,
- title_string);
+ fwprintf(stderr,
+ usage_message,
+ title_string);
}
/**
* Checks if adapter with given name doesn't already exist
*/
static BOOL
-is_adapter_name_available(LPCTSTR name, struct tap_adapter_node *adapter_list, BOOL log)
+is_adapter_name_available(LPCWSTR name, struct tap_adapter_node *adapter_list, BOOL log)
{
for (struct tap_adapter_node *a = adapter_list; a; a = a->pNext)
{
- if (_tcsicmp(name, a->szName) == 0)
+ if (wcsicmp(name, a->szName) == 0)
{
if (log)
{
LPOLESTR adapter_id = NULL;
StringFromIID((REFIID)&a->guid, &adapter_id);
- _ftprintf(stderr, TEXT("Adapter \"%") TEXT(PRIsLPTSTR) TEXT("\" already exists (GUID %")
- TEXT(PRIsLPOLESTR) TEXT(").\n"), a->szName, adapter_id);
+ fwprintf(stderr, L"Adapter \"%ls\" already exists (GUID %"
+ L"ls).\n", a->szName, adapter_id);
CoTaskMemFree(adapter_id);
}
@@ -154,26 +154,26 @@
* Returns unique adapter name based on hwid or NULL if name cannot be generated.
* Caller is responsible for freeing it.
*/
-static LPTSTR
-get_unique_adapter_name(LPCTSTR hwid, struct tap_adapter_node *adapter_list)
+static LPWSTR
+get_unique_adapter_name(LPCWSTR hwid, struct tap_adapter_node *adapter_list)
{
if (hwid == NULL)
{
return NULL;
}
- LPCTSTR base_name;
- if (_tcsicmp(hwid, TEXT("ovpn-dco")) == 0)
+ LPCWSTR base_name;
+ if (wcsicmp(hwid, L"ovpn-dco") == 0)
{
- base_name = TEXT("OpenVPN Data Channel Offload");
+ base_name = L"OpenVPN Data Channel Offload";
}
- else if (_tcsicmp(hwid, TEXT("wintun")) == 0)
+ else if (wcsicmp(hwid, L"wintun") == 0)
{
- base_name = TEXT("OpenVPN Wintun");
+ base_name = L"OpenVPN Wintun";
}
- else if (_tcsicmp(hwid, TEXT("root\\") TEXT(TAP_WIN_COMPONENT_ID)) == 0)
+ else if (wcsicmp(hwid, L"root\\" _L(TAP_WIN_COMPONENT_ID)) == 0)
{
- base_name = TEXT("OpenVPN TAP-Windows6");
+ base_name = L"OpenVPN TAP-Windows6";
}
else
{
@@ -182,18 +182,18 @@
if (is_adapter_name_available(base_name, adapter_list, FALSE))
{
- return _tcsdup(base_name);
+ return wcsdup(base_name);
}
- size_t name_len = _tcslen(base_name) + 10;
- LPTSTR name = malloc(name_len * sizeof(TCHAR));
+ size_t name_len = wcslen(base_name) + 10;
+ LPWSTR name = malloc(name_len * sizeof(WCHAR));
if (name == NULL)
{
return NULL;
}
for (int i = 1; i < 100; ++i)
{
- _stprintf_s(name, name_len, TEXT("%ls #%d"), base_name, i);
+ swprintf_s(name, name_len, L"%ls #%d", base_name, i);
if (is_adapter_name_available(name, adapter_list, FALSE))
{
@@ -208,7 +208,7 @@
* Program entry point
*/
int __cdecl
-_tmain(int argc, LPCTSTR argv[])
+wmain(int argc, LPCWSTR argv[])
{
int iResult;
BOOL bRebootRequired = FALSE;
@@ -221,54 +221,54 @@
usage();
return 1;
}
- else if (_tcsicmp(argv[1], TEXT("help")) == 0)
+ else if (wcsicmp(argv[1], L"help") == 0)
{
/* Output help. */
if (argc < 3)
{
usage();
}
- else if (_tcsicmp(argv[2], TEXT("create")) == 0)
+ else if (wcsicmp(argv[2], L"create") == 0)
{
- _ftprintf(stderr, usage_message_create, title_string);
+ fwprintf(stderr, usage_message_create, title_string);
}
- else if (_tcsicmp(argv[2], TEXT("list")) == 0)
+ else if (wcsicmp(argv[2], L"list") == 0)
{
- _ftprintf(stderr, usage_message_list, title_string);
+ fwprintf(stderr, usage_message_list, title_string);
}
- else if (_tcsicmp(argv[2], TEXT("delete")) == 0)
+ else if (wcsicmp(argv[2], L"delete") == 0)
{
- _ftprintf(stderr, usage_message_delete, title_string);
+ fwprintf(stderr, usage_message_delete, title_string);
}
else
{
- _ftprintf(stderr, TEXT("Unknown command \"%") TEXT(PRIsLPTSTR)
- TEXT("\". Please, use \"tapctl help\" to list supported commands.\n"), argv[2]);
+ fwprintf(stderr, L"Unknown command \"%ls"
+ L"\". Please, use \"tapctl help\" to list supported commands.\n", argv[2]);
}
return 1;
}
- else if (_tcsicmp(argv[1], TEXT("create")) == 0)
+ else if (wcsicmp(argv[1], L"create") == 0)
{
- LPCTSTR szName = NULL;
- LPCTSTR szHwId = TEXT("root\\") TEXT(TAP_WIN_COMPONENT_ID);
+ LPCWSTR szName = NULL;
+ LPCWSTR szHwId = L"root\\" _L(TAP_WIN_COMPONENT_ID);
/* Parse options. */
for (int i = 2; i < argc; i++)
{
- if (_tcsicmp(argv[i], TEXT("--name")) == 0)
+ if (wcsicmp(argv[i], L"--name") == 0)
{
szName = argv[++i];
}
- else if (_tcsicmp(argv[i], TEXT("--hwid")) == 0)
+ else if (wcsicmp(argv[i], L"--hwid") == 0)
{
szHwId = argv[++i];
}
else
{
- _ftprintf(stderr, TEXT("Unknown option \"%") TEXT(PRIsLPTSTR)
- TEXT("\". Please, use \"tapctl help create\" to list supported options. Ignored.\n"),
- argv[i]);
+ fwprintf(stderr, L"Unknown option \"%ls"
+ L"\". Please, use \"tapctl help create\" to list supported options. Ignored.\n",
+ argv[i]);
}
}
@@ -277,13 +277,13 @@
LPOLESTR szAdapterId = NULL;
DWORD dwResult = tap_create_adapter(
NULL,
- TEXT("Virtual Ethernet"),
+ L"Virtual Ethernet",
szHwId,
&bRebootRequired,
&guidAdapter);
if (dwResult != ERROR_SUCCESS)
{
- _ftprintf(stderr, TEXT("Creating TUN/TAP adapter failed (error 0x%x).\n"), dwResult);
+ fwprintf(stderr, L"Creating TUN/TAP adapter failed (error 0x%x).\n", dwResult);
iResult = 1; goto quit;
}
@@ -292,12 +292,12 @@
dwResult = tap_list_adapters(NULL, NULL, &pAdapterList);
if (dwResult != ERROR_SUCCESS)
{
- _ftprintf(stderr, TEXT("Enumerating adapters failed (error 0x%x).\n"), dwResult);
+ fwprintf(stderr, L"Enumerating adapters failed (error 0x%x).\n", dwResult);
iResult = 1;
goto create_delete_adapter;
}
- LPTSTR adapter_name = szName ? _tcsdup(szName) : get_unique_adapter_name(szHwId, pAdapterList);
+ LPWSTR adapter_name = szName ? wcsdup(szName) : get_unique_adapter_name(szHwId, pAdapterList);
if (adapter_name)
{
/* Check for duplicates when name was specified,
@@ -313,9 +313,9 @@
if (dwResult != ERROR_SUCCESS)
{
StringFromIID((REFIID)&guidAdapter, &szAdapterId);
- _ftprintf(stderr, TEXT("Renaming TUN/TAP adapter %") TEXT(PRIsLPOLESTR)
- TEXT(" to \"%") TEXT(PRIsLPTSTR) TEXT("\" failed (error 0x%x).\n"),
- szAdapterId, adapter_name, dwResult);
+ fwprintf(stderr, L"Renaming TUN/TAP adapter %ls"
+ L" to \"%ls\" failed (error 0x%x).\n",
+ szAdapterId, adapter_name, dwResult);
CoTaskMemFree(szAdapterId);
iResult = 1; goto quit;
}
@@ -334,7 +334,7 @@
/* Output adapter GUID. */
StringFromIID((REFIID)&guidAdapter, &szAdapterId);
- _ftprintf(stdout, TEXT("%") TEXT(PRIsLPOLESTR) TEXT("\n"), szAdapterId);
+ fwprintf(stdout, L"%ls\n", szAdapterId);
CoTaskMemFree(szAdapterId);
iResult = 0; goto quit;
@@ -346,28 +346,28 @@
&bRebootRequired);
iResult = 1; goto quit;
}
- else if (_tcsicmp(argv[1], TEXT("list")) == 0)
+ else if (wcsicmp(argv[1], L"list") == 0)
{
- TCHAR szzHwId[0x100] =
- TEXT("root\\") TEXT(TAP_WIN_COMPONENT_ID) TEXT("\0")
- TEXT(TAP_WIN_COMPONENT_ID) TEXT("\0")
- TEXT("Wintun\0")
- TEXT("ovpn-dco\0");
+ WCHAR szzHwId[0x100] =
+ L"root\\" _L(TAP_WIN_COMPONENT_ID) L"\0"
+ _L(TAP_WIN_COMPONENT_ID) L"\0"
+ L"Wintun\0"
+ L"ovpn-dco\0";
/* Parse options. */
for (int i = 2; i < argc; i++)
{
- if (_tcsicmp(argv[i], TEXT("--hwid")) == 0)
+ if (wcsicmp(argv[i], L"--hwid") == 0)
{
memset(szzHwId, 0, sizeof(szzHwId));
++i;
- memcpy_s(szzHwId, sizeof(szzHwId) - 2*sizeof(TCHAR) /*requires double zero termination*/, argv[i], _tcslen(argv[i])*sizeof(TCHAR));
+ memcpy_s(szzHwId, sizeof(szzHwId) - 2*sizeof(WCHAR) /*requires double zero termination*/, argv[i], wcslen(argv[i])*sizeof(WCHAR));
}
else
{
- _ftprintf(stderr, TEXT("Unknown option \"%") TEXT(PRIsLPTSTR)
- TEXT("\". Please, use \"tapctl help list\" to list supported options. Ignored.\n"),
- argv[i]);
+ fwprintf(stderr, L"Unknown option \"%ls"
+ L"\". Please, use \"tapctl help list\" to list supported options. Ignored.\n",
+ argv[i]);
}
}
@@ -376,7 +376,7 @@
DWORD dwResult = tap_list_adapters(NULL, szzHwId, &pAdapterList);
if (dwResult != ERROR_SUCCESS)
{
- _ftprintf(stderr, TEXT("Enumerating TUN/TAP adapters failed (error 0x%x).\n"), dwResult);
+ fwprintf(stderr, L"Enumerating TUN/TAP adapters failed (error 0x%x).\n", dwResult);
iResult = 1; goto quit;
}
@@ -384,19 +384,19 @@
{
LPOLESTR szAdapterId = NULL;
StringFromIID((REFIID)&pAdapter->guid, &szAdapterId);
- _ftprintf(stdout, TEXT("%") TEXT(PRIsLPOLESTR) TEXT("\t%")
- TEXT(PRIsLPTSTR) TEXT("\n"), szAdapterId, pAdapter->szName);
+ fwprintf(stdout, L"%ls\t%"
+ L"ls\n", szAdapterId, pAdapter->szName);
CoTaskMemFree(szAdapterId);
}
iResult = 0;
tap_free_adapter_list(pAdapterList);
}
- else if (_tcsicmp(argv[1], TEXT("delete")) == 0)
+ else if (wcsicmp(argv[1], L"delete") == 0)
{
if (argc < 3)
{
- _ftprintf(stderr, TEXT("Missing adapter GUID or name. Please, use \"tapctl help delete\" for usage info.\n"));
+ fwprintf(stderr, L"Missing adapter GUID or name. Please, use \"tapctl help delete\" for usage info.\n");
return 1;
}
@@ -408,7 +408,7 @@
DWORD dwResult = tap_list_adapters(NULL, NULL, &pAdapterList);
if (dwResult != ERROR_SUCCESS)
{
- _ftprintf(stderr, TEXT("Enumerating TUN/TAP adapters failed (error 0x%x).\n"), dwResult);
+ fwprintf(stderr, L"Enumerating TUN/TAP adapters failed (error 0x%x).\n", dwResult);
iResult = 1; goto quit;
}
@@ -416,10 +416,10 @@
{
if (pAdapter == NULL)
{
- _ftprintf(stderr, TEXT("\"%") TEXT(PRIsLPTSTR) TEXT("\" adapter not found.\n"), argv[2]);
+ fwprintf(stderr, L"\"%ls\" adapter not found.\n", argv[2]);
iResult = 1; goto delete_cleanup_pAdapterList;
}
- else if (_tcsicmp(argv[2], pAdapter->szName) == 0)
+ else if (wcsicmp(argv[2], pAdapter->szName) == 0)
{
memcpy(&guidAdapter, &pAdapter->guid, sizeof(GUID));
break;
@@ -443,8 +443,8 @@
&bRebootRequired);
if (dwResult != ERROR_SUCCESS)
{
- _ftprintf(stderr, TEXT("Deleting adapter \"%") TEXT(PRIsLPTSTR)
- TEXT("\" failed (error 0x%x).\n"), argv[2], dwResult);
+ fwprintf(stderr, L"Deleting adapter \"%ls"
+ L"\" failed (error 0x%x).\n", argv[2], dwResult);
iResult = 1; goto quit;
}
@@ -452,15 +452,15 @@
}
else
{
- _ftprintf(stderr, TEXT("Unknown command \"%") TEXT(PRIsLPTSTR)
- TEXT("\". Please, use \"tapctl help\" to list supported commands.\n"), argv[1]);
+ fwprintf(stderr, L"Unknown command \"%ls"
+ L"\". Please, use \"tapctl help\" to list supported commands.\n", argv[1]);
return 1;
}
quit:
if (bRebootRequired)
{
- _ftprintf(stderr, TEXT("A system reboot is required.\n"));
+ fwprintf(stderr, L"A system reboot is required.\n");
}
return iResult;
@@ -481,19 +481,19 @@
{
/* Output message string. Note: Message strings don't contain line terminators. */
vfprintf(stderr, format, arglist);
- _ftprintf(stderr, TEXT("\n"));
+ fwprintf(stderr, L"\n");
if ((flags & M_ERRNO) != 0)
{
/* Output system error message (if possible). */
DWORD dwResult = GetLastError();
- LPTSTR szErrMessage = NULL;
+ LPWSTR szErrMessage = NULL;
if (FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS,
0,
dwResult,
0,
- (LPTSTR)&szErrMessage,
+ (LPWSTR)&szErrMessage,
0,
NULL) && szErrMessage)
{
@@ -502,7 +502,7 @@
{
if (szErrMessage[i])
{
- if (!_istspace(szErrMessage[i]))
+ if (!iswspace(szErrMessage[i]))
{
i_last = i + 1;
}
@@ -515,13 +515,13 @@
}
/* Output error message. */
- _ftprintf(stderr, TEXT("Error 0x%x: %") TEXT(PRIsLPTSTR) TEXT("\n"), dwResult, szErrMessage);
+ fwprintf(stderr, L"Error 0x%x: %ls\n", dwResult, szErrMessage);
LocalFree(szErrMessage);
}
else
{
- _ftprintf(stderr, TEXT("Error 0x%x\n"), dwResult);
+ fwprintf(stderr, L"Error 0x%x\n", dwResult);
}
}
}
@@ -30,7 +30,7 @@
#include <objbase.h>
#include <setupapi.h>
#include <stdio.h>
-#include <tchar.h>
+#include <wchar.h>
#include <newdev.h>
#ifdef _MSC_VER
@@ -43,8 +43,8 @@
const static GUID GUID_DEVCLASS_NET = { 0x4d36e972L, 0xe325, 0x11ce, { 0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18 } };
-const static TCHAR szAdapterRegKeyPathTemplate[] = TEXT("SYSTEM\\CurrentControlSet\\Control\\Network\\%") TEXT(PRIsLPOLESTR) TEXT("\\%") TEXT(PRIsLPOLESTR) TEXT("\\Connection");
-#define ADAPTER_REGKEY_PATH_MAX (_countof(TEXT("SYSTEM\\CurrentControlSet\\Control\\Network\\")) - 1 + 38 + _countof(TEXT("\\")) - 1 + 38 + _countof(TEXT("\\Connection")))
+const static WCHAR szAdapterRegKeyPathTemplate[] = L"SYSTEM\\CurrentControlSet\\Control\\Network\\%ls\\%ls\\Connection";
+#define ADAPTER_REGKEY_PATH_MAX (_countof(L"SYSTEM\\CurrentControlSet\\Control\\Network\\") - 1 + 38 + _countof(L"\\") - 1 + 38 + _countof(L"\\Connection"))
/**
* Dynamically load a library and find a function in it
@@ -104,10 +104,10 @@
* @return Number of characters not counting the final zero terminator
**/
static inline size_t
-_tcszlen(_In_z_ LPCTSTR szz)
+wcszlen(_In_z_ LPCWSTR szz)
{
- LPCTSTR s;
- for (s = szz; s[0]; s += _tcslen(s) + 1)
+ LPCWSTR s;
+ for (s = szz; s[0]; s += wcslen(s) + 1)
{
}
return s - szz;
@@ -124,12 +124,12 @@
*
* @return Pointer to the string in szzHay that matches szNeedle is found; NULL otherwise
*/
-static LPCTSTR
-_tcszistr(_In_z_ LPCTSTR szzHay, _In_z_ LPCTSTR szNeedle)
+static LPCWSTR
+wcszistr(_In_z_ LPCWSTR szzHay, _In_z_ LPCWSTR szNeedle)
{
- for (LPCTSTR s = szzHay; s[0]; s += _tcslen(s) + 1)
+ for (LPCWSTR s = szzHay; s[0]; s += wcslen(s) + 1)
{
- if (_tcsicmp(s, szNeedle) == 0)
+ if (wcsicmp(s, szNeedle) == 0)
{
return s;
}
@@ -405,8 +405,8 @@
static DWORD
get_reg_string(
_In_ HKEY hKey,
- _In_ LPCTSTR szName,
- _Out_ LPTSTR *pszValue)
+ _In_ LPCWSTR szName,
+ _Out_ LPWSTR *pszValue)
{
if (pszValue == NULL)
{
@@ -424,7 +424,7 @@
if (dwResult != ERROR_SUCCESS)
{
SetLastError(dwResult); /* MSDN does not mention RegQueryValueEx() to set GetLastError(). But we do have an error code. Set last error manually. */
- msg(M_NONFATAL | M_ERRNO, "%s: enumerating \"%" PRIsLPTSTR "\" registry value failed", __FUNCTION__, szName);
+ msg(M_NONFATAL | M_ERRNO, "%s: enumerating \"%ls\" registry value failed", __FUNCTION__, szName);
return dwResult;
}
@@ -434,7 +434,7 @@
case REG_EXPAND_SZ:
{
/* Read value. */
- LPTSTR szValue = (LPTSTR)malloc(dwSize);
+ LPWSTR szValue = (LPWSTR)malloc(dwSize);
if (szValue == NULL)
{
msg(M_FATAL, "%s: malloc(%u) failed", __FUNCTION__, dwSize);
@@ -451,7 +451,7 @@
if (dwResult != ERROR_SUCCESS)
{
SetLastError(dwResult); /* MSDN does not mention RegQueryValueEx() to set GetLastError(). But we do have an error code. Set last error manually. */
- msg(M_NONFATAL | M_ERRNO, "%s: reading \"%" PRIsLPTSTR "\" registry value failed", __FUNCTION__, szName);
+ msg(M_NONFATAL | M_ERRNO, "%s: reading \"%ls\" registry value failed", __FUNCTION__, szName);
free(szValue);
return dwResult;
}
@@ -463,11 +463,11 @@
dwSizeExp = dwSize * 2,
dwCountExp =
#ifdef UNICODE
- dwSizeExp / sizeof(TCHAR);
+ dwSizeExp / sizeof(WCHAR);
#else
- dwSizeExp / sizeof(TCHAR) - 1; /* Note: ANSI version requires one extra char. */
+ dwSizeExp / sizeof(WCHAR) - 1; /* Note: ANSI version requires one extra char. */
#endif
- LPTSTR szValueExp = (LPTSTR)malloc(dwSizeExp);
+ LPWSTR szValueExp = (LPWSTR)malloc(dwSizeExp);
if (szValueExp == NULL)
{
free(szValue);
@@ -481,7 +481,7 @@
);
if (dwCountExpResult == 0)
{
- msg(M_NONFATAL | M_ERRNO, "%s: expanding \"%" PRIsLPTSTR "\" registry value failed", __FUNCTION__, szName);
+ msg(M_NONFATAL | M_ERRNO, "%s: expanding \"%ls\" registry value failed", __FUNCTION__, szName);
free(szValueExp);
free(szValue);
return dwResult;
@@ -498,13 +498,13 @@
/* Retry with a bigger buffer. */
free(szValueExp);
#ifdef UNICODE
- dwSizeExp = dwCountExpResult * sizeof(TCHAR);
+ dwSizeExp = dwCountExpResult * sizeof(WCHAR);
#else
/* Note: ANSI version requires one extra char. */
- dwSizeExp = (dwCountExpResult + 1) * sizeof(TCHAR);
+ dwSizeExp = (dwCountExpResult + 1) * sizeof(WCHAR);
#endif
dwCountExp = dwCountExpResult;
- szValueExp = (LPTSTR)malloc(dwSizeExp);
+ szValueExp = (LPWSTR)malloc(dwSizeExp);
if (szValueExp == NULL)
{
free(szValue);
@@ -528,7 +528,7 @@
}
default:
- msg(M_NONFATAL, "%s: \"%" PRIsLPTSTR "\" registry value is not string (type %u)", __FUNCTION__, dwValueType);
+ msg(M_NONFATAL, "%s: \"%ls\" registry value is not string (type %u)", __FUNCTION__, dwValueType);
return ERROR_UNSUPPORTED_TYPE;
}
}
@@ -584,8 +584,8 @@
while (iNumAttempts > 0)
{
/* Query the NetCfgInstanceId value. Using get_reg_string() right on might clutter the output with error messages while the registry is still being populated. */
- LPTSTR szCfgGuidString = NULL;
- dwResult = RegQueryValueEx(hKey, TEXT("NetCfgInstanceId"), NULL, NULL, NULL, NULL);
+ LPWSTR szCfgGuidString = NULL;
+ dwResult = RegQueryValueEx(hKey, L"NetCfgInstanceId", NULL, NULL, NULL, NULL);
if (dwResult != ERROR_SUCCESS)
{
if (dwResult == ERROR_FILE_NOT_FOUND && --iNumAttempts > 0)
@@ -603,7 +603,7 @@
/* Read the NetCfgInstanceId value now. */
dwResult = get_reg_string(
hKey,
- TEXT("NetCfgInstanceId"),
+ L"NetCfgInstanceId",
&szCfgGuidString);
if (dwResult != ERROR_SUCCESS)
{
@@ -722,8 +722,8 @@
DWORD
tap_create_adapter(
_In_opt_ HWND hwndParent,
- _In_opt_ LPCTSTR szDeviceDescription,
- _In_ LPCTSTR szHwId,
+ _In_opt_ LPCWSTR szDeviceDescription,
+ _In_ LPCWSTR szHwId,
_Inout_ LPBOOL pbRebootRequired,
_Out_ LPGUID pguidAdapter)
{
@@ -747,7 +747,7 @@
}
/* Get the device class name from GUID. */
- TCHAR szClassName[MAX_CLASS_NAME_LEN];
+ WCHAR szClassName[MAX_CLASS_NAME_LEN];
if (!SetupDiClassNameFromGuid(
&GUID_DEVCLASS_NET,
szClassName,
@@ -790,7 +790,7 @@
hDevInfoList,
&devinfo_data,
SPDRP_HARDWAREID,
- (const BYTE *)szHwId, (DWORD)((_tcslen(szHwId) + 1) * sizeof(TCHAR))))
+ (const BYTE *)szHwId, (DWORD)((wcslen(szHwId) + 1) * sizeof(WCHAR))))
{
dwResult = GetLastError();
msg(M_NONFATAL, "%s: SetupDiSetDeviceRegistryProperty failed", __FUNCTION__);
@@ -965,7 +965,7 @@
{
LPOLESTR szAdapterId = NULL;
StringFromIID((REFIID)pguidAdapter, &szAdapterId);
- msg(M_NONFATAL, "%s: Adapter %" PRIsLPOLESTR " not found", __FUNCTION__, szAdapterId);
+ msg(M_NONFATAL, "%s: Adapter %ls not found", __FUNCTION__, szAdapterId);
CoTaskMemFree(szAdapterId);
dwResult = ERROR_FILE_NOT_FOUND;
goto cleanup_hDevInfoList;
@@ -1062,7 +1062,7 @@
DWORD
tap_set_adapter_name(
_In_ LPCGUID pguidAdapter,
- _In_ LPCTSTR szName,
+ _In_ LPCWSTR szName,
_In_ BOOL bSilent)
{
DWORD dwResult;
@@ -1083,8 +1083,8 @@
StringFromIID((REFIID)pguidAdapter, &szAdapterId);
/* Render registry key path. */
- TCHAR szRegKey[ADAPTER_REGKEY_PATH_MAX];
- _stprintf_s(
+ WCHAR szRegKey[ADAPTER_REGKEY_PATH_MAX];
+ swprintf_s(
szRegKey, _countof(szRegKey),
szAdapterRegKeyPathTemplate,
szDevClassNetId,
@@ -1101,12 +1101,12 @@
if (dwResult != ERROR_SUCCESS)
{
SetLastError(dwResult); /* MSDN does not mention RegOpenKeyEx() to set GetLastError(). But we do have an error code. Set last error manually. */
- msg(msg_flag, "%s: RegOpenKeyEx(HKLM, \"%" PRIsLPTSTR "\") failed", __FUNCTION__, szRegKey);
+ msg(msg_flag, "%s: RegOpenKeyEx(HKLM, \"%ls\") failed", __FUNCTION__, szRegKey);
goto cleanup_szAdapterId;
}
- LPTSTR szOldName = NULL;
- dwResult = get_reg_string(hKey, TEXT("Name"), &szOldName);
+ LPWSTR szOldName = NULL;
+ dwResult = get_reg_string(hKey, L"Name", &szOldName);
if (dwResult != ERROR_SUCCESS)
{
SetLastError(dwResult);
@@ -1115,11 +1115,11 @@
}
/* rename adapter via netsh call */
- const TCHAR *szFmt = TEXT("netsh interface set interface name=\"%")
- TEXT(PRIsLPTSTR) TEXT("\" newname=\"%") TEXT(PRIsLPTSTR) TEXT("\"");
- size_t ncmdline = _tcslen(szFmt) + _tcslen(szOldName) + _tcslen(szName) + 1;
- WCHAR *szCmdLine = malloc(ncmdline * sizeof(TCHAR));
- _stprintf_s(szCmdLine, ncmdline, szFmt, szOldName, szName);
+ const WCHAR *szFmt = L"netsh interface set interface name=\"%"
+ L"ls\" newname=\"%ls\"";
+ size_t ncmdline = wcslen(szFmt) + wcslen(szOldName) + wcslen(szName) + 1;
+ WCHAR *szCmdLine = malloc(ncmdline * sizeof(WCHAR));
+ swprintf_s(szCmdLine, ncmdline, szFmt, szOldName, szName);
free(szOldName);
@@ -1145,7 +1145,7 @@
DWORD
tap_list_adapters(
_In_opt_ HWND hwndParent,
- _In_opt_ LPCTSTR szzHwIDs,
+ _In_opt_ LPCWSTR szzHwIDs,
_Out_ struct tap_adapter_node **ppAdapter)
{
DWORD dwResult;
@@ -1210,7 +1210,7 @@
/* Get device hardware ID(s). */
DWORD dwDataType = REG_NONE;
- LPTSTR szzDeviceHardwareIDs = NULL;
+ LPWSTR szzDeviceHardwareIDs = NULL;
dwResult = get_device_reg_property(
hDevInfoList,
&devinfo_data,
@@ -1226,7 +1226,7 @@
/* Check that hardware ID is REG_SZ/REG_MULTI_SZ, and optionally if it matches ours. */
if (dwDataType == REG_SZ)
{
- if (szzHwIDs && !_tcszistr(szzHwIDs, szzDeviceHardwareIDs))
+ if (szzHwIDs && !wcszistr(szzHwIDs, szzDeviceHardwareIDs))
{
/* This is not our device. Skip it. */
goto cleanup_szzDeviceHardwareIDs;
@@ -1236,14 +1236,14 @@
{
if (szzHwIDs)
{
- for (LPTSTR s = szzDeviceHardwareIDs;; s += _tcslen(s) + 1)
+ for (LPWSTR s = szzDeviceHardwareIDs;; s += wcslen(s) + 1)
{
if (s[0] == 0)
{
/* This is not our device. Skip it. */
goto cleanup_szzDeviceHardwareIDs;
}
- else if (_tcszistr(szzHwIDs, s))
+ else if (wcszistr(szzHwIDs, s))
{
/* This is our device. */
break;
@@ -1271,8 +1271,8 @@
StringFromIID((REFIID)&guidAdapter, &szAdapterId);
/* Render registry key path. */
- TCHAR szRegKey[ADAPTER_REGKEY_PATH_MAX];
- _stprintf_s(
+ WCHAR szRegKey[ADAPTER_REGKEY_PATH_MAX];
+ swprintf_s(
szRegKey, _countof(szRegKey),
szAdapterRegKeyPathTemplate,
szDevClassNetId,
@@ -1289,26 +1289,26 @@
if (dwResult != ERROR_SUCCESS)
{
SetLastError(dwResult); /* MSDN does not mention RegOpenKeyEx() to set GetLastError(). But we do have an error code. Set last error manually. */
- msg(M_WARN | M_ERRNO, "%s: RegOpenKeyEx(HKLM, \"%" PRIsLPTSTR "\") failed", __FUNCTION__, szRegKey);
+ msg(M_WARN | M_ERRNO, "%s: RegOpenKeyEx(HKLM, \"%ls\") failed", __FUNCTION__, szRegKey);
goto cleanup_szAdapterId;
}
/* Read adapter name. */
- LPTSTR szName = NULL;
+ LPWSTR szName = NULL;
dwResult = get_reg_string(
hKey,
- TEXT("Name"),
+ L"Name",
&szName);
if (dwResult != ERROR_SUCCESS)
{
SetLastError(dwResult);
- msg(M_WARN | M_ERRNO, "%s: Cannot determine %" PRIsLPOLESTR " adapter name", __FUNCTION__, szAdapterId);
+ msg(M_WARN | M_ERRNO, "%s: Cannot determine %ls adapter name", __FUNCTION__, szAdapterId);
goto cleanup_hKey;
}
/* Append to the list. */
- size_t hwid_size = (_tcszlen(szzDeviceHardwareIDs) + 1) * sizeof(TCHAR);
- size_t name_size = (_tcslen(szName) + 1) * sizeof(TCHAR);
+ size_t hwid_size = (wcszlen(szzDeviceHardwareIDs) + 1) * sizeof(WCHAR);
+ size_t name_size = (wcslen(szName) + 1) * sizeof(WCHAR);
struct tap_adapter_node *node = (struct tap_adapter_node *)malloc(sizeof(struct tap_adapter_node) + hwid_size + name_size);
if (node == NULL)
{
@@ -1317,9 +1317,9 @@
}
memcpy(&node->guid, &guidAdapter, sizeof(GUID));
- node->szzHardwareIDs = (LPTSTR)(node + 1);
+ node->szzHardwareIDs = (LPWSTR)(node + 1);
memcpy(node->szzHardwareIDs, szzDeviceHardwareIDs, hwid_size);
- node->szName = (LPTSTR)((LPBYTE)node->szzHardwareIDs + hwid_size);
+ node->szName = (LPWSTR)((LPBYTE)node->szzHardwareIDs + hwid_size);
memcpy(node->szName, szName, name_size);
node->pNext = NULL;
if (pAdapterTail)
@@ -52,8 +52,8 @@
DWORD
tap_create_adapter(
_In_opt_ HWND hwndParent,
- _In_opt_ LPCTSTR szDeviceDescription,
- _In_ LPCTSTR szHwId,
+ _In_opt_ LPCWSTR szDeviceDescription,
+ _In_ LPCWSTR szHwId,
_Inout_ LPBOOL pbRebootRequired,
_Out_ LPGUID pguidAdapter);
@@ -126,7 +126,7 @@
DWORD
tap_set_adapter_name(
_In_ LPCGUID pguidAdapter,
- _In_ LPCTSTR szName,
+ _In_ LPCWSTR szName,
_In_ BOOL bSilent);
@@ -136,8 +136,8 @@
struct tap_adapter_node
{
GUID guid; /**< Adapter GUID */
- LPTSTR szzHardwareIDs; /**< Device hardware ID(s) */
- LPTSTR szName; /**< Adapter name */
+ LPWSTR szzHardwareIDs; /**< Device hardware ID(s) */
+ LPWSTR szName; /**< Adapter name */
struct tap_adapter_node *pNext; /**< Pointer to next adapter */
};
@@ -165,7 +165,7 @@
DWORD
tap_list_adapters(
_In_opt_ HWND hwndParent,
- _In_opt_ LPCTSTR szzHwIDs,
+ _In_opt_ LPCWSTR szzHwIDs,
_Out_ struct tap_adapter_node **ppAdapterList);