diff --git a/src/os/win32/ngx_errno.h b/src/os/win32/ngx_errno.h
index 179cbbc..a7acf53 100644
--- a/src/os/win32/ngx_errno.h
+++ b/src/os/win32/ngx_errno.h
@@ -17,10 +17,13 @@
 #define NGX_EACCES                 ERROR_ACCESS_DENIED
 #define NGX_EEXIST                 ERROR_FILE_EXISTS
 #define NGX_ENOTDIR                ERROR_PATH_NOT_FOUND
+#define NGX_EPIPE                  EPIPE
 #define NGX_EAGAIN                 WSAEWOULDBLOCK
 #define NGX_EINPROGRESS            WSAEINPROGRESS
 #define NGX_EADDRINUSE             WSAEADDRINUSE
-#define NGX_ECONNRESET             ECONNRESET
+#define NGX_ECONNABORTED           WSAECONNABORTED
+#define NGX_ECONNRESET             WSAECONNRESET
+#define NGX_ENOTCONN               WSAENOTCONN
 #define NGX_ETIMEDOUT              WSAETIMEDOUT
 #define NGX_ENOMOREFILES           ERROR_NO_MORE_FILES
 
diff --git a/src/os/win32/ngx_files.h b/src/os/win32/ngx_files.h
index 1268d47..1b13f4c 100644
--- a/src/os/win32/ngx_files.h
+++ b/src/os/win32/ngx_files.h
@@ -21,8 +21,6 @@
 #define NGX_FILE_ERROR              0
 
 
