diff --git a/osdep.c b/osdep.c
index d1eff8d..ccc1d70 100644
--- a/osdep.c
+++ b/osdep.c
@@ -27,6 +27,7 @@
 #include <string.h>
 #include <errno.h>
 #include <unistd.h>
+#include <fcntl.h>
 #ifdef HOST_SOLARIS
 #include <sys/types.h>
 #include <sys/statvfs.h>
@@ -216,3 +217,50 @@
     strcpy(ptr, str);
     return ptr;
 }
+
+int qemu_create_pidfile(const char *filename)
+{
+    char buffer[128];
+    int len;
+#ifndef _WIN32
+    int fd;
+
+    fd = open(filename, O_RDWR | O_CREAT, 0600);
+    if (fd == -1)
+        return -1;
+
+    if (lockf(fd, F_TLOCK, 0) == -1)
+        return -1;
+
+    len = snprintf(buffer, sizeof(buffer), "%ld\n", (long)getpid());
+    if (write(fd, buffer, len) != len)
+        return -1;
+#else
+    HANDLE file;
+    DWORD flags;
+    OVERLAPPED overlap;
+    BOOL ret;
+
+    /* Open for writing with no sharing. */
+    file = CreateFile(filename, GENERIC_WRITE, 0, NULL, 
+		      OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
+
+    if (file == INVALID_HANDLE_VALUE)
+      return -1;
+
+    flags = LOCKFILE_EXCLUSIVE_LOCK | LOCKFILE_FAIL_IMMEDIATELY;
+    overlap.hEvent = 0;
+    /* Lock 1 byte. */
+    ret = LockFileEx(file, flags, 0, 0, 1, &overlap);
+    if (ret == 0)
+      return -1;
+
+    /* Write PID to file. */
+    len = snprintf(buffer, sizeof(buffer), "%ld\n", (long)getpid());
+    ret = WriteFileEx(file, (LPCVOID)buffer, (DWORD)len, 
+		      &overlap, NULL);
+    if (ret == 0)
+      return -1;
+#endif
+    return 0;
+}
diff --git a/osdep.h b/osdep.h
index 325baf1..68d29d7 100644
--- a/osdep.h
+++ b/osdep.h
@@ -15,4 +15,6 @@
 
 void *get_mmap_addr(unsigned long size);
 
+int qemu_create_pidfile(const char *filename);
+
 #endif
diff --git a/vl.c b/vl.c
index eb5d707..af8558b 100644
--- a/vl.c
+++ b/vl.c
@@ -4403,29 +4403,6 @@
     }
 }
 
-static int create_pidfile(const char *filename)
-{
-    int fd;
-    char buffer[128];
-    int len;
-
-    fd = open(filename, O_RDWR | O_CREAT, 0600);
-    if (fd == -1)
-        return -1;
-
-    /* XXX: No locking for Win32 implemented */
-#ifndef _WIN32
-    if (lockf(fd, F_TLOCK, 0) == -1)
-        return -1;
-#endif
-
-    len = snprintf(buffer, sizeof(buffer), "%ld\n", (long)getpid());
-    if (write(fd, buffer, len) != len)
-        return -1;
-
-    return 0;
-}
-
 /***********************************************************/
 /* dumb display */
 
@@ -7405,7 +7382,7 @@
     }
 #endif
 
-    if (pid_file && create_pidfile(pid_file) != 0) {
+    if (pid_file && qemu_create_pidfile(pid_file) != 0) {
         if (daemonize) {
             uint8_t status = 1;
             write(fds[1], &status, 1);
