process_win32.h 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /* Copyright (c) 2003-2004, Roger Dingledine
  2. * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
  3. * Copyright (c) 2007-2018, The Tor Project, Inc. */
  4. /* See LICENSE for licensing information */
  5. /**
  6. * \file process_win32.h
  7. * \brief Header for process_win32.c
  8. **/
  9. #ifndef TOR_PROCESS_WIN32_H
  10. #define TOR_PROCESS_WIN32_H
  11. #ifdef _WIN32
  12. #include "orconfig.h"
  13. #include "lib/malloc/malloc.h"
  14. #include "lib/evloop/compat_libevent.h"
  15. #include <windows.h>
  16. struct process_t;
  17. struct process_win32_t;
  18. typedef struct process_win32_t process_win32_t;
  19. process_win32_t *process_win32_new(void);
  20. void process_win32_free_(process_win32_t *win32_process);
  21. #define process_win32_free(s) \
  22. FREE_AND_NULL(process_win32_t, process_win32_free_, (s))
  23. void process_win32_init(void);
  24. void process_win32_deinit(void);
  25. process_status_t process_win32_exec(struct process_t *process);
  26. bool process_win32_terminate(struct process_t *process);
  27. process_pid_t process_win32_get_pid(struct process_t *process);
  28. int process_win32_write(struct process_t *process, buf_t *buffer);
  29. int process_win32_read_stdout(struct process_t *process, buf_t *buffer);
  30. int process_win32_read_stderr(struct process_t *process, buf_t *buffer);
  31. void process_win32_trigger_completion_callbacks(void);
  32. /* Timer handling. */
  33. void process_win32_timer_start(void);
  34. void process_win32_timer_stop(void);
  35. bool process_win32_timer_running(void);
  36. #ifdef PROCESS_WIN32_PRIVATE
  37. STATIC void process_win32_timer_callback(periodic_timer_t *, void *);
  38. STATIC bool process_win32_timer_test_process(process_t *);
  39. /* I/O pipe handling. */
  40. struct process_win32_handle_t;
  41. typedef struct process_win32_handle_t process_win32_handle_t;
  42. typedef enum process_win32_pipe_type_t {
  43. /** This pipe is used for reading. */
  44. PROCESS_WIN32_PIPE_TYPE_READER,
  45. /** This pipe is used for writing. */
  46. PROCESS_WIN32_PIPE_TYPE_WRITER
  47. } process_win32_pipe_type_t;
  48. STATIC bool process_win32_create_pipe(HANDLE *,
  49. HANDLE *,
  50. SECURITY_ATTRIBUTES *,
  51. process_win32_pipe_type_t);
  52. STATIC void process_win32_cleanup_handle(process_win32_handle_t *handle);
  53. STATIC VOID WINAPI process_win32_stdout_read_done(DWORD,
  54. DWORD,
  55. LPOVERLAPPED);
  56. STATIC VOID WINAPI process_win32_stderr_read_done(DWORD,
  57. DWORD,
  58. LPOVERLAPPED);
  59. STATIC VOID WINAPI process_win32_stdin_write_done(DWORD,
  60. DWORD,
  61. LPOVERLAPPED);
  62. STATIC int process_win32_read_from_handle(process_win32_handle_t *,
  63. buf_t *,
  64. LPOVERLAPPED_COMPLETION_ROUTINE);
  65. STATIC bool process_win32_handle_read_completion(process_win32_handle_t *,
  66. DWORD,
  67. DWORD);
  68. STATIC char *format_win_cmdline_argument(const char *arg);
  69. STATIC char *tor_join_win_cmdline(const char *argv[]);
  70. #endif /* defined(PROCESS_WIN32_PRIVATE). */
  71. #endif /* ! defined(_WIN32). */
  72. #endif /* defined(TOR_PROCESS_WIN32_H). */