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