diff --git a/src/tun_windows.c b/src/tun_windows.c index bbf3d91c..48fc0f27 100644 --- a/src/tun_windows.c +++ b/src/tun_windows.c @@ -11,19 +11,19 @@ #include #include -// Wintun function pointers (using function pointer syntax) +// Wintun function pointers (wintun.h defines types as functions, need pointer syntax) static HMODULE wintun_dll = NULL; -static WINTUN_CREATE_ADAPTER_FUNC WintunCreateAdapter = NULL; -static WINTUN_CLOSE_ADAPTER_FUNC WintunCloseAdapter = NULL; -static WINTUN_OPEN_ADAPTER_FUNC WintunOpenAdapter = NULL; -static WINTUN_GET_ADAPTER_LUID_FUNC WintunGetAdapterLUID = NULL; -static WINTUN_START_SESSION_FUNC WintunStartSession = NULL; -static WINTUN_END_SESSION_FUNC WintunEndSession = NULL; -static WINTUN_GET_READ_WAIT_EVENT_FUNC WintunGetReadWaitEvent = NULL; -static WINTUN_RECEIVE_PACKET_FUNC WintunReceivePacket = NULL; -static WINTUN_RELEASE_RECEIVE_PACKET_FUNC WintunReleaseReceivePacket = NULL; -static WINTUN_ALLOCATE_SEND_PACKET_FUNC WintunAllocateSendPacket = NULL; -static WINTUN_SEND_PACKET_FUNC WintunSendPacket = NULL; +static WINTUN_CREATE_ADAPTER_FUNC *WintunCreateAdapter = NULL; +static WINTUN_CLOSE_ADAPTER_FUNC *WintunCloseAdapter = NULL; +static WINTUN_OPEN_ADAPTER_FUNC *WintunOpenAdapter = NULL; +static WINTUN_GET_ADAPTER_LUID_FUNC *WintunGetAdapterLUID = NULL; +static WINTUN_START_SESSION_FUNC *WintunStartSession = NULL; +static WINTUN_END_SESSION_FUNC *WintunEndSession = NULL; +static WINTUN_GET_READ_WAIT_EVENT_FUNC *WintunGetReadWaitEvent = NULL; +static WINTUN_RECEIVE_PACKET_FUNC *WintunReceivePacket = NULL; +static WINTUN_RELEASE_RECEIVE_PACKET_FUNC *WintunReleaseReceivePacket = NULL; +static WINTUN_ALLOCATE_SEND_PACKET_FUNC *WintunAllocateSendPacket = NULL; +static WINTUN_SEND_PACKET_FUNC *WintunSendPacket = NULL; // Load Wintun.dll and resolve function pointers static int wintun_load_dll(void) { @@ -68,18 +68,18 @@ static int wintun_load_dll(void) { return -1; } - // Resolve function pointers - WintunCreateAdapter = (WINTUN_CREATE_ADAPTER_FUNC)GetProcAddress(wintun_dll, "WintunCreateAdapter"); - WintunCloseAdapter = (WINTUN_CLOSE_ADAPTER_FUNC)GetProcAddress(wintun_dll, "WintunCloseAdapter"); - WintunOpenAdapter = (WINTUN_OPEN_ADAPTER_FUNC)GetProcAddress(wintun_dll, "WintunOpenAdapter"); - WintunGetAdapterLUID = (WINTUN_GET_ADAPTER_LUID_FUNC)GetProcAddress(wintun_dll, "WintunGetAdapterLUID"); - WintunStartSession = (WINTUN_START_SESSION_FUNC)GetProcAddress(wintun_dll, "WintunStartSession"); - WintunEndSession = (WINTUN_END_SESSION_FUNC)GetProcAddress(wintun_dll, "WintunEndSession"); - WintunGetReadWaitEvent = (WINTUN_GET_READ_WAIT_EVENT_FUNC)GetProcAddress(wintun_dll, "WintunGetReadWaitEvent"); - WintunReceivePacket = (WINTUN_RECEIVE_PACKET_FUNC)GetProcAddress(wintun_dll, "WintunReceivePacket"); - WintunReleaseReceivePacket = (WINTUN_RELEASE_RECEIVE_PACKET_FUNC)GetProcAddress(wintun_dll, "WintunReleaseReceivePacket"); - WintunAllocateSendPacket = (WINTUN_ALLOCATE_SEND_PACKET_FUNC)GetProcAddress(wintun_dll, "WintunAllocateSendPacket"); - WintunSendPacket = (WINTUN_SEND_PACKET_FUNC)GetProcAddress(wintun_dll, "WintunSendPacket"); + // Resolve function pointers (cast to void* first to avoid errors) + WintunCreateAdapter = (WINTUN_CREATE_ADAPTER_FUNC *)(void *)GetProcAddress(wintun_dll, "WintunCreateAdapter"); + WintunCloseAdapter = (WINTUN_CLOSE_ADAPTER_FUNC *)(void *)GetProcAddress(wintun_dll, "WintunCloseAdapter"); + WintunOpenAdapter = (WINTUN_OPEN_ADAPTER_FUNC *)(void *)GetProcAddress(wintun_dll, "WintunOpenAdapter"); + WintunGetAdapterLUID = (WINTUN_GET_ADAPTER_LUID_FUNC *)(void *)GetProcAddress(wintun_dll, "WintunGetAdapterLUID"); + WintunStartSession = (WINTUN_START_SESSION_FUNC *)(void *)GetProcAddress(wintun_dll, "WintunStartSession"); + WintunEndSession = (WINTUN_END_SESSION_FUNC *)(void *)GetProcAddress(wintun_dll, "WintunEndSession"); + WintunGetReadWaitEvent = (WINTUN_GET_READ_WAIT_EVENT_FUNC *)(void *)GetProcAddress(wintun_dll, "WintunGetReadWaitEvent"); + WintunReceivePacket = (WINTUN_RECEIVE_PACKET_FUNC *)(void *)GetProcAddress(wintun_dll, "WintunReceivePacket"); + WintunReleaseReceivePacket = (WINTUN_RELEASE_RECEIVE_PACKET_FUNC *)(void *)GetProcAddress(wintun_dll, "WintunReleaseReceivePacket"); + WintunAllocateSendPacket = (WINTUN_ALLOCATE_SEND_PACKET_FUNC *)(void *)GetProcAddress(wintun_dll, "WintunAllocateSendPacket"); + WintunSendPacket = (WINTUN_SEND_PACKET_FUNC *)(void *)GetProcAddress(wintun_dll, "WintunSendPacket"); // Check that all functions were resolved if (!WintunCreateAdapter || !WintunCloseAdapter || !WintunOpenAdapter ||