diff --git a/extra/io/windows/directory/directory.factor b/extra/io/windows/directory/directory.factor
new file mode 100644
index 0000000000..4728a063a0
--- /dev/null
+++ b/extra/io/windows/directory/directory.factor
@@ -0,0 +1,34 @@
+USING: alien.c-types destructors io.windows
+io.windows.nt.backend kernel math windows
+windows.kernel32 windows.types libc ;
+IN: io.windows.directory
+
+: open-directory ( path -- handle )
+    [
+        FILE_LIST_DIRECTORY
+        share-mode
+        f
+        OPEN_EXISTING
+        FILE_FLAG_BACKUP_SEMANTICS FILE_FLAG_OVERLAPPED bitor
+        f
+        CreateFile
+        dup invalid-handle? dup close-later
+        dup add-completion
+    ] with-destructors ;
+
+: directory-notifications ( -- n )
+    FILE_NOTIFY_CHANGE_FILE_NAME FILE_NOTIFY_CHANGE_DIR_NAME bitor ;
+
+: read-directory-changes ( handle -- )
+    [
+        65536 dup malloc
+        swap
+        TRUE
+        directory-notifications
+        0 <int>
+        (make-overlapped)
+        ! f works here, blocking
+        f
+        ReadDirectoryChangesW win32-error=0/f
+    ] with-destructors ;
+