-#define STDERR_FILENO               (HANDLE) 2
-
 
 #define ngx_open_file(name, access, create)                                 \
             CreateFile(name, access,                                        \
diff --git a/src/os/win32/ngx_os.h b/src/os/win32/ngx_os.h
index 212d57f..39af212 100644
--- a/src/os/win32/ngx_os.h
+++ b/src/os/win32/ngx_os.h
@@ -46,8 +46,13 @@
 extern int          ngx_win32_version;
 
 
-extern int          reconfigure;
-extern int          reopen;
+extern ngx_int_t    ngx_process;
+
+extern ngx_int_t    ngx_quit;
+extern ngx_int_t    ngx_terminate;
+
+extern ngx_int_t    ngx_reconfigure;
+extern ngx_int_t    ngx_reopen;
 
 
 
diff --git a/src/os/win32/ngx_process.c b/src/os/win32/ngx_process.c
new file mode 100644
index 0000000..e3a2786
--- /dev/null
+++ b/src/os/win32/ngx_process.c
@@ -0,0 +1,9 @@
+
+#include <ngx_config.h>
+#include <ngx_core.h>
+
+
+ngx_pid_t ngx_exec(ngx_cycle_t *cycle, ngx_exec_ctx_t *ctx)
+{
+    return /* STUB */ 0;
+}
diff --git a/src/os/win32/ngx_process.h b/src/os/win32/ngx_process.h
index a4d4bbc..35d9bb9 100644
--- a/src/os/win32/ngx_process.h
+++ b/src/os/win32/ngx_process.h
@@ -2,7 +2,29 @@
 #define _NGX_PROCESS_H_INCLUDED_
 
 
-#define ngx_getpid  GetCurrentProcessId
+typedef DWORD        ngx_pid_t;
+
+#define ngx_getpid   GetCurrentProcessId
+#define ngx_log_pid  ngx_pid
+
+
+typedef struct {
+    char         *path;
+    char         *name;
+    char *const  *argv;
+    char *const  *envp;
+} ngx_exec_ctx_t;
+
+
+#define NGX_PROCESS_SINGLE   0
+#define NGX_PROCESS_MASTER   1
+#define NGX_PROCESS_WORKER   2
+
+
+ngx_pid_t ngx_exec(ngx_cycle_t *cycle, ngx_exec_ctx_t *ctx);
+
+
+extern ngx_pid_t     ngx_pid;
 
 
 #endif /* _NGX_PROCESS_H_INCLUDED_ */
diff --git a/src/os/win32/ngx_process_cycle.c b/src/os/win32/ngx_process_cycle.c
new file mode 100644
index 0000000..8ffef52
--- /dev/null
+++ b/src/os/win32/ngx_process_cycle.c
@@ -0,0 +1,28 @@
+
+#include <ngx_config.h>
+#include <ngx_core.h>
+#include <ngx_event.h>
+
+
+#if 0
+
+ngx_int_t     ngx_process;
+ngx_pid_t     ngx_pid;
+ngx_pid_t     ngx_new_binary;
+ngx_int_t     ngx_inherited;
+
+sig_atomic_t  ngx_reap;
+sig_atomic_t  ngx_timer;
+sig_atomic_t  ngx_terminate;
+sig_atomic_t  ngx_quit;
+sig_atomic_t  ngx_noaccept;
+sig_atomic_t  ngx_reconfigure;
+sig_atomic_t  ngx_reopen;
+sig_atomic_t  ngx_change_binary;
+
+#endif
+
+
+void ngx_master_process_cycle(ngx_cycle_t *cycle, ngx_master_ctx_t *ctx)
+{
+}
diff --git a/src/os/win32/ngx_process_cycle.h b/src/os/win32/ngx_process_cycle.h
new file mode 100644
index 0000000..c863b62
--- /dev/null
+++ b/src/os/win32/ngx_process_cycle.h
@@ -0,0 +1,40 @@
+#ifndef _NGX_PROCESS_CYCLE_H_INCLUDED_
+#define _NGX_PROCESS_CYCLE_H_INCLUDED_
+
+
+#include <ngx_config.h>
+#include <ngx_core.h>
+
+
+typedef struct {
+     ngx_file_t    pid;
+     char         *name;
+     int           argc;
+     char *const  *argv;
+} ngx_master_ctx_t;
+
+
+#define NGX_PROCESS_SINGLE   0
+#define NGX_PROCESS_MASTER   1
+#define NGX_PROCESS_WORKER   2
+
+
+void ngx_master_process_cycle(ngx_cycle_t *cycle, ngx_master_ctx_t *ctx);
+
+
+extern ngx_int_t       ngx_process;
+extern ngx_pid_t       ngx_pid;
+extern ngx_pid_t       ngx_new_binary;
+extern ngx_int_t       ngx_inherited;
+
+extern sig_atomic_t    ngx_reap;
+extern sig_atomic_t    ngx_timer;
+extern sig_atomic_t    ngx_quit;
+extern sig_atomic_t    ngx_terminate;
+extern sig_atomic_t    ngx_noaccept;
+extern sig_atomic_t    ngx_reconfigure;
+extern sig_atomic_t    ngx_reopen;
+extern sig_atomic_t    ngx_change_binary;
+
+
+#endif /* _NGX_PROCESS_CYCLE_H_INCLUDED_ */
diff --git a/src/os/win32/ngx_thread.h b/src/os/win32/ngx_thread.h
new file mode 100644
index 0000000..cb282fb
--- /dev/null
+++ b/src/os/win32/ngx_thread.h
@@ -0,0 +1,26 @@
+#ifndef _NGX_THREAD_H_INCLUDED_
+#define _NGX_THREAD_H_INCLUDED_
+
+
+#include <ngx_config.h>
+#include <ngx_core.h>
+
+
+#if (NGX_THREADS)
+
+#define ngx_thread_volatile  volatile
+
+#else /* !NGX_THREADS */
+
+#define ngx_thread_volatile
+
+#define ngx_log_tid  0
+#define TID_T_FMT    "%d"
+
+#define ngx_mutex_lock(m)     NGX_OK
+#define ngx_mutex_unlock(m)
+
+#endif
+
+
+#endif /* _NGX_THREAD_H_INCLUDED_ */
diff --git a/src/os/win32/ngx_user.h b/src/os/win32/ngx_user.h
new file mode 100644
index 0000000..480a258
--- /dev/null
+++ b/src/os/win32/ngx_user.h
@@ -0,0 +1,14 @@
+#ifndef _NGX_USER_H_INCLUDED_
+#define _NGX_USER_H_INCLUDED_
+
+
+#include <ngx_config.h>
+#include <ngx_core.h>
+
+
+/* STUB */
+#define ngx_uid_t  ngx_int_t
+#define ngx_gid_t  ngx_int_t
+
+
+#endif /* _NGX_USER_H_INCLUDED_ */
diff --git a/src/os/win32/ngx_win32_config.h b/src/os/win32/ngx_win32_config.h
index 7b1fd13..00f6426 100644
--- a/src/os/win32/ngx_win32_config.h
+++ b/src/os/win32/ngx_win32_config.h
@@ -4,8 +4,6 @@
 
 #define WIN32       1
 
-#define NGX_WIN_NT  200000
-
 #define STRICT
 #define WIN32_LEAN_AND_MEAN
 
@@ -36,16 +34,19 @@
 #pragma warning(disable:4127)
 #endif
 
+#include <ngx_auto_config.h>
+
 
 #define ngx_inline   __inline
 
 
-#if 0
-/* owc have not __int32 */
+#if 1
 typedef unsigned __int32  uint32_t;
 #else
+/* OWC has not __int32 */
 typedef unsigned int      uint32_t;
 #endif
+
 typedef __int64           int64_t;
 typedef unsigned __int64  uint64_t;
 typedef u_int             uintptr_t;
@@ -54,6 +55,7 @@
 typedef long              time_t;
 typedef __int64           off_t;
 typedef uint32_t          in_addr_t;
+typedef int               sig_atomic_t;
 
 
 #define OFF_T_FMT         "%I64d"
@@ -61,8 +63,11 @@
 #define SIZE_T_X_FMT      "%x"
 #define PID_T_FMT         "%d"
 #define TIME_T_FMT        "%lu"
+#define PTR_FMT           "%08X"
 
 
+#define NGX_WIN_NT        200000
+
 
 #ifndef HAVE_INHERITED_NONBLOCK
 #define HAVE_INHERITED_NONBLOCK  1
diff --git a/src/os/win32/ngx_wsarecv.c b/src/os/win32/ngx_wsarecv.c
index 2a43498..96fa0ff 100644
--- a/src/os/win32/ngx_wsarecv.c
+++ b/src/os/win32/ngx_wsarecv.c
@@ -20,7 +20,8 @@
 
     rc = WSARecv(c->fd, wsabuf, 1, &bytes, &flags, NULL, NULL);
 
-    ngx_log_debug(c->log, "WSARecv: %d:%d" _ rc _ bytes);
+    ngx_log_debug4(NGX_LOG_DEBUG_EVENT, c->log, 0,
+                   "WSARecv: fd:%d rc:%d %d of %d", c->fd, rc, bytes, size);
 
     rev = c->read;
 
@@ -29,12 +30,14 @@
         err = ngx_socket_errno;
 
         if (err == WSAEWOULDBLOCK) {
-            ngx_log_error(NGX_LOG_INFO, c->log, err, "WSARecv() EAGAIN");
+            ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
+                           "WSARecv() not ready");
             return NGX_AGAIN;
         }
 
         rev->error = 1;
