xref: /reactos/sdk/include/ucrt/process.h (revision 04e0dc4a)
1*04e0dc4aSTimo Kreuzer //
2*04e0dc4aSTimo Kreuzer // process.h
3*04e0dc4aSTimo Kreuzer //
4*04e0dc4aSTimo Kreuzer //      Copyright (c) Microsoft Corporation. All rights reserved.
5*04e0dc4aSTimo Kreuzer //
6*04e0dc4aSTimo Kreuzer // This file declares the process control functionality (e.g., the exec and
7*04e0dc4aSTimo Kreuzer // spawn families of functions).
8*04e0dc4aSTimo Kreuzer //
9*04e0dc4aSTimo Kreuzer #pragma once
10*04e0dc4aSTimo Kreuzer #ifndef _INC_PROCESS // include guard for 3rd party interop
11*04e0dc4aSTimo Kreuzer #define _INC_PROCESS
12*04e0dc4aSTimo Kreuzer 
13*04e0dc4aSTimo Kreuzer #include <corecrt.h>
14*04e0dc4aSTimo Kreuzer #include <corecrt_startup.h>
15*04e0dc4aSTimo Kreuzer #include <corecrt_wprocess.h>
16*04e0dc4aSTimo Kreuzer 
17*04e0dc4aSTimo Kreuzer #pragma warning(push)
18*04e0dc4aSTimo Kreuzer #pragma warning(disable: _UCRT_DISABLED_WARNINGS)
19*04e0dc4aSTimo Kreuzer _UCRT_DISABLE_CLANG_WARNINGS
20*04e0dc4aSTimo Kreuzer 
21*04e0dc4aSTimo Kreuzer _CRT_BEGIN_C_HEADER
22*04e0dc4aSTimo Kreuzer 
23*04e0dc4aSTimo Kreuzer 
24*04e0dc4aSTimo Kreuzer 
25*04e0dc4aSTimo Kreuzer // Flag values for the _spawn family of functions
26*04e0dc4aSTimo Kreuzer #define _P_WAIT         0
27*04e0dc4aSTimo Kreuzer #define _P_NOWAIT       1
28*04e0dc4aSTimo Kreuzer #define _OLD_P_OVERLAY  2
29*04e0dc4aSTimo Kreuzer #define _P_NOWAITO      3
30*04e0dc4aSTimo Kreuzer #define _P_DETACH       4
31*04e0dc4aSTimo Kreuzer #define _P_OVERLAY      2
32*04e0dc4aSTimo Kreuzer 
33*04e0dc4aSTimo Kreuzer // Action codes for _cwait(). The action code argument to _cwait() is ignored on
34*04e0dc4aSTimo Kreuzer // Win32.  The parameter only exists so that we do not break existing code.
35*04e0dc4aSTimo Kreuzer #define _WAIT_CHILD      0
36*04e0dc4aSTimo Kreuzer #define _WAIT_GRANDCHILD 1
37*04e0dc4aSTimo Kreuzer 
38*04e0dc4aSTimo Kreuzer 
39*04e0dc4aSTimo Kreuzer 
40*04e0dc4aSTimo Kreuzer #if _CRT_FUNCTIONS_REQUIRED
41*04e0dc4aSTimo Kreuzer 
42*04e0dc4aSTimo Kreuzer     _ACRTIMP __declspec(noreturn) void __cdecl exit(_In_ int _Code);
43*04e0dc4aSTimo Kreuzer     _ACRTIMP __declspec(noreturn) void __cdecl _exit(_In_ int _Code);
44*04e0dc4aSTimo Kreuzer     _ACRTIMP __declspec(noreturn) void __cdecl _Exit(_In_ int _Code);
45*04e0dc4aSTimo Kreuzer     _ACRTIMP __declspec(noreturn) void __cdecl quick_exit(_In_ int _Code);
46*04e0dc4aSTimo Kreuzer     _ACRTIMP __declspec(noreturn) void __cdecl abort(void);
47*04e0dc4aSTimo Kreuzer 
48*04e0dc4aSTimo Kreuzer     _DCRTIMP int __cdecl system(_In_opt_z_ char const* _Command);
49*04e0dc4aSTimo Kreuzer 
50*04e0dc4aSTimo Kreuzer     _ACRTIMP void __cdecl _cexit(void);
51*04e0dc4aSTimo Kreuzer     _ACRTIMP void __cdecl _c_exit(void);
52*04e0dc4aSTimo Kreuzer 
53*04e0dc4aSTimo Kreuzer     typedef void (__stdcall *_tls_callback_type)(void *, unsigned long, void *);
54*04e0dc4aSTimo Kreuzer     _ACRTIMP void __cdecl _register_thread_local_exe_atexit_callback(_In_ _tls_callback_type _Callback);
55*04e0dc4aSTimo Kreuzer 
56*04e0dc4aSTimo Kreuzer #endif // _CRT_FUNCTIONS_REQUIRED
57*04e0dc4aSTimo Kreuzer 
58*04e0dc4aSTimo Kreuzer // Declare DLL notification (initialization/termination) routines.  The preferred
59*04e0dc4aSTimo Kreuzer // method is for the CRT client to define DllMain(), which will automatically be
60*04e0dc4aSTimo Kreuzer // called by the DLL entry point defined by the CRT.  If the CRT client wants to
61*04e0dc4aSTimo Kreuzer // define the DLL entry point, the client entry point must call _CRT_INIT on all
62*04e0dc4aSTimo Kreuzer // types of notifications, as the very first thing on attach notifications and as
63*04e0dc4aSTimo Kreuzer // the very last thing on detach notifications.
64*04e0dc4aSTimo Kreuzer #ifdef _DECL_DLLMAIN
65*04e0dc4aSTimo Kreuzer 
66*04e0dc4aSTimo Kreuzer     int __stdcall DllMain(
67*04e0dc4aSTimo Kreuzer         _In_     void*         _DllHandle,
68*04e0dc4aSTimo Kreuzer         _In_     unsigned long _Reason,
69*04e0dc4aSTimo Kreuzer         _In_opt_ void*         _Reserved
70*04e0dc4aSTimo Kreuzer         );
71*04e0dc4aSTimo Kreuzer 
72*04e0dc4aSTimo Kreuzer     int __stdcall _CRT_INIT(
73*04e0dc4aSTimo Kreuzer         _In_     void*         _DllHandle,
74*04e0dc4aSTimo Kreuzer         _In_     unsigned long _Reason,
75*04e0dc4aSTimo Kreuzer         _In_opt_ void*         _Reserved
76*04e0dc4aSTimo Kreuzer         );
77*04e0dc4aSTimo Kreuzer 
78*04e0dc4aSTimo Kreuzer     extern int (__stdcall* const _pRawDllMain)(void*, unsigned long, void*);
79*04e0dc4aSTimo Kreuzer 
80*04e0dc4aSTimo Kreuzer #endif
81*04e0dc4aSTimo Kreuzer 
82*04e0dc4aSTimo Kreuzer 
83*04e0dc4aSTimo Kreuzer 
84*04e0dc4aSTimo Kreuzer typedef void     (__cdecl*   _beginthread_proc_type  )(void*);
85*04e0dc4aSTimo Kreuzer typedef unsigned (__stdcall* _beginthreadex_proc_type)(void*);
86*04e0dc4aSTimo Kreuzer 
87*04e0dc4aSTimo Kreuzer _ACRTIMP uintptr_t __cdecl _beginthread(
88*04e0dc4aSTimo Kreuzer     _In_     _beginthread_proc_type _StartAddress,
89*04e0dc4aSTimo Kreuzer     _In_     unsigned               _StackSize,
90*04e0dc4aSTimo Kreuzer     _In_opt_ void*                  _ArgList
91*04e0dc4aSTimo Kreuzer     );
92*04e0dc4aSTimo Kreuzer 
93*04e0dc4aSTimo Kreuzer _ACRTIMP void __cdecl _endthread(void);
94*04e0dc4aSTimo Kreuzer 
95*04e0dc4aSTimo Kreuzer _Success_(return != 0)
96*04e0dc4aSTimo Kreuzer _ACRTIMP uintptr_t __cdecl _beginthreadex(
97*04e0dc4aSTimo Kreuzer     _In_opt_  void*                    _Security,
98*04e0dc4aSTimo Kreuzer     _In_      unsigned                 _StackSize,
99*04e0dc4aSTimo Kreuzer     _In_      _beginthreadex_proc_type _StartAddress,
100*04e0dc4aSTimo Kreuzer     _In_opt_  void*                    _ArgList,
101*04e0dc4aSTimo Kreuzer     _In_      unsigned                 _InitFlag,
102*04e0dc4aSTimo Kreuzer     _Out_opt_ unsigned*                _ThrdAddr
103*04e0dc4aSTimo Kreuzer     );
104*04e0dc4aSTimo Kreuzer 
105*04e0dc4aSTimo Kreuzer _ACRTIMP void __cdecl _endthreadex(
106*04e0dc4aSTimo Kreuzer     _In_ unsigned _ReturnCode
107*04e0dc4aSTimo Kreuzer     );
108*04e0dc4aSTimo Kreuzer 
109*04e0dc4aSTimo Kreuzer 
110*04e0dc4aSTimo Kreuzer 
111*04e0dc4aSTimo Kreuzer #ifdef _CRT_USE_WINAPI_FAMILY_DESKTOP_APP
112*04e0dc4aSTimo Kreuzer 
113*04e0dc4aSTimo Kreuzer     _ACRTIMP int __cdecl _getpid(void);
114*04e0dc4aSTimo Kreuzer 
115*04e0dc4aSTimo Kreuzer     _DCRTIMP intptr_t __cdecl _cwait(
116*04e0dc4aSTimo Kreuzer         _Out_opt_ int*     _TermStat,
117*04e0dc4aSTimo Kreuzer         _In_      intptr_t _ProcHandle,
118*04e0dc4aSTimo Kreuzer         _In_      int      _Action
119*04e0dc4aSTimo Kreuzer         );
120*04e0dc4aSTimo Kreuzer 
121*04e0dc4aSTimo Kreuzer     _DCRTIMP intptr_t __cdecl _execl(
122*04e0dc4aSTimo Kreuzer         _In_z_ char const* _FileName,
123*04e0dc4aSTimo Kreuzer         _In_z_ char const* _Arguments,
124*04e0dc4aSTimo Kreuzer         ...);
125*04e0dc4aSTimo Kreuzer 
126*04e0dc4aSTimo Kreuzer     _DCRTIMP intptr_t __cdecl _execle(
127*04e0dc4aSTimo Kreuzer         _In_z_ char const* _FileName,
128*04e0dc4aSTimo Kreuzer         _In_z_ char const* _Arguments,
129*04e0dc4aSTimo Kreuzer         ...);
130*04e0dc4aSTimo Kreuzer 
131*04e0dc4aSTimo Kreuzer     _DCRTIMP intptr_t __cdecl _execlp(
132*04e0dc4aSTimo Kreuzer         _In_z_ char const* _FileName,
133*04e0dc4aSTimo Kreuzer         _In_z_ char const* _Arguments,
134*04e0dc4aSTimo Kreuzer         ...);
135*04e0dc4aSTimo Kreuzer 
136*04e0dc4aSTimo Kreuzer     _DCRTIMP intptr_t __cdecl _execlpe(
137*04e0dc4aSTimo Kreuzer         _In_z_ char const* _FileName,
138*04e0dc4aSTimo Kreuzer         _In_z_ char const* _Arguments,
139*04e0dc4aSTimo Kreuzer         ...);
140*04e0dc4aSTimo Kreuzer 
141*04e0dc4aSTimo Kreuzer     _DCRTIMP intptr_t __cdecl _execv(
142*04e0dc4aSTimo Kreuzer         _In_z_ char const*        _FileName,
143*04e0dc4aSTimo Kreuzer         _In_z_ char const* const* _Arguments
144*04e0dc4aSTimo Kreuzer         );
145*04e0dc4aSTimo Kreuzer 
146*04e0dc4aSTimo Kreuzer     _DCRTIMP intptr_t __cdecl _execve(
147*04e0dc4aSTimo Kreuzer         _In_z_     char const*        _FileName,
148*04e0dc4aSTimo Kreuzer         _In_z_     char const* const* _Arguments,
149*04e0dc4aSTimo Kreuzer         _In_opt_z_ char const* const* _Environment
150*04e0dc4aSTimo Kreuzer         );
151*04e0dc4aSTimo Kreuzer 
152*04e0dc4aSTimo Kreuzer     _DCRTIMP intptr_t __cdecl _execvp(
153*04e0dc4aSTimo Kreuzer         _In_z_ char const*        _FileName,
154*04e0dc4aSTimo Kreuzer         _In_z_ char const* const* _Arguments
155*04e0dc4aSTimo Kreuzer         );
156*04e0dc4aSTimo Kreuzer 
157*04e0dc4aSTimo Kreuzer     _DCRTIMP intptr_t __cdecl _execvpe(
158*04e0dc4aSTimo Kreuzer         _In_z_     char const*        _FileName,
159*04e0dc4aSTimo Kreuzer         _In_z_     char const* const* _Arguments,
160*04e0dc4aSTimo Kreuzer         _In_opt_z_ char const* const* _Environment
161*04e0dc4aSTimo Kreuzer         );
162*04e0dc4aSTimo Kreuzer 
163*04e0dc4aSTimo Kreuzer     _DCRTIMP intptr_t __cdecl _spawnl(
164*04e0dc4aSTimo Kreuzer         _In_   int         _Mode,
165*04e0dc4aSTimo Kreuzer         _In_z_ char const* _FileName,
166*04e0dc4aSTimo Kreuzer         _In_z_ char const* _Arguments,
167*04e0dc4aSTimo Kreuzer         ...);
168*04e0dc4aSTimo Kreuzer 
169*04e0dc4aSTimo Kreuzer     _DCRTIMP intptr_t __cdecl _spawnle(
170*04e0dc4aSTimo Kreuzer         _In_   int         _Mode,
171*04e0dc4aSTimo Kreuzer         _In_z_ char const* _FileName,
172*04e0dc4aSTimo Kreuzer         _In_z_ char const* _Arguments,
173*04e0dc4aSTimo Kreuzer         ...);
174*04e0dc4aSTimo Kreuzer 
175*04e0dc4aSTimo Kreuzer     _DCRTIMP intptr_t __cdecl _spawnlp(
176*04e0dc4aSTimo Kreuzer         _In_   int         _Mode,
177*04e0dc4aSTimo Kreuzer         _In_z_ char const* _FileName,
178*04e0dc4aSTimo Kreuzer         _In_z_ char const* _Arguments,
179*04e0dc4aSTimo Kreuzer         ...);
180*04e0dc4aSTimo Kreuzer 
181*04e0dc4aSTimo Kreuzer     _DCRTIMP intptr_t __cdecl _spawnlpe(
182*04e0dc4aSTimo Kreuzer         _In_   int         _Mode,
183*04e0dc4aSTimo Kreuzer         _In_z_ char const* _FileName,
184*04e0dc4aSTimo Kreuzer         _In_z_ char const* _Arguments,
185*04e0dc4aSTimo Kreuzer         ...);
186*04e0dc4aSTimo Kreuzer 
187*04e0dc4aSTimo Kreuzer     _DCRTIMP intptr_t __cdecl _spawnv(
188*04e0dc4aSTimo Kreuzer         _In_   int                _Mode,
189*04e0dc4aSTimo Kreuzer         _In_z_ char const*        _FileName,
190*04e0dc4aSTimo Kreuzer         _In_z_ char const* const* _Arguments
191*04e0dc4aSTimo Kreuzer         );
192*04e0dc4aSTimo Kreuzer 
193*04e0dc4aSTimo Kreuzer     _DCRTIMP intptr_t __cdecl _spawnve(
194*04e0dc4aSTimo Kreuzer         _In_       int                _Mode,
195*04e0dc4aSTimo Kreuzer         _In_z_     char const*        _FileName,
196*04e0dc4aSTimo Kreuzer         _In_z_     char const* const* _Arguments,
197*04e0dc4aSTimo Kreuzer         _In_opt_z_ char const* const* _Environment
198*04e0dc4aSTimo Kreuzer         );
199*04e0dc4aSTimo Kreuzer 
200*04e0dc4aSTimo Kreuzer     _DCRTIMP intptr_t __cdecl _spawnvp(
201*04e0dc4aSTimo Kreuzer         _In_   int                _Mode,
202*04e0dc4aSTimo Kreuzer         _In_z_ char const*        _FileName,
203*04e0dc4aSTimo Kreuzer         _In_z_ char const* const* _Arguments
204*04e0dc4aSTimo Kreuzer         );
205*04e0dc4aSTimo Kreuzer 
206*04e0dc4aSTimo Kreuzer     _DCRTIMP intptr_t __cdecl _spawnvpe(
207*04e0dc4aSTimo Kreuzer         _In_       int                _Mode,
208*04e0dc4aSTimo Kreuzer         _In_z_     char const*        _FileName,
209*04e0dc4aSTimo Kreuzer         _In_z_     char const* const* _Arguments,
210*04e0dc4aSTimo Kreuzer         _In_opt_z_ char const* const* _Environment
211*04e0dc4aSTimo Kreuzer         );
212*04e0dc4aSTimo Kreuzer 
213*04e0dc4aSTimo Kreuzer     _CRT_OBSOLETE(LoadLibrary)
214*04e0dc4aSTimo Kreuzer     _DCRTIMP intptr_t __cdecl _loaddll(
215*04e0dc4aSTimo Kreuzer         _In_z_ char* _FileName
216*04e0dc4aSTimo Kreuzer         );
217*04e0dc4aSTimo Kreuzer 
218*04e0dc4aSTimo Kreuzer     _CRT_OBSOLETE(FreeLibrary)
219*04e0dc4aSTimo Kreuzer     _DCRTIMP int __cdecl _unloaddll(
220*04e0dc4aSTimo Kreuzer         _In_ intptr_t _Handle
221*04e0dc4aSTimo Kreuzer         );
222*04e0dc4aSTimo Kreuzer 
223*04e0dc4aSTimo Kreuzer     typedef int (__cdecl* _GetDllProcAddrProcType)(void);
224*04e0dc4aSTimo Kreuzer 
225*04e0dc4aSTimo Kreuzer     _CRT_OBSOLETE(GetProcAddress)
226*04e0dc4aSTimo Kreuzer     _DCRTIMP _GetDllProcAddrProcType __cdecl _getdllprocaddr(
227*04e0dc4aSTimo Kreuzer         _In_       intptr_t _Handle,
228*04e0dc4aSTimo Kreuzer         _In_opt_z_ char*    _ProcedureName,
229*04e0dc4aSTimo Kreuzer         _In_       intptr_t _Ordinal
230*04e0dc4aSTimo Kreuzer         );
231*04e0dc4aSTimo Kreuzer 
232*04e0dc4aSTimo Kreuzer #endif // _CRT_USE_WINAPI_FAMILY_DESKTOP_APP
233*04e0dc4aSTimo Kreuzer 
234*04e0dc4aSTimo Kreuzer 
235*04e0dc4aSTimo Kreuzer 
236*04e0dc4aSTimo Kreuzer #if defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES
237*04e0dc4aSTimo Kreuzer 
238*04e0dc4aSTimo Kreuzer     #define P_WAIT          _P_WAIT
239*04e0dc4aSTimo Kreuzer     #define P_NOWAIT        _P_NOWAIT
240*04e0dc4aSTimo Kreuzer     #define P_OVERLAY       _P_OVERLAY
241*04e0dc4aSTimo Kreuzer     #define OLD_P_OVERLAY   _OLD_P_OVERLAY
242*04e0dc4aSTimo Kreuzer     #define P_NOWAITO       _P_NOWAITO
243*04e0dc4aSTimo Kreuzer     #define P_DETACH        _P_DETACH
244*04e0dc4aSTimo Kreuzer     #define WAIT_CHILD      _WAIT_CHILD
245*04e0dc4aSTimo Kreuzer     #define WAIT_GRANDCHILD _WAIT_GRANDCHILD
246*04e0dc4aSTimo Kreuzer 
247*04e0dc4aSTimo Kreuzer     #ifdef _CRT_USE_WINAPI_FAMILY_DESKTOP_APP
248*04e0dc4aSTimo Kreuzer 
249*04e0dc4aSTimo Kreuzer         _CRT_NONSTDC_DEPRECATE(_cwait)
250*04e0dc4aSTimo Kreuzer         _DCRTIMP intptr_t __cdecl cwait(
251*04e0dc4aSTimo Kreuzer             _Out_opt_ int*     _TermStat,
252*04e0dc4aSTimo Kreuzer             _In_      intptr_t _ProcHandle,
253*04e0dc4aSTimo Kreuzer             _In_      int      _Action
254*04e0dc4aSTimo Kreuzer             );
255*04e0dc4aSTimo Kreuzer 
256*04e0dc4aSTimo Kreuzer         _CRT_NONSTDC_DEPRECATE(_execl)
257*04e0dc4aSTimo Kreuzer         _DCRTIMP intptr_t __cdecl execl(
258*04e0dc4aSTimo Kreuzer             _In_z_ char const* _FileName,
259*04e0dc4aSTimo Kreuzer             _In_z_ char const* _Arguments,
260*04e0dc4aSTimo Kreuzer             ...);
261*04e0dc4aSTimo Kreuzer 
262*04e0dc4aSTimo Kreuzer         _CRT_NONSTDC_DEPRECATE(_execle)
263*04e0dc4aSTimo Kreuzer         _DCRTIMP intptr_t __cdecl execle(
264*04e0dc4aSTimo Kreuzer             _In_z_ char const* _FileName,
265*04e0dc4aSTimo Kreuzer             _In_z_ char const* _Arguments,
266*04e0dc4aSTimo Kreuzer             ...);
267*04e0dc4aSTimo Kreuzer 
268*04e0dc4aSTimo Kreuzer         _CRT_NONSTDC_DEPRECATE(_execlp)
269*04e0dc4aSTimo Kreuzer         _DCRTIMP intptr_t __cdecl execlp(
270*04e0dc4aSTimo Kreuzer             _In_z_ char const* _FileName,
271*04e0dc4aSTimo Kreuzer             _In_z_ char const* _Arguments,
272*04e0dc4aSTimo Kreuzer             ...);
273*04e0dc4aSTimo Kreuzer 
274*04e0dc4aSTimo Kreuzer         _CRT_NONSTDC_DEPRECATE(_execlpe)
275*04e0dc4aSTimo Kreuzer         _DCRTIMP intptr_t __cdecl execlpe(
276*04e0dc4aSTimo Kreuzer             _In_z_ char const* _FileName,
277*04e0dc4aSTimo Kreuzer             _In_z_ char const* _Arguments,
278*04e0dc4aSTimo Kreuzer             ...);
279*04e0dc4aSTimo Kreuzer 
280*04e0dc4aSTimo Kreuzer         _CRT_NONSTDC_DEPRECATE(_execv)
281*04e0dc4aSTimo Kreuzer         _DCRTIMP intptr_t __cdecl execv(
282*04e0dc4aSTimo Kreuzer             _In_z_ char const*        _FileName,
283*04e0dc4aSTimo Kreuzer             _In_z_ char const* const* _Arguments
284*04e0dc4aSTimo Kreuzer             );
285*04e0dc4aSTimo Kreuzer 
286*04e0dc4aSTimo Kreuzer         _CRT_NONSTDC_DEPRECATE(_execve)
287*04e0dc4aSTimo Kreuzer         _DCRTIMP intptr_t __cdecl execve(
288*04e0dc4aSTimo Kreuzer             _In_z_     char const*        _FileName,
289*04e0dc4aSTimo Kreuzer             _In_z_     char const* const* _Arguments,
290*04e0dc4aSTimo Kreuzer             _In_opt_z_ char const* const* _Environment
291*04e0dc4aSTimo Kreuzer             );
292*04e0dc4aSTimo Kreuzer 
293*04e0dc4aSTimo Kreuzer         _CRT_NONSTDC_DEPRECATE(_execvp)
294*04e0dc4aSTimo Kreuzer         _DCRTIMP intptr_t __cdecl execvp(
295*04e0dc4aSTimo Kreuzer             _In_z_ char const*        _FileName,
296*04e0dc4aSTimo Kreuzer             _In_z_ char const* const* _Arguments
297*04e0dc4aSTimo Kreuzer             );
298*04e0dc4aSTimo Kreuzer 
299*04e0dc4aSTimo Kreuzer         _CRT_NONSTDC_DEPRECATE(_execvpe)
300*04e0dc4aSTimo Kreuzer         _DCRTIMP intptr_t __cdecl execvpe(
301*04e0dc4aSTimo Kreuzer             _In_z_     char const*        _FileName,
302*04e0dc4aSTimo Kreuzer             _In_z_     char const* const* _Arguments,
303*04e0dc4aSTimo Kreuzer             _In_opt_z_ char const* const* _Environment
304*04e0dc4aSTimo Kreuzer             );
305*04e0dc4aSTimo Kreuzer 
306*04e0dc4aSTimo Kreuzer         _CRT_NONSTDC_DEPRECATE(_spawnl)
307*04e0dc4aSTimo Kreuzer         _DCRTIMP intptr_t __cdecl spawnl(
308*04e0dc4aSTimo Kreuzer             _In_   int         _Mode,
309*04e0dc4aSTimo Kreuzer             _In_z_ char const* _FileName,
310*04e0dc4aSTimo Kreuzer             _In_z_ char const* _Arguments,
311*04e0dc4aSTimo Kreuzer             ...);
312*04e0dc4aSTimo Kreuzer 
313*04e0dc4aSTimo Kreuzer         _CRT_NONSTDC_DEPRECATE(_spawnle)
314*04e0dc4aSTimo Kreuzer         _DCRTIMP intptr_t __cdecl spawnle(
315*04e0dc4aSTimo Kreuzer             _In_   int         _Mode,
316*04e0dc4aSTimo Kreuzer             _In_z_ char const* _FileName,
317*04e0dc4aSTimo Kreuzer             _In_z_ char const* _Arguments,
318*04e0dc4aSTimo Kreuzer             ...);
319*04e0dc4aSTimo Kreuzer 
320*04e0dc4aSTimo Kreuzer         _CRT_NONSTDC_DEPRECATE(_spawnlp)
321*04e0dc4aSTimo Kreuzer         _DCRTIMP intptr_t __cdecl spawnlp(
322*04e0dc4aSTimo Kreuzer             _In_   int         _Mode,
323*04e0dc4aSTimo Kreuzer             _In_z_ char const* _FileName,
324*04e0dc4aSTimo Kreuzer             _In_z_ char const* _Arguments,
325*04e0dc4aSTimo Kreuzer             ...);
326*04e0dc4aSTimo Kreuzer 
327*04e0dc4aSTimo Kreuzer         _CRT_NONSTDC_DEPRECATE(_spawnlpe)
328*04e0dc4aSTimo Kreuzer         _DCRTIMP intptr_t __cdecl spawnlpe(
329*04e0dc4aSTimo Kreuzer             _In_   int         _Mode,
330*04e0dc4aSTimo Kreuzer             _In_z_ char const* _FileName,
331*04e0dc4aSTimo Kreuzer             _In_z_ char const* _Arguments,
332*04e0dc4aSTimo Kreuzer             ...);
333*04e0dc4aSTimo Kreuzer 
334*04e0dc4aSTimo Kreuzer         _CRT_NONSTDC_DEPRECATE(_spawnv)
335*04e0dc4aSTimo Kreuzer         _DCRTIMP intptr_t __cdecl spawnv(
336*04e0dc4aSTimo Kreuzer             _In_   int                _Mode,
337*04e0dc4aSTimo Kreuzer             _In_z_ char const*        _FileName,
338*04e0dc4aSTimo Kreuzer             _In_z_ char const* const* _Arguments);
339*04e0dc4aSTimo Kreuzer 
340*04e0dc4aSTimo Kreuzer         _CRT_NONSTDC_DEPRECATE(_spawnve)
341*04e0dc4aSTimo Kreuzer         _DCRTIMP intptr_t __cdecl spawnve(
342*04e0dc4aSTimo Kreuzer             _In_       int                _Mode,
343*04e0dc4aSTimo Kreuzer             _In_z_     char const*        _FileName,
344*04e0dc4aSTimo Kreuzer             _In_z_     char const* const* _Arguments,
345*04e0dc4aSTimo Kreuzer             _In_opt_z_ char const* const* _Environment
346*04e0dc4aSTimo Kreuzer             );
347*04e0dc4aSTimo Kreuzer 
348*04e0dc4aSTimo Kreuzer         _CRT_NONSTDC_DEPRECATE(_spawnvp)
349*04e0dc4aSTimo Kreuzer         _DCRTIMP intptr_t __cdecl spawnvp(
350*04e0dc4aSTimo Kreuzer             _In_   int                _Mode,
351*04e0dc4aSTimo Kreuzer             _In_z_ char const*        _FileName,
352*04e0dc4aSTimo Kreuzer             _In_z_ char const* const* _Arguments
353*04e0dc4aSTimo Kreuzer             );
354*04e0dc4aSTimo Kreuzer 
355*04e0dc4aSTimo Kreuzer         _CRT_NONSTDC_DEPRECATE(_spawnvpe)
356*04e0dc4aSTimo Kreuzer         _DCRTIMP intptr_t __cdecl spawnvpe(
357*04e0dc4aSTimo Kreuzer             _In_       int                _Mode,
358*04e0dc4aSTimo Kreuzer             _In_z_     char const*        _FileName,
359*04e0dc4aSTimo Kreuzer             _In_z_     char const* const* _Arguments,
360*04e0dc4aSTimo Kreuzer             _In_opt_z_ char const* const* _Environment
361*04e0dc4aSTimo Kreuzer             );
362*04e0dc4aSTimo Kreuzer 
363*04e0dc4aSTimo Kreuzer         _CRT_NONSTDC_DEPRECATE(_getpid)
364*04e0dc4aSTimo Kreuzer         _ACRTIMP int __cdecl getpid(void);
365*04e0dc4aSTimo Kreuzer 
366*04e0dc4aSTimo Kreuzer     #endif // _CRT_USE_WINAPI_FAMILY_DESKTOP_APP
367*04e0dc4aSTimo Kreuzer 
368*04e0dc4aSTimo Kreuzer #endif // _CRT_INTERNAL_NONSTDC_NAMES
369*04e0dc4aSTimo Kreuzer 
370*04e0dc4aSTimo Kreuzer 
371*04e0dc4aSTimo Kreuzer 
372*04e0dc4aSTimo Kreuzer _CRT_END_C_HEADER
373*04e0dc4aSTimo Kreuzer _UCRT_RESTORE_CLANG_WARNINGS
374*04e0dc4aSTimo Kreuzer #pragma warning(pop) // _UCRT_DISABLED_WARNINGS
375*04e0dc4aSTimo Kreuzer #endif // _INC_PROCESS
376