1 /*
2  * Copyright 2016 Klemens D. Morgenstern
3  * Copyright 2016, 2017 Andrey Semashev
4  *
5  * Distributed under the Boost Software License, Version 1.0.
6  * See http://www.boost.org/LICENSE_1_0.txt
7  */
8 
9 #ifndef BOOST_WINAPI_PROCESS_HPP_INCLUDED_
10 #define BOOST_WINAPI_PROCESS_HPP_INCLUDED_
11 
12 #include <boost/winapi/config.hpp>
13 #include <boost/winapi/basic_types.hpp>
14 #include <boost/winapi/access_rights.hpp>
15 #include <boost/winapi/get_current_process.hpp>
16 #include <boost/winapi/get_current_process_id.hpp>
17 
18 #ifdef BOOST_HAS_PRAGMA_ONCE
19 #pragma once
20 #endif
21 
22 #if !defined( BOOST_USE_WINDOWS_H )
23 extern "C" {
24 
25 #if BOOST_WINAPI_PARTITION_APP_SYSTEM
26 struct _PROCESS_INFORMATION;
27 #if !defined( BOOST_NO_ANSI_APIS )
28 struct _STARTUPINFOA;
29 #endif
30 struct _STARTUPINFOW;
31 #endif // BOOST_WINAPI_PARTITION_APP_SYSTEM
32 
33 #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
34 
35 #if BOOST_WINAPI_PARTITION_DESKTOP_SYSTEM
36 struct _PROC_THREAD_ATTRIBUTE_LIST;
37 #endif // BOOST_WINAPI_PARTITION_DESKTOP_SYSTEM
38 
39 #if BOOST_WINAPI_PARTITION_DESKTOP
40 #if !defined( BOOST_NO_ANSI_APIS )
41 struct _STARTUPINFOEXA;
42 #endif
43 struct _STARTUPINFOEXW;
44 #endif // BOOST_WINAPI_PARTITION_DESKTOP
45 
46 #endif // BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
47 
48 #if BOOST_WINAPI_PARTITION_DESKTOP_SYSTEM
49 
50 BOOST_SYMBOL_IMPORT BOOST_NORETURN boost::winapi::VOID_ BOOST_WINAPI_WINAPI_CC
51 ExitProcess(boost::winapi::UINT_ uExitCode);
52 
53 BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC GetExitCodeProcess(
54     boost::winapi::HANDLE_ hProcess,
55     boost::winapi::LPDWORD_ lpExitCode);
56 
57 #if !defined( BOOST_NO_ANSI_APIS )
58 BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC CreateProcessA(
59     boost::winapi::LPCSTR_ lpApplicationName,
60     boost::winapi::LPSTR_ lpCommandLine,
61     ::_SECURITY_ATTRIBUTES* lpProcessAttributes,
62     ::_SECURITY_ATTRIBUTES* lpThreadAttributes,
63     boost::winapi::INT_ bInheritHandles,
64     boost::winapi::DWORD_ dwCreationFlags,
65     boost::winapi::LPVOID_ lpEnvironment,
66     boost::winapi::LPCSTR_ lpCurrentDirectory,
67     ::_STARTUPINFOA* lpStartupInfo,
68     ::_PROCESS_INFORMATION* lpProcessInformation);
69 #endif
70 
71 BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC CreateProcessW(
72     boost::winapi::LPCWSTR_ lpApplicationName,
73     boost::winapi::LPWSTR_ lpCommandLine,
74     ::_SECURITY_ATTRIBUTES* lpProcessAttributes,
75     ::_SECURITY_ATTRIBUTES* lpThreadAttributes,
76     boost::winapi::INT_ bInheritHandles,
77     boost::winapi::DWORD_ dwCreationFlags,
78     boost::winapi::LPVOID_ lpEnvironment,
79     boost::winapi::LPCWSTR_ lpCurrentDirectory,
80     ::_STARTUPINFOW* lpStartupInfo,
81     ::_PROCESS_INFORMATION* lpProcessInformation);
82 
83 #endif // BOOST_WINAPI_PARTITION_DESKTOP_SYSTEM
84 
85 #if BOOST_WINAPI_PARTITION_APP_SYSTEM
86 
87 BOOST_SYMBOL_IMPORT boost::winapi::HANDLE_ BOOST_WINAPI_WINAPI_CC OpenProcess(
88     boost::winapi::DWORD_ dwDesiredAccess,
89     boost::winapi::BOOL_ bInheritHandle,
90     boost::winapi::DWORD_ dwProcessId);
91 
92 BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC TerminateProcess(
93     boost::winapi::HANDLE_ hProcess,
94     boost::winapi::UINT_ uExitCode);
95 
96 #endif // BOOST_WINAPI_PARTITION_APP_SYSTEM
97 
98 } // extern "C"
99 #endif // defined BOOST_WINDOWS_H
100 
101 namespace boost {
102 namespace winapi {
103 
104 #if defined( BOOST_USE_WINDOWS_H )
105 
106 #if BOOST_WINAPI_PARTITION_APP_SYSTEM
107 
108 BOOST_CONSTEXPR_OR_CONST DWORD_ DEBUG_PROCESS_                    = DEBUG_PROCESS;
109 BOOST_CONSTEXPR_OR_CONST DWORD_ DEBUG_ONLY_THIS_PROCESS_          = DEBUG_ONLY_THIS_PROCESS;
110 BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_SUSPENDED_                 = CREATE_SUSPENDED;
111 BOOST_CONSTEXPR_OR_CONST DWORD_ DETACHED_PROCESS_                 = DETACHED_PROCESS;
112 BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_NEW_CONSOLE_               = CREATE_NEW_CONSOLE;
113 BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_NEW_PROCESS_GROUP_         = CREATE_NEW_PROCESS_GROUP;
114 BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_UNICODE_ENVIRONMENT_       = CREATE_UNICODE_ENVIRONMENT;
115 BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_SEPARATE_WOW_VDM_          = CREATE_SEPARATE_WOW_VDM;
116 BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_SHARED_WOW_VDM_            = CREATE_SHARED_WOW_VDM;
117 BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_FORCEDOS_                  = CREATE_FORCEDOS;
118 BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_BREAKAWAY_FROM_JOB_        = CREATE_BREAKAWAY_FROM_JOB;
119 BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_DEFAULT_ERROR_MODE_        = CREATE_DEFAULT_ERROR_MODE;
120 BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_NO_WINDOW_                 = CREATE_NO_WINDOW;
121 
122 // Undocumented
123 BOOST_CONSTEXPR_OR_CONST DWORD_ PROFILE_USER_                     = PROFILE_USER;
124 BOOST_CONSTEXPR_OR_CONST DWORD_ PROFILE_KERNEL_                   = PROFILE_KERNEL;
125 BOOST_CONSTEXPR_OR_CONST DWORD_ PROFILE_SERVER_                   = PROFILE_SERVER;
126 
127 #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
128 BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_PROTECTED_PROCESS_         = CREATE_PROTECTED_PROCESS;
129 BOOST_CONSTEXPR_OR_CONST DWORD_ EXTENDED_STARTUPINFO_PRESENT_     = EXTENDED_STARTUPINFO_PRESENT;
130 #endif
131 
132 #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN7
133 BOOST_CONSTEXPR_OR_CONST DWORD_ INHERIT_PARENT_AFFINITY_          = INHERIT_PARENT_AFFINITY;
134 #endif
135 
136 // Only documented for Windows CE
137 #if defined(UNDER_CE)
138 BOOST_CONSTEXPR_OR_CONST DWORD_ INHERIT_CALLER_PRIORITY_          = INHERIT_CALLER_PRIORITY;
139 #endif
140 
141 #endif // BOOST_WINAPI_PARTITION_APP_SYSTEM
142 
143 #if BOOST_WINAPI_PARTITION_DESKTOP
144 
145 BOOST_CONSTEXPR_OR_CONST DWORD_ STARTF_USESHOWWINDOW_    = STARTF_USESHOWWINDOW;
146 BOOST_CONSTEXPR_OR_CONST DWORD_ STARTF_USESIZE_          = STARTF_USESIZE;
147 BOOST_CONSTEXPR_OR_CONST DWORD_ STARTF_USEPOSITION_      = STARTF_USEPOSITION;
148 BOOST_CONSTEXPR_OR_CONST DWORD_ STARTF_USECOUNTCHARS_    = STARTF_USECOUNTCHARS;
149 BOOST_CONSTEXPR_OR_CONST DWORD_ STARTF_USEFILLATTRIBUTE_ = STARTF_USEFILLATTRIBUTE;
150 BOOST_CONSTEXPR_OR_CONST DWORD_ STARTF_RUNFULLSCREEN_    = STARTF_RUNFULLSCREEN;
151 BOOST_CONSTEXPR_OR_CONST DWORD_ STARTF_FORCEONFEEDBACK_  = STARTF_FORCEONFEEDBACK;
152 BOOST_CONSTEXPR_OR_CONST DWORD_ STARTF_FORCEOFFFEEDBACK_ = STARTF_FORCEOFFFEEDBACK;
153 BOOST_CONSTEXPR_OR_CONST DWORD_ STARTF_USESTDHANDLES_    = STARTF_USESTDHANDLES;
154 BOOST_CONSTEXPR_OR_CONST DWORD_ STARTF_USEHOTKEY_        = STARTF_USEHOTKEY;
155 
156 #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN7
157 BOOST_CONSTEXPR_OR_CONST DWORD_ STARTF_TITLEISLINKNAME_  = STARTF_TITLEISLINKNAME;
158 BOOST_CONSTEXPR_OR_CONST DWORD_ STARTF_TITLEISAPPID_     = STARTF_TITLEISAPPID;
159 BOOST_CONSTEXPR_OR_CONST DWORD_ STARTF_PREVENTPINNING_   = STARTF_PREVENTPINNING;
160 #endif
161 
162 #endif // BOOST_WINAPI_PARTITION_DESKTOP
163 
164 BOOST_CONSTEXPR_OR_CONST DWORD_ PROCESS_TERMINATE_ = PROCESS_TERMINATE;
165 BOOST_CONSTEXPR_OR_CONST DWORD_ PROCESS_CREATE_THREAD_ = PROCESS_CREATE_THREAD;
166 BOOST_CONSTEXPR_OR_CONST DWORD_ PROCESS_SET_SESSIONID_ = PROCESS_SET_SESSIONID;
167 BOOST_CONSTEXPR_OR_CONST DWORD_ PROCESS_VM_OPERATION_ = PROCESS_VM_OPERATION;
168 BOOST_CONSTEXPR_OR_CONST DWORD_ PROCESS_VM_READ_ = PROCESS_VM_READ;
169 BOOST_CONSTEXPR_OR_CONST DWORD_ PROCESS_VM_WRITE_ = PROCESS_VM_WRITE;
170 BOOST_CONSTEXPR_OR_CONST DWORD_ PROCESS_DUP_HANDLE_ = PROCESS_DUP_HANDLE;
171 BOOST_CONSTEXPR_OR_CONST DWORD_ PROCESS_CREATE_PROCESS_ = PROCESS_CREATE_PROCESS;
172 BOOST_CONSTEXPR_OR_CONST DWORD_ PROCESS_SET_QUOTA_ = PROCESS_SET_QUOTA;
173 BOOST_CONSTEXPR_OR_CONST DWORD_ PROCESS_SET_INFORMATION_ = PROCESS_SET_INFORMATION;
174 BOOST_CONSTEXPR_OR_CONST DWORD_ PROCESS_QUERY_INFORMATION_ = PROCESS_QUERY_INFORMATION;
175 BOOST_CONSTEXPR_OR_CONST DWORD_ PROCESS_SUSPEND_RESUME_ = PROCESS_SUSPEND_RESUME;
176 BOOST_CONSTEXPR_OR_CONST DWORD_ PROCESS_ALL_ACCESS_ = PROCESS_ALL_ACCESS;
177 
178 #else // defined( BOOST_USE_WINDOWS_H )
179 
180 #if BOOST_WINAPI_PARTITION_APP_SYSTEM
181 
182 BOOST_CONSTEXPR_OR_CONST DWORD_ DEBUG_PROCESS_                    = 0x1;
183 BOOST_CONSTEXPR_OR_CONST DWORD_ DEBUG_ONLY_THIS_PROCESS_          = 0x2;
184 BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_SUSPENDED_                 = 0x4;
185 BOOST_CONSTEXPR_OR_CONST DWORD_ DETACHED_PROCESS_                 = 0x8;
186 BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_NEW_CONSOLE_               = 0x10;
187 BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_NEW_PROCESS_GROUP_         = 0x200;
188 BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_UNICODE_ENVIRONMENT_       = 0x400;
189 BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_SEPARATE_WOW_VDM_          = 0x800;
190 BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_SHARED_WOW_VDM_            = 0x1000;
191 BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_FORCEDOS_                  = 0x2000;
192 BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_BREAKAWAY_FROM_JOB_        = 0x1000000;
193 BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_DEFAULT_ERROR_MODE_        = 0x4000000;
194 BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_NO_WINDOW_                 = 0x8000000;
195 
196 // Undocumented
197 BOOST_CONSTEXPR_OR_CONST DWORD_ PROFILE_USER_                     = 0x10000000;
198 BOOST_CONSTEXPR_OR_CONST DWORD_ PROFILE_KERNEL_                   = 0x20000000;
199 BOOST_CONSTEXPR_OR_CONST DWORD_ PROFILE_SERVER_                   = 0x40000000;
200 
201 #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
202 BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_PROTECTED_PROCESS_         = 0x40000;
203 BOOST_CONSTEXPR_OR_CONST DWORD_ EXTENDED_STARTUPINFO_PRESENT_     = 0x80000;
204 #endif
205 
206 #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN7
207 BOOST_CONSTEXPR_OR_CONST DWORD_ INHERIT_PARENT_AFFINITY_          = 0x10000;
208 #endif
209 
210 // Only documented for Windows CE
211 #if defined(UNDER_CE)
212 BOOST_CONSTEXPR_OR_CONST DWORD_ INHERIT_CALLER_PRIORITY_          = 0x20000;
213 #endif
214 
215 #endif // BOOST_WINAPI_PARTITION_APP_SYSTEM
216 
217 #if BOOST_WINAPI_PARTITION_DESKTOP
218 
219 BOOST_CONSTEXPR_OR_CONST DWORD_ STARTF_USESHOWWINDOW_    = 0x00000001;
220 BOOST_CONSTEXPR_OR_CONST DWORD_ STARTF_USESIZE_          = 0x00000002;
221 BOOST_CONSTEXPR_OR_CONST DWORD_ STARTF_USEPOSITION_      = 0x00000004;
222 BOOST_CONSTEXPR_OR_CONST DWORD_ STARTF_USECOUNTCHARS_    = 0x00000008;
223 BOOST_CONSTEXPR_OR_CONST DWORD_ STARTF_USEFILLATTRIBUTE_ = 0x00000010;
224 BOOST_CONSTEXPR_OR_CONST DWORD_ STARTF_RUNFULLSCREEN_    = 0x00000020;
225 BOOST_CONSTEXPR_OR_CONST DWORD_ STARTF_FORCEONFEEDBACK_  = 0x00000040;
226 BOOST_CONSTEXPR_OR_CONST DWORD_ STARTF_FORCEOFFFEEDBACK_ = 0x00000080;
227 BOOST_CONSTEXPR_OR_CONST DWORD_ STARTF_USESTDHANDLES_    = 0x00000100;
228 BOOST_CONSTEXPR_OR_CONST DWORD_ STARTF_USEHOTKEY_        = 0x00000200;
229 
230 #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN7
231 BOOST_CONSTEXPR_OR_CONST DWORD_ STARTF_TITLEISLINKNAME_  = 0x00000800;
232 BOOST_CONSTEXPR_OR_CONST DWORD_ STARTF_TITLEISAPPID_     = 0x00001000;
233 BOOST_CONSTEXPR_OR_CONST DWORD_ STARTF_PREVENTPINNING_   = 0x00002000;
234 #endif
235 
236 #endif // BOOST_WINAPI_PARTITION_DESKTOP
237 
238 BOOST_CONSTEXPR_OR_CONST DWORD_ PROCESS_TERMINATE_ = 0x0001;
239 BOOST_CONSTEXPR_OR_CONST DWORD_ PROCESS_CREATE_THREAD_ = 0x0002;
240 BOOST_CONSTEXPR_OR_CONST DWORD_ PROCESS_SET_SESSIONID_ = 0x0004;
241 BOOST_CONSTEXPR_OR_CONST DWORD_ PROCESS_VM_OPERATION_ = 0x0008;
242 BOOST_CONSTEXPR_OR_CONST DWORD_ PROCESS_VM_READ_ = 0x0010;
243 BOOST_CONSTEXPR_OR_CONST DWORD_ PROCESS_VM_WRITE_ = 0x0020;
244 BOOST_CONSTEXPR_OR_CONST DWORD_ PROCESS_DUP_HANDLE_ = 0x0040;
245 BOOST_CONSTEXPR_OR_CONST DWORD_ PROCESS_CREATE_PROCESS_ = 0x0080;
246 BOOST_CONSTEXPR_OR_CONST DWORD_ PROCESS_SET_QUOTA_ = 0x0100;
247 BOOST_CONSTEXPR_OR_CONST DWORD_ PROCESS_SET_INFORMATION_ = 0x0200;
248 BOOST_CONSTEXPR_OR_CONST DWORD_ PROCESS_QUERY_INFORMATION_ = 0x0400;
249 BOOST_CONSTEXPR_OR_CONST DWORD_ PROCESS_SUSPEND_RESUME_ = 0x0800;
250 BOOST_CONSTEXPR_OR_CONST DWORD_ PROCESS_ALL_ACCESS_ = (STANDARD_RIGHTS_REQUIRED_ | SYNCHRONIZE_ |
251 #if BOOST_USE_NTDDI_VERSION >= BOOST_WINAPI_NTDDI_WIN6
252     0xFFFF
253 #else
254     0x0FFF
255 #endif
256 );
257 
258 #endif // defined( BOOST_USE_WINDOWS_H )
259 
260 #if BOOST_WINAPI_PARTITION_APP_SYSTEM
261 
262 #if defined( BOOST_USE_WINDOWS_H ) && !defined( BOOST_WINAPI_IS_MINGW )
263 
264 BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_PRESERVE_CODE_AUTHZ_LEVEL_ = CREATE_PRESERVE_CODE_AUTHZ_LEVEL;
265 
266 // Undocumented
267 BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_IGNORE_SYSTEM_DEFAULT_     = CREATE_IGNORE_SYSTEM_DEFAULT;
268 
269 #else // defined( BOOST_USE_WINDOWS_H ) && !defined( BOOST_WINAPI_IS_MINGW )
270 
271 BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_PRESERVE_CODE_AUTHZ_LEVEL_ = 0x2000000;
272 
273 // Undocumented
274 BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_IGNORE_SYSTEM_DEFAULT_     = 0x80000000;
275 
276 #endif // defined( BOOST_USE_WINDOWS_H ) && !defined( BOOST_WINAPI_IS_MINGW )
277 
278 #endif // BOOST_WINAPI_PARTITION_APP_SYSTEM
279 
280 #if BOOST_WINAPI_PARTITION_APP_SYSTEM
281 
282 typedef struct BOOST_MAY_ALIAS _PROCESS_INFORMATION {
283     HANDLE_ hProcess;
284     HANDLE_ hThread;
285     DWORD_ dwProcessId;
286     DWORD_ dwThreadId;
287 } PROCESS_INFORMATION_, *PPROCESS_INFORMATION_, *LPPROCESS_INFORMATION_;
288 
289 #if !defined(BOOST_NO_ANSI_APIS)
290 typedef struct BOOST_MAY_ALIAS _STARTUPINFOA {
291     DWORD_ cb;
292     LPSTR_ lpReserved;
293     LPSTR_ lpDesktop;
294     LPSTR_ lpTitle;
295     DWORD_ dwX;
296     DWORD_ dwY;
297     DWORD_ dwXSize;
298     DWORD_ dwYSize;
299     DWORD_ dwXCountChars;
300     DWORD_ dwYCountChars;
301     DWORD_ dwFillAttribute;
302     DWORD_ dwFlags;
303     WORD_ wShowWindow;
304     WORD_ cbReserved2;
305     LPBYTE_ lpReserved2;
306     HANDLE_ hStdInput;
307     HANDLE_ hStdOutput;
308     HANDLE_ hStdError;
309 } STARTUPINFOA_, *LPSTARTUPINFOA_;
310 #endif // !defined(BOOST_NO_ANSI_APIS)
311 
312 typedef struct BOOST_MAY_ALIAS _STARTUPINFOW {
313     DWORD_ cb;
314     LPWSTR_ lpReserved;
315     LPWSTR_ lpDesktop;
316     LPWSTR_ lpTitle;
317     DWORD_ dwX;
318     DWORD_ dwY;
319     DWORD_ dwXSize;
320     DWORD_ dwYSize;
321     DWORD_ dwXCountChars;
322     DWORD_ dwYCountChars;
323     DWORD_ dwFillAttribute;
324     DWORD_ dwFlags;
325     WORD_ wShowWindow;
326     WORD_ cbReserved2;
327     LPBYTE_ lpReserved2;
328     HANDLE_ hStdInput;
329     HANDLE_ hStdOutput;
330     HANDLE_ hStdError;
331 } STARTUPINFOW_, *LPSTARTUPINFOW_;
332 
333 #endif // BOOST_WINAPI_PARTITION_APP_SYSTEM
334 
335 #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
336 
337 #if BOOST_WINAPI_PARTITION_DESKTOP_SYSTEM
338 typedef struct _PROC_THREAD_ATTRIBUTE_LIST PROC_THREAD_ATTRIBUTE_LIST_, *PPROC_THREAD_ATTRIBUTE_LIST_;
339 #endif // BOOST_WINAPI_PARTITION_DESKTOP_SYSTEM
340 
341 #if BOOST_WINAPI_PARTITION_DESKTOP
342 
343 #if !defined(BOOST_NO_ANSI_APIS)
344 typedef struct BOOST_MAY_ALIAS _STARTUPINFOEXA {
345     STARTUPINFOA_ StartupInfo;
346     PPROC_THREAD_ATTRIBUTE_LIST_ lpAttributeList;
347 } STARTUPINFOEXA_, *LPSTARTUPINFOEXA_;
348 #endif // !defined(BOOST_NO_ANSI_APIS)
349 
350 typedef struct BOOST_MAY_ALIAS _STARTUPINFOEXW {
351     STARTUPINFOW_ StartupInfo;
352     PPROC_THREAD_ATTRIBUTE_LIST_ lpAttributeList;
353 } STARTUPINFOEXW_, *LPSTARTUPINFOEXW_;
354 
355 #endif // BOOST_WINAPI_PARTITION_DESKTOP
356 
357 #endif // BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
358 
359 #if BOOST_WINAPI_PARTITION_APP_SYSTEM
360 
361 using ::TerminateProcess;
362 using ::OpenProcess;
363 
364 #endif // BOOST_WINAPI_PARTITION_APP_SYSTEM
365 
366 #if BOOST_WINAPI_PARTITION_DESKTOP_SYSTEM
367 
368 using ::GetExitCodeProcess;
369 using ::ExitProcess;
370 
371 #if !defined( BOOST_NO_ANSI_APIS )
CreateProcessA(LPCSTR_ lpApplicationName,LPSTR_ lpCommandLine,LPSECURITY_ATTRIBUTES_ lpProcessAttributes,LPSECURITY_ATTRIBUTES_ lpThreadAttributes,INT_ bInheritHandles,DWORD_ dwCreationFlags,LPVOID_ lpEnvironment,LPCSTR_ lpCurrentDirectory,LPSTARTUPINFOA_ lpStartupInfo,LPPROCESS_INFORMATION_ lpProcessInformation)372 BOOST_FORCEINLINE BOOL_ CreateProcessA(
373     LPCSTR_ lpApplicationName,
374     LPSTR_ lpCommandLine,
375     LPSECURITY_ATTRIBUTES_ lpProcessAttributes,
376     LPSECURITY_ATTRIBUTES_ lpThreadAttributes,
377     INT_ bInheritHandles,
378     DWORD_ dwCreationFlags,
379     LPVOID_ lpEnvironment,
380     LPCSTR_ lpCurrentDirectory,
381     LPSTARTUPINFOA_ lpStartupInfo,
382     LPPROCESS_INFORMATION_ lpProcessInformation)
383 {
384     return ::CreateProcessA(
385         lpApplicationName,
386         lpCommandLine,
387         reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpProcessAttributes),
388         reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpThreadAttributes),
389         bInheritHandles,
390         dwCreationFlags,
391         lpEnvironment,
392         lpCurrentDirectory,
393         reinterpret_cast< ::_STARTUPINFOA* >(lpStartupInfo),
394         reinterpret_cast< ::_PROCESS_INFORMATION* >(lpProcessInformation));
395 }
396 
create_process(LPCSTR_ lpApplicationName,LPSTR_ lpCommandLine,LPSECURITY_ATTRIBUTES_ lpProcessAttributes,LPSECURITY_ATTRIBUTES_ lpThreadAttributes,INT_ bInheritHandles,DWORD_ dwCreationFlags,LPVOID_ lpEnvironment,LPCSTR_ lpCurrentDirectory,LPSTARTUPINFOA_ lpStartupInfo,LPPROCESS_INFORMATION_ lpProcessInformation)397 BOOST_FORCEINLINE BOOL_ create_process(
398     LPCSTR_ lpApplicationName,
399     LPSTR_ lpCommandLine,
400     LPSECURITY_ATTRIBUTES_ lpProcessAttributes,
401     LPSECURITY_ATTRIBUTES_ lpThreadAttributes,
402     INT_ bInheritHandles,
403     DWORD_ dwCreationFlags,
404     LPVOID_ lpEnvironment,
405     LPCSTR_ lpCurrentDirectory,
406     LPSTARTUPINFOA_ lpStartupInfo,
407     LPPROCESS_INFORMATION_ lpProcessInformation)
408 {
409     return ::CreateProcessA(
410         lpApplicationName,
411         lpCommandLine,
412         reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpProcessAttributes),
413         reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpThreadAttributes),
414         bInheritHandles,
415         dwCreationFlags,
416         lpEnvironment,
417         lpCurrentDirectory,
418         reinterpret_cast< ::_STARTUPINFOA* >(lpStartupInfo),
419         reinterpret_cast< ::_PROCESS_INFORMATION* >(lpProcessInformation));
420 }
421 #endif
422 
CreateProcessW(LPCWSTR_ lpApplicationName,LPWSTR_ lpCommandLine,LPSECURITY_ATTRIBUTES_ lpProcessAttributes,LPSECURITY_ATTRIBUTES_ lpThreadAttributes,INT_ bInheritHandles,DWORD_ dwCreationFlags,LPVOID_ lpEnvironment,LPCWSTR_ lpCurrentDirectory,LPSTARTUPINFOW_ lpStartupInfo,LPPROCESS_INFORMATION_ lpProcessInformation)423 BOOST_FORCEINLINE BOOL_ CreateProcessW(
424     LPCWSTR_ lpApplicationName,
425     LPWSTR_ lpCommandLine,
426     LPSECURITY_ATTRIBUTES_ lpProcessAttributes,
427     LPSECURITY_ATTRIBUTES_ lpThreadAttributes,
428     INT_ bInheritHandles,
429     DWORD_ dwCreationFlags,
430     LPVOID_ lpEnvironment,
431     LPCWSTR_ lpCurrentDirectory,
432     LPSTARTUPINFOW_ lpStartupInfo,
433     LPPROCESS_INFORMATION_ lpProcessInformation)
434 {
435     return ::CreateProcessW(
436         lpApplicationName,
437         lpCommandLine,
438         reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpProcessAttributes),
439         reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpThreadAttributes),
440         bInheritHandles,
441         dwCreationFlags,
442         lpEnvironment,
443         lpCurrentDirectory,
444         reinterpret_cast< ::_STARTUPINFOW* >(lpStartupInfo),
445         reinterpret_cast< ::_PROCESS_INFORMATION* >(lpProcessInformation));
446 }
447 
create_process(LPCWSTR_ lpApplicationName,LPWSTR_ lpCommandLine,LPSECURITY_ATTRIBUTES_ lpProcessAttributes,LPSECURITY_ATTRIBUTES_ lpThreadAttributes,INT_ bInheritHandles,DWORD_ dwCreationFlags,LPVOID_ lpEnvironment,LPCWSTR_ lpCurrentDirectory,LPSTARTUPINFOW_ lpStartupInfo,LPPROCESS_INFORMATION_ lpProcessInformation)448 BOOST_FORCEINLINE BOOL_ create_process(
449     LPCWSTR_ lpApplicationName,
450     LPWSTR_ lpCommandLine,
451     LPSECURITY_ATTRIBUTES_ lpProcessAttributes,
452     LPSECURITY_ATTRIBUTES_ lpThreadAttributes,
453     INT_ bInheritHandles,
454     DWORD_ dwCreationFlags,
455     LPVOID_ lpEnvironment,
456     LPCWSTR_ lpCurrentDirectory,
457     LPSTARTUPINFOW_ lpStartupInfo,
458     LPPROCESS_INFORMATION_ lpProcessInformation)
459 {
460     return ::CreateProcessW(
461         lpApplicationName,
462         lpCommandLine,
463         reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpProcessAttributes),
464         reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpThreadAttributes),
465         bInheritHandles,
466         dwCreationFlags,
467         lpEnvironment,
468         lpCurrentDirectory,
469         reinterpret_cast< ::_STARTUPINFOW* >(lpStartupInfo),
470         reinterpret_cast< ::_PROCESS_INFORMATION* >(lpProcessInformation));
471 }
472 
473 #endif // BOOST_WINAPI_PARTITION_DESKTOP_SYSTEM
474 
475 }
476 }
477 
478 #endif // BOOST_WINAPI_PROCESS_HPP_INCLUDED_
479