-        ngx_log_error(NGX_LOG_CRIT, c->log, err, "WSARecv() failed");
+        ngx_connection_error(c, err, "WSARecv() failed");
+
         return NGX_ERROR;
     }
 
@@ -63,19 +66,19 @@
     rev = c->read;
 
     if (!rev->ready) {
-        ngx_log_error(NGX_LOG_ALERT, rev->log, 0, "SECOND WSA POST");
+        ngx_log_error(NGX_LOG_ALERT, rev->log, 0, "second wsa post");
         return NGX_AGAIN;
     }
 
-    ngx_log_debug(c->log, "rev->complete: %d" _ rev->complete);
+    ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
+                   "rev->complete: %d", rev->complete);
 
     if (rev->complete) {
         rev->complete = 0;
 
         if (ngx_event_flags & NGX_USE_IOCP_EVENT) {
             if (rev->ovlp.error) {
-                ngx_log_error(NGX_LOG_ERR, c->log, rev->ovlp.error,
-                              "WSARecv() failed");
+                ngx_connection_error(c, rev->ovlp.error, "WSARecv() failed");
                 return NGX_ERROR;
             }
 
@@ -84,9 +87,8 @@
 
         if (WSAGetOverlappedResult(c->fd, (LPWSAOVERLAPPED) &rev->ovlp,
                                    &bytes, 0, NULL) == 0) {
-            ngx_log_error(NGX_LOG_CRIT, c->log, ngx_socket_errno,
-                         "WSARecv() or WSAGetOverlappedResult() failed");
-
+            ngx_connection_error(c, ngx_socket_errno,
+                               "WSARecv() or WSAGetOverlappedResult() failed");
             return NGX_ERROR;
         }
 
@@ -104,7 +106,8 @@
 
     rev->complete = 0;
 
-    ngx_log_debug(c->log, "WSARecv: %d:%d" _ rc _ bytes);
+    ngx_log_debug4(NGX_LOG_DEBUG_EVENT, c->log, 0,
+                   "WSARecv: fd:%d rc:%d %d of %d", c->fd, rc, bytes, size);
 
     if (rc == -1) {
         err = ngx_socket_errno;
@@ -114,7 +117,7 @@
         }
 
         rev->error = 1;
-        ngx_log_error(NGX_LOG_CRIT, c->log, err, "WSARecv() failed");
+        ngx_connection_error(c, err, "WSARecv() failed");
         return NGX_ERROR;
     }
 
diff --git a/src/os/win32/ngx_wsarecv_chain.c b/src/os/win32/ngx_wsarecv_chain.c
index edc4421..afdfa05 100644
--- a/src/os/win32/ngx_wsarecv_chain.c
+++ b/src/os/win32/ngx_wsarecv_chain.c
@@ -40,7 +40,9 @@
         chain = chain->next;
     }
 
