diff options
-rw-r--r-- | api/adapter.c | 35 | ||||
-rw-r--r-- | api/entry.c | 2 | ||||
-rw-r--r-- | api/entry.h | 18 | ||||
-rw-r--r-- | api/rundll32.c | 7 |
4 files changed, 33 insertions, 29 deletions
diff --git a/api/adapter.c b/api/adapter.c index 0579e8b..642f842 100644 --- a/api/adapter.c +++ b/api/adapter.c @@ -340,7 +340,8 @@ EnableAllOurAdapters(_In_ HDEVINFO DevInfo, _In_ SP_DEVINFO_DATA_LIST *AdaptersT void AdapterInit(void) { -#ifdef MAYBE_WOW64 + if (!MAYBE_WOW64) + return; typedef BOOL(WINAPI * IsWow64Process2_t)( _In_ HANDLE hProcess, _Out_ USHORT * pProcessMachine, _Out_opt_ USHORT * pNativeMachine); HANDLE Kernel32; @@ -354,7 +355,6 @@ AdapterInit(void) NativeMachine = IsWow64Process(GetCurrentProcess(), &IsWoW64) && IsWoW64 ? IMAGE_FILE_MACHINE_AMD64 : IMAGE_FILE_PROCESS; } -#endif } static BOOL @@ -801,13 +801,13 @@ RtlGetNtVersionNumbers(_Out_opt_ DWORD *MajorVersion, _Out_opt_ DWORD *MinorVers static BOOL HaveWHQL(void) { -#if defined(HAVE_WHQL) - DWORD MajorVersion; - RtlGetNtVersionNumbers(&MajorVersion, NULL, NULL); - return MajorVersion >= 10; -#else + if (HAVE_WHQL) + { + DWORD MajorVersion; + RtlGetNtVersionNumbers(&MajorVersion, NULL, NULL); + return MajorVersion >= 10; + } return FALSE; -#endif } static WINTUN_STATUS @@ -1682,15 +1682,10 @@ WintunCreateAdapter( RebootRequired = &DummyRebootRequired; *RebootRequired = FALSE; DWORD Result; -#ifdef MAYBE_WOW64 - if (NativeMachine != IMAGE_FILE_PROCESS) - { + if (MAYBE_WOW64 && NativeMachine != IMAGE_FILE_PROCESS) Result = CreateAdapterViaRundll32(Pool, Name, RequestedGUID, Adapter, RebootRequired); - RevertToSelf(); - return Result; - } -#endif - Result = CreateAdapter(Pool, Name, RequestedGUID, Adapter, RebootRequired); + else + Result = CreateAdapter(Pool, Name, RequestedGUID, Adapter, RebootRequired); RevertToSelf(); return Result; } @@ -1706,14 +1701,12 @@ WintunDeleteAdapter(_In_ const WINTUN_ADAPTER *Adapter, _In_ BOOL ForceCloseSess RebootRequired = &DummyRebootRequired; *RebootRequired = FALSE; DWORD Result; -#ifdef MAYBE_WOW64 - if (NativeMachine != IMAGE_FILE_PROCESS) + if (MAYBE_WOW64 && NativeMachine != IMAGE_FILE_PROCESS) { Result = DeleteAdapterViaRundll32(Adapter, ForceCloseSessions, RebootRequired); RevertToSelf(); return Result; } -#endif HDEVINFO DevInfo; SP_DEVINFO_DATA DevInfoData; @@ -1796,14 +1789,12 @@ WintunDeleteDriver(void) DWORD Result = ERROR_SUCCESS; -#ifdef MAYBE_WOW64 - if (NativeMachine != IMAGE_FILE_PROCESS) + if (MAYBE_WOW64 && NativeMachine != IMAGE_FILE_PROCESS) { Result = DeleteDriverViaRundll32(); RevertToSelf(); return Result; } -#endif /* DeleteAllOurAdapters(); */ HANDLE DriverInstallationLock = NamespaceTakeDriverInstallationMutex(); diff --git a/api/entry.c b/api/entry.c index 3dd42bb..4b56a12 100644 --- a/api/entry.c +++ b/api/entry.c @@ -33,7 +33,7 @@ static FARPROC WINAPI DelayedLoadLibraryHook(unsigned dliNotify, PDelayLoadInfo } const PfnDliHook __pfnDliNotifyHook2 = DelayedLoadLibraryHook; - +#define NOT 1 BOOL APIENTRY DllMain(_In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, _In_ LPVOID lpvReserved) { diff --git a/api/entry.h b/api/entry.h index 0e0e3a6..e60dd71 100644 --- a/api/entry.h +++ b/api/entry.h @@ -14,12 +14,24 @@ # define _L(x) __L(x) #endif +/* TODO: Replace with is_defined. MSVC has issues with the linux kernel varadic macro trick for this. */ #if defined(_M_IX86) || defined(_M_ARM) -#define MAYBE_WOW64 +# define MAYBE_WOW64 1 +#else +# define MAYBE_WOW64 0 #endif -#if defined(_M_AMD64) || defined(_M_ARM64) || defined(_DEBUG) -#define ACCEPT_WOW64 +#if defined(_M_AMD64) || defined(_M_ARM64) +# define ACCEPT_WOW64 1 +#else +# define ACCEPT_WOW64 0 #endif +#ifdef HAVE_WHQL +# undef HAVE_WHQL +# define HAVE_WHQL 1 +#else +# define HAVE_WHQL 0 +#endif +#pragma warning(disable : 4127) /* conditional expression is constant */ extern HINSTANCE ResourceModule; extern HANDLE ModuleHeap; diff --git a/api/rundll32.c b/api/rundll32.c index 85121a5..8bab711 100644 --- a/api/rundll32.c +++ b/api/rundll32.c @@ -3,6 +3,10 @@ * Copyright (C) 2018-2020 WireGuard LLC. All Rights Reserved. */ +#include "entry.h" + +#if ACCEPT_WOW64 == 1 + #include "adapter.h" #include "logger.h" #include "wintun.h" @@ -14,8 +18,6 @@ #define EXPORT comment(linker, "/EXPORT:" __FUNCTION__ "=" __FUNCDNAME__) -#if defined(ACCEPT_WOW64) || defined(_DEBUG) - static DWORD WriteFormatted(_In_ DWORD StdHandle, _In_z_ const WCHAR *Template, ...) { @@ -147,5 +149,4 @@ VOID __stdcall DeleteDriver(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int n WriteFormatted(STD_OUTPUT_HANDLE, L"%1!X!", WintunDeleteDriver()); Done(); } - #endif |