+static int dup_handle(HANDLE source_handle, HANDLE *dest_handle_ptr, TCHAR *source_description, TCHAR *dest_description, unsigned long flags) {\r
+ if (! dest_handle_ptr) return 1;\r
+\r
+ if (! DuplicateHandle(GetCurrentProcess(), source_handle, GetCurrentProcess(), dest_handle_ptr, 0, true, flags)) {\r
+ log_event(EVENTLOG_ERROR_TYPE, NSSM_EVENT_DUPLICATEHANDLE_FAILED, source_description, dest_description, error_string(GetLastError()), 0);\r
+ return 2;\r
+ }\r
+ return 0;\r
+}\r
+\r
+static int dup_handle(HANDLE source_handle, HANDLE *dest_handle_ptr, TCHAR *source_description, TCHAR *dest_description) {\r
+ return dup_handle(source_handle, dest_handle_ptr, source_description, dest_description, DUPLICATE_SAME_ACCESS);\r
+}\r
+\r
+/*\r
+ read_handle: read from application\r
+ pipe_handle: stdout of application\r
+ write_handle: to file\r
+*/\r