diff -Naur libvncserver-LibVNCServer-0.9.12-orig/libvncclient/listen.c libvncserver-LibVNCServer-0.9.12/libvncclient/listen.c
--- libvncserver-LibVNCServer-0.9.12-orig/libvncclient/listen.c	2019-01-06 22:09:30.000000000 +0300
+++ libvncserver-LibVNCServer-0.9.12/libvncclient/listen.c	2019-06-14 22:07:07.537989200 +0300
@@ -30,7 +30,7 @@
 #endif
 #include <sys/types.h>
 #ifdef WIN32
-#define close closesocket
+//#define close closesocket
 #include <winsock2.h>
 #else // #ifdef WIN32
 #include <sys/wait.h>
diff -Naur libvncserver-LibVNCServer-0.9.12-orig/libvncserver/main.c libvncserver-LibVNCServer-0.9.12/libvncserver/main.c
--- libvncserver-LibVNCServer-0.9.12-orig/libvncserver/main.c	2019-01-06 22:09:30.000000000 +0300
+++ libvncserver-LibVNCServer-0.9.12/libvncserver/main.c	2019-06-14 22:10:32.112690200 +0300
@@ -29,12 +29,15 @@
 #include <sys/types.h>
 #endif
 
-#ifndef WIN32
+#ifdef WIN32
+#include <io.h>
+#define pipe(a) _pipe((a), 0, _O_BINARY | _O_NOINHERIT)
+#else
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <unistd.h>
-#include <fcntl.h>
 #endif
+#include <fcntl.h>
 
 #include <signal.h>
 #include <time.h>
@@ -646,7 +649,12 @@
             cl->pipe_notify_client_thread[0] = -1;
             cl->pipe_notify_client_thread[1] = -1;
         }
+#ifdef _WIN32
+        u_long nonblock = 1;
+        ioctlsocket(cl->pipe_notify_client_thread[0], FIONBIO, &nonblock);
+#else
         fcntl(cl->pipe_notify_client_thread[0], F_SETFL, O_NONBLOCK);
+#endif
 
         pthread_create(&cl->client_thread, NULL, clientInput, (void *)cl);
     }
diff -Naur libvncserver-LibVNCServer-0.9.12-orig/libvncserver/tightvnc-filetransfer/filetransfermsg.c libvncserver-LibVNCServer-0.9.12/libvncserver/tightvnc-filetransfer/filetransfermsg.c
--- libvncserver-LibVNCServer-0.9.12-orig/libvncserver/tightvnc-filetransfer/filetransfermsg.c	2019-01-06 22:09:30.000000000 +0300
+++ libvncserver-LibVNCServer-0.9.12/libvncserver/tightvnc-filetransfer/filetransfermsg.c	2019-06-14 21:55:44.369914200 +0300
@@ -786,9 +786,10 @@
  * Method to handle create directory request.
  ******************************************************************************/
 
-#ifdef _MSC_VER
+#ifdef _WIN32
 #undef CreateDirectory /* Prevent macro clashes under Windows */
-#endif /* _MSC_VER */
+#define mkdir(path,mode) _mkdir(path)
+#endif /* _WIN32 */
 
 void
 CreateDirectory(char* dirName)
diff -Naur libvncserver-LibVNCServer-0.9.12-orig/libvncserver/tightvnc-filetransfer/filetransfermsg.h libvncserver-LibVNCServer-0.9.12/libvncserver/tightvnc-filetransfer/filetransfermsg.h
--- libvncserver-LibVNCServer-0.9.12-orig/libvncserver/tightvnc-filetransfer/filetransfermsg.h	2019-01-06 22:09:30.000000000 +0300
+++ libvncserver-LibVNCServer-0.9.12/libvncserver/tightvnc-filetransfer/filetransfermsg.h	2019-06-14 22:10:52.216840100 +0300
@@ -26,10 +26,10 @@
 #ifndef FILE_TRANSFER_MSG_H
 #define FILE_TRANSFER_MSG_H
 
-#ifdef _MSC_VER
+#ifdef _WIN32
 #pragma push_macro("CreateDirectory")
 #undef CreateDirectory /* Prevent macro clashes under Windows */
