From: Lev Stipakov <l...@openvpn.net>

This function is available starting from Windows 8. Calling it
"as is" causes startup error on Windows 7.

dco-win driver available on Windows 10 20H1 and newer. On older
systems installer will not show nor install the driver and dco-win code
won't be reached. It is safe to load GetOverlappedResultEx in runtime
and exit in case of error.

Signed-off-by: Lev Stipakov <l...@openvpn.net>
---
 src/openvpn/dco_win.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/openvpn/dco_win.c b/src/openvpn/dco_win.c
index 28bcccd4..a2030866 100644
--- a/src/openvpn/dco_win.c
+++ b/src/openvpn/dco_win.c
@@ -107,6 +107,17 @@ dco_start_tun(struct tuntap *tt)
 static int
 dco_connect_wait(HANDLE handle, OVERLAPPED *ov, int timeout, volatile int 
*signal_received)
 {
+    /* GetOverlappedResultEx is available starting from Windows 8 */
+    typedef BOOL (*get_overlapped_result_ex_t) (HANDLE, LPOVERLAPPED, LPDWORD, 
DWORD, BOOL);
+    get_overlapped_result_ex_t get_overlapped_result_ex =
+        
(get_overlapped_result_ex_t)GetProcAddress(GetModuleHandle("Kernel32.dll"),
+                                                   "GetOverlappedResultEx");
+
+    if (get_overlapped_result_ex == NULL)
+    {
+        msg(M_ERR, "Failed to load GetOverlappedResult()");
+    }
+
     DWORD timeout_msec = timeout * 1000;
     const int poll_interval_ms = 50;
 
@@ -115,7 +126,7 @@ dco_connect_wait(HANDLE handle, OVERLAPPED *ov, int 
timeout, volatile int *signa
         timeout_msec -= poll_interval_ms;
 
         DWORD transferred;
-        if (GetOverlappedResultEx(handle, ov, &transferred, poll_interval_ms, 
FALSE) != 0)
+        if (get_overlapped_result_ex(handle, ov, &transferred, 
poll_interval_ms, FALSE) != 0)
         {
             /* TCP connection established by dco */
             return 0;
-- 
2.23.0.windows.1



_______________________________________________
Openvpn-devel mailing list
Openvpn-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openvpn-devel

Reply via email to