diff -Naur libsecret-0.19.1.orig/egg/egg-secure-memory.c libsecret-0.19.1/egg/egg-secure-memory.c
--- libsecret-0.19.1.orig/egg/egg-secure-memory.c	2019-09-08 22:13:01.660294400 -0400
+++ libsecret-0.19.1/egg/egg-secure-memory.c	2019-09-08 22:18:08.797436800 -0400
@@ -31,7 +31,11 @@
 #include "egg-secure-memory.h"
 
 #include <sys/types.h>
+#ifndef _WIN32
 #include <sys/mman.h>
+#else
+#include <windows.h>
+#endif
 #include <stddef.h>
 #include <string.h>
 #include <stdio.h>
@@ -139,6 +143,218 @@
 	return *stack;
 }
 
+#ifdef _WIN32
+#  ifndef _SC_PAGE_SIZE
+#    define _SC_PAGE_SIZE 30
+#  endif
+#  define PROT_READ   0x1
+#  define PROT_WRITE  0x2
+#  define MAP_SHARED  0x1
+#  define MAP_PRIVATE 0x2
+#  define MAP_FIXED   0x10
+#  define MAP_ANONYMOUS 0x20
+#  define MAP_ANON MAP_ANONYMOUS
+#  define MAP_FAILED  ((void *) -1)
+
+long sysconf(int name);
+int getpagesize(void);
+void *mmap(void *start, size_t len, int access, int flags, int fd, unsigned long long off);
+void *mmap_impl(void *start, size_t len, int access, int flags, int fd, unsigned long long off, int inherited);
+int munmap (void *start, size_t length);
+int munmap_impl (void *start, size_t length, int anonymous);
+#  define HAVE_MLOCK 1
+int mlock(const void *addr, size_t len);
+int munlock(const void *addr, size_t len);
+
+
+/**
+ * @brief get configurable system variables
+ * @param system variable to be queried
+ * @return -1 on error, current variable value on the system otherwise
+ */
+long
+sysconf (int name)
+{
+  switch(name)
+  {
+    case _SC_PAGE_SIZE:
+      {
+        SYSTEM_INFO sys_info;
+        GetSystemInfo(&sys_info);
+        return sys_info.dwAllocationGranularity;
+      }
+    default:
+      errno = EINVAL;
+      return -1;
+  }
+}
+
+int
+getpagesize (void)
+{
+  return sysconf (_SC_PAGE_SIZE);
+}
+
+void *
+mmap_impl (void *start, size_t len, int access, int flags, int fd,
+                unsigned long long off, int inheritable)
+{
+  DWORD protect;
+  DWORD access_param;
+  DWORD high, low;
+  HANDLE h, hFile;
+  SECURITY_ATTRIBUTES sec_none;
+  void *base;
+  errno = 0;
+
+  switch(access)
+  {
+    case PROT_WRITE:
+      protect = PAGE_READWRITE;
+      access_param = FILE_MAP_WRITE;
+      break;
+    case PROT_READ:
+      protect = PAGE_READONLY;
+      access_param = FILE_MAP_READ;
+      break;
+    default:
+      protect = PAGE_WRITECOPY;
+      access_param = FILE_MAP_COPY;
+      break;
+  }
+
+  h = NULL;
+  base = NULL;
+  if (fd >= 0)
+  {
+
+    sec_none.nLength = sizeof(SECURITY_ATTRIBUTES);
+    sec_none.bInheritHandle = inheritable ? TRUE : FALSE;
+    sec_none.lpSecurityDescriptor = NULL;
+
+    hFile = (HANDLE) _get_osfhandle(fd);
+
+    h = CreateFileMapping(hFile, &sec_none, protect, 0, 0, NULL);
+
+    if (! h)
+    {
+      errno = EINVAL;
+      return MAP_FAILED;
+    }
+
+    high = off >> 32;
+    low = off & ULONG_MAX;
+
+    /* If a non-zero start is given, try mapping using the given address first.
+       If it fails and flags is not MAP_FIXED, try again with NULL address. */
+    if (start)
+      base = MapViewOfFileEx(h, access_param, high, low, len, start);
+    if (!base && !(flags & MAP_FIXED))
+      base = MapViewOfFileEx(h, access_param, high, low, len, NULL);
+  }
+  else if ((flags & MAP_PRIVATE) && (flags & MAP_ANONYMOUS))
+  {
+    if (start)
+      base = VirtualAlloc (start, len, MEM_COMMIT | MEM_RESERVE,
+          protect);
+    if (!base && !(flags & MAP_FIXED))
+      base = VirtualAlloc (NULL, len, MEM_COMMIT | MEM_RESERVE,
+          protect);
+  }
+  else
+  {
+    errno = ENOSYS;
+    return MAP_FAILED;
+  }
+
+  if (!base || ((flags & MAP_FIXED) && base != start))
+  {
+    if (!base)
+    {
+      errno = EINVAL;
+    }
+    else
+      errno = EINVAL;
+
+    if (h)
+      CloseHandle(h);
+    return MAP_FAILED;
+  }
+
+  return base;
+}
+
+void *
+mmap(void *start, size_t len, int access, int flags, int fd, unsigned long long off)
+{
+  return mmap_impl (start, len, access, flags, fd, off, TRUE);
+}
+
+/**
+ * @brief Unmap files from memory
+ * @author Cygwin team
+ * @author Nils Durner
+ */
+int
+munmap_impl (void *start, size_t length, int anonymous)
+{
+  if (anonymous)
+  {
+    if (VirtualFree (start, 0, MEM_RELEASE))
+    {
+      errno = 0;
+      return 0;
+    }
+    else
+    {
+      errno = EINVAL;
+      return (int) MAP_FAILED;
+    }
+  }
+  else
+  {
+    if (UnmapViewOfFile(start))
+    {
+      errno = 0;
+      return 0;
+    }
+    else
+    {
+      errno = EINVAL;
+      return (int) MAP_FAILED;
+    }
+  }
+}
+
+int
+munmap (void *start, size_t length)
+{
+  return munmap_impl (start, length, TRUE);
+}
+
+
+int
+mlock (const void *addr, size_t len)
+{
+  BOOL b;
+  b = VirtualLock ((LPVOID) addr, len);
+  if (0 == b)
+    return EINVAL;
+  return 0;
+}
+
+int
+munlock (const void *addr, size_t len)
+{
+  BOOL b;
+  b = VirtualUnlock ((LPVOID) addr, len);
+  if (0 == b)
+    return EINVAL;
+  return 0;
+}
+#endif
+
+
 /* -----------------------------------------------------------------------------
  * POOL META DATA ALLOCATION
  *
diff -Naur libsecret-0.19.1.orig/libsecret/mock-service.c libsecret-0.19.1/libsecret/mock-service.c
--- libsecret-0.19.1.orig/libsecret/mock-service.c	2019-09-08 22:13:01.722864500 -0400
+++ libsecret-0.19.1/libsecret/mock-service.c	2019-09-08 22:20:09.668492100 -0400
@@ -22,6 +22,9 @@
 #include <errno.h>
 #include <stdio.h>
 #include <string.h>
+#ifdef G_OS_WIN32
+#include <windows.h>
+#endif
 
 #ifdef __linux
 #include <sys/prctl.h>
@@ -135,10 +138,16 @@
 	while (g_main_context_iteration (NULL, FALSE));
 
 	if (pid) {
+#ifndef G_OS_WIN32
 		if (kill (pid, SIGTERM) < 0) {
 			if (errno != ESRCH)
 				g_warning ("kill() failed: %s", g_strerror (errno));
 		}
+#else
+	    if (!TerminateProcess ((HANDLE) pid, 0)) {
+		    g_warning ("TerminateProcess() failed: %lu", GetLastError ());
+	    }
+#endif
 
 		g_spawn_close_pid (pid);
 		pid = 0;
diff -Naur libsecret-0.19.1.orig/tool/secret-tool.c libsecret-0.19.1/tool/secret-tool.c
--- libsecret-0.19.1.orig/tool/secret-tool.c	2019-09-08 22:13:01.660294400 -0400
+++ libsecret-0.19.1/tool/secret-tool.c	2019-09-08 22:23:56.154326600 -0400
@@ -20,12 +20,17 @@
 #include "libsecret/secret-value.h"
 
 #include <glib/gi18n.h>
+#include <glib/gprintf.h>
 
 #include <errno.h>
 #include <locale.h>
 #include <limits.h>
 #include <stdlib.h>
 #include <string.h>
+#ifdef _WIN32
+#include <io.h>
+#include <conio.h>
+#endif
 
 #define SECRET_ALIAS_PREFIX "/org/freedesktop/secrets/aliases/"
 
@@ -262,6 +267,39 @@
 	                              (GDestroyNotify)secret_password_free);
 }
 
+#if defined(G_OS_WIN32) || defined(__BIONIC__)
+/* win32 doesn't have getpass() */
+#include <stdio.h>
+#ifndef BUFSIZ
+#define BUFSIZ 8192
+#endif
+static gchar *
+getpass (const gchar *prompt)
+{
+  static gchar buf[BUFSIZ];
+  gint i;
+
+  g_printf ("%s", prompt);
+  fflush (stdout);
+
+  for (i = 0; i < BUFSIZ - 1; ++i)
+    {
+#ifdef __BIONIC__
+      buf[i] = getc (stdin);
+#else
+      buf[i] = _getch ();
+#endif
+      if (buf[i] == '\r')
+        break;
+    }
+  buf[i] = '\0';
+
+  g_printf ("\n");
+
+  return &buf[0];
+}
+#endif
+
 static SecretValue *
 read_password_tty (void)
 {
--- libsecret-0.21.2/libsecret/mock-service.c.orig	2024-01-20 12:38:56.323450700 +0100
+++ libsecret-0.21.2/libsecret/mock-service.c	2024-01-20 12:39:07.052011000 +0100
@@ -24,6 +24,7 @@
 #include <string.h>
 #ifdef G_OS_WIN32
 #include <windows.h>
+#include <io.h>
 #endif
 
 #ifdef __linux