-#endif /* _MSC_VER */
+#endif /* _WIN32 */
 
 typedef struct _FileTransferMsg {
 	char* data;
diff -Naur libvncserver-LibVNCServer-0.9.12-orig/libvncserver/tightvnc-filetransfer/handlefiletransferrequest.c libvncserver-LibVNCServer-0.9.12/libvncserver/tightvnc-filetransfer/handlefiletransferrequest.c
--- libvncserver-LibVNCServer-0.9.12-orig/libvncserver/tightvnc-filetransfer/handlefiletransferrequest.c	2019-01-06 22:09:30.000000000 +0300
+++ libvncserver-LibVNCServer-0.9.12/libvncserver/tightvnc-filetransfer/handlefiletransferrequest.c	2019-06-14 22:11:49.243101800 +0300
@@ -22,9 +22,12 @@
  * Date		: 14th July 2005
  */
  
-#ifndef _MSC_VER
+#ifdef _WIN32
+#include <windows.h>
+#include <shlobj.h>
+#else
 #include <pwd.h>
-#endif /* _MSC_VER */
+#endif /* _WIN32*/
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -60,7 +63,11 @@
  
 void InitFileTransfer();
 int SetFtpRoot(char* path);
+#ifdef _WIN32
+char* GetHomeDir();
+#else
 char* GetHomeDir(uid_t uid);
+#endif
 void FreeHomeDir(char *homedir);
 
 /*
@@ -73,7 +80,9 @@
 InitFileTransfer()
 {
 	char* userHome = NULL;
+#ifndef _WIN32
 	uid_t uid = geteuid();
+#endif
 
 	if(fileTransferInitted)
 		return;
@@ -82,7 +91,11 @@
 	
 	memset(ftproot, 0, sizeof(ftproot));
 	
+#ifdef _WIN32
+	userHome = GetHomeDir();
+#else
 	userHome = GetHomeDir(uid);
+#endif
 
 	if((userHome != NULL) && (strlen(userHome) != 0)) {
 		SetFtpRoot(userHome);
@@ -157,6 +170,18 @@
  * is not found or any error. The returned string must be freed by calling the 
  * freehomedir function.
 */
+#ifdef _WIN32
+char* 
+GetHomeDir() {
+	char *homedir = NULL;
+	char path[ MAX_PATH ];
+	if (SHGetFolderPathA( NULL, CSIDL_PROFILE, NULL, 0, path ) == S_OK) {
+		homedir = strdup (path);
+	}
+
+	return homedir;
+}
+#else
 char* 
 GetHomeDir(uid_t uid)
 {
@@ -173,6 +198,7 @@
 
 	return homedir;
 }
+#endif
 
 
 /*
diff -Naur libvncserver-LibVNCServer-0.9.12-orig/rfb/rfb.h libvncserver-LibVNCServer-0.9.12/rfb/rfb.h
--- libvncserver-LibVNCServer-0.9.12-orig/rfb/rfb.h	2019-01-06 22:09:30.000000000 +0300
+++ libvncserver-LibVNCServer-0.9.12/rfb/rfb.h	2019-06-14 17:05:09.465694700 +0300
@@ -54,7 +54,7 @@
 
 #ifdef WIN32
 #undef SOCKET
-typedef UINT32 in_addr_t;
+typedef uint32_t in_addr_t;
 #include <winsock2.h>
 #ifdef LIBVNCSERVER_HAVE_WS2TCPIP_H
 #undef socklen_t
diff -Naur libvncserver-LibVNCServer-0.9.12-orig/CMakeLists.txt libvncserver-LibVNCServer-0.9.12/CMakeLists.txt
--- libvncserver-LibVNCServer-0.9.12-orig/CMakeLists.txt	2019-06-14 22:17:12.893613500 +0300
+++ libvncserver-LibVNCServer-0.9.12/CMakeLists.txt	2019-06-14 22:17:17.525878500 +0300
@@ -454,7 +454,7 @@
 add_library(vncclient ${LIBVNCCLIENT_SOURCES})
 add_library(vncserver ${LIBVNCSERVER_SOURCES})
 if(WIN32)
-  set(ADDITIONAL_LIBS ${ADDITIONAL_LIBS} ws2_32)
+  set(ADDITIONAL_LIBS ${ADDITIONAL_LIBS} ws2_32 shlwapi)
 endif(WIN32)
 
 target_link_libraries(vncclient
