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