-ngx_log_debug(c->log, "WSARecv: %d:%d" _ io.nelts _ wsabuf->len);
+    ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0,
+                   "WSARecv: %d:%d", io.nelts, wsabuf->len);
+
 
     rc = WSARecv(c->fd, io.elts, io.nelts, &bytes, &flags, NULL, NULL);
 
@@ -51,12 +53,13 @@
         err = ngx_socket_errno;
 
         if (err == WSAEWOULDBLOCK) {
-            ngx_log_error(NGX_LOG_INFO, c->log, err, "WSARecv() EAGAIN");
+            ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
+                           "WSARecv() not ready");
             return NGX_AGAIN;
         }
 
         rev->error = 1;
-        ngx_log_error(NGX_LOG_CRIT, c->log, err, "WSARecv() failed");
+        ngx_connection_error(c, err, "WSARecv() failed");
         return NGX_ERROR;
     }
 
diff --git a/src/os/win32/ngx_wsasend_chain.c b/src/os/win32/ngx_wsasend_chain.c
index 438f3db..a52296a 100644
--- a/src/os/win32/ngx_wsasend_chain.c
+++ b/src/os/win32/ngx_wsasend_chain.c
@@ -53,18 +53,19 @@
         err = ngx_errno;
 
         if (err == WSAEWOULDBLOCK) {
-            ngx_log_error(NGX_LOG_INFO, c->log, err, "WSASend() EAGAIN");
+            ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
+                           "WSASend() not ready");
             wev->ready = 0;
             return in;
 
         } else {
             wev->error = 1;
-            ngx_log_error(NGX_LOG_CRIT, c->log, err, "WSASend() failed");
+            ngx_connection_error(c, err, "WSASend() failed");
             return NGX_CHAIN_ERROR;
         }
     }
 
-    ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "WSASend(): %d", sent);
+    ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "WSASend: %d", sent);
 
     c->sent += sent;
 
@@ -162,7 +163,7 @@
 
             } else {
                 wev->error = 1;
-                ngx_log_error(NGX_LOG_CRIT, c->log, err, "WSASend() failed");
+                ngx_connection_error(c, err, "WSASend() failed");
                 return NGX_CHAIN_ERROR;
             }
  
@@ -187,8 +188,7 @@
 
         if (ngx_event_flags & NGX_USE_IOCP_EVENT) {
             if (wev->ovlp.error) {
-                ngx_log_error(NGX_LOG_ERR, c->log, wev->ovlp.error,
-                              "WSASend() failed");
+                ngx_connection_error(c, wev->ovlp.error, "WSASend() failed");
                 return NGX_CHAIN_ERROR;
             }
 
@@ -197,15 +197,15 @@
         } else {
             if (WSAGetOverlappedResult(c->fd, (LPWSAOVERLAPPED) &wev->ovlp,
                                        &sent, 0, NULL) == 0) {
-                ngx_log_error(NGX_LOG_CRIT, c->log, ngx_socket_errno,
-                             "WSASend() or WSAGetOverlappedResult() failed");
+                ngx_connection_error(c, ngx_socket_errno,
+                               "WSASend() or WSAGetOverlappedResult() failed");
     
                 return NGX_CHAIN_ERROR;
             }
         }
     }
 
-    ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "WSASend(): %d", sent);
+    ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "WSASend: %d", sent);
 
     c->sent += sent;
 
