422 lines
15 KiB
C++
422 lines
15 KiB
C++
// process.hpp --------------------------------------------------------------//
|
|
|
|
// Copyright 2016 Klemens D. Morgenstern
|
|
// Copyright 2016 Andrey Semashev
|
|
|
|
// Distributed under the Boost Software License, Version 1.0.
|
|
// See http://www.boost.org/LICENSE_1_0.txt
|
|
|
|
#ifndef BOOST_DETAIL_WINAPI_PROCESS_HPP_
|
|
#define BOOST_DETAIL_WINAPI_PROCESS_HPP_
|
|
|
|
#include <boost/detail/winapi/config.hpp>
|
|
#include <boost/detail/winapi/basic_types.hpp>
|
|
#include <boost/detail/winapi/access_rights.hpp>
|
|
#include <boost/detail/winapi/get_current_process.hpp>
|
|
#include <boost/detail/winapi/get_current_process_id.hpp>
|
|
#include <boost/predef/platform.h>
|
|
|
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
|
#pragma once
|
|
#endif
|
|
|
|
#if BOOST_PLAT_WINDOWS_DESKTOP
|
|
|
|
#if !defined( BOOST_USE_WINDOWS_H )
|
|
extern "C" {
|
|
|
|
struct _PROCESS_INFORMATION;
|
|
#if !defined( BOOST_NO_ANSI_APIS )
|
|
struct _STARTUPINFOA;
|
|
#endif
|
|
struct _STARTUPINFOW;
|
|
|
|
#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
|
|
struct _PROC_THREAD_ATTRIBUTE_LIST;
|
|
#if !defined( BOOST_NO_ANSI_APIS )
|
|
struct _STARTUPINFOEXA;
|
|
#endif
|
|
struct _STARTUPINFOEXW;
|
|
#endif
|
|
|
|
BOOST_SYMBOL_IMPORT BOOST_NORETURN boost::detail::winapi::VOID_ WINAPI
|
|
ExitProcess(boost::detail::winapi::UINT_ uExitCode);
|
|
|
|
BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI TerminateProcess(
|
|
boost::detail::winapi::HANDLE_ hProcess,
|
|
boost::detail::winapi::UINT_ uExitCode);
|
|
|
|
BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI GetExitCodeProcess(
|
|
boost::detail::winapi::HANDLE_ hProcess,
|
|
boost::detail::winapi::LPDWORD_ lpExitCode);
|
|
|
|
#if !defined( BOOST_NO_ANSI_APIS )
|
|
BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI CreateProcessA(
|
|
boost::detail::winapi::LPCSTR_ lpApplicationName,
|
|
boost::detail::winapi::LPSTR_ lpCommandLine,
|
|
::_SECURITY_ATTRIBUTES* lpProcessAttributes,
|
|
::_SECURITY_ATTRIBUTES* lpThreadAttributes,
|
|
boost::detail::winapi::INT_ bInheritHandles,
|
|
boost::detail::winapi::DWORD_ dwCreationFlags,
|
|
boost::detail::winapi::LPVOID_ lpEnvironment,
|
|
boost::detail::winapi::LPCSTR_ lpCurrentDirectory,
|
|
::_STARTUPINFOA* lpStartupInfo,
|
|
::_PROCESS_INFORMATION* lpProcessInformation);
|
|
#endif
|
|
|
|
BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI CreateProcessW(
|
|
boost::detail::winapi::LPCWSTR_ lpApplicationName,
|
|
boost::detail::winapi::LPWSTR_ lpCommandLine,
|
|
::_SECURITY_ATTRIBUTES* lpProcessAttributes,
|
|
::_SECURITY_ATTRIBUTES* lpThreadAttributes,
|
|
boost::detail::winapi::INT_ bInheritHandles,
|
|
boost::detail::winapi::DWORD_ dwCreationFlags,
|
|
boost::detail::winapi::LPVOID_ lpEnvironment,
|
|
boost::detail::winapi::LPCWSTR_ lpCurrentDirectory,
|
|
::_STARTUPINFOW* lpStartupInfo,
|
|
::_PROCESS_INFORMATION* lpProcessInformation);
|
|
|
|
BOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI OpenProcess(
|
|
boost::detail::winapi::DWORD_ dwDesiredAccess,
|
|
boost::detail::winapi::BOOL_ bInheritHandle,
|
|
boost::detail::winapi::DWORD_ dwProcessId);
|
|
|
|
} // extern "C"
|
|
#endif //defined BOOST_WINDOWS_H
|
|
|
|
namespace boost {
|
|
namespace detail {
|
|
namespace winapi {
|
|
|
|
#if defined( BOOST_USE_WINDOWS_H )
|
|
|
|
const DWORD_ DEBUG_PROCESS_ = DEBUG_PROCESS;
|
|
const DWORD_ DEBUG_ONLY_THIS_PROCESS_ = DEBUG_ONLY_THIS_PROCESS;
|
|
const DWORD_ CREATE_SUSPENDED_ = CREATE_SUSPENDED;
|
|
const DWORD_ DETACHED_PROCESS_ = DETACHED_PROCESS;
|
|
const DWORD_ CREATE_NEW_CONSOLE_ = CREATE_NEW_CONSOLE;
|
|
const DWORD_ CREATE_NEW_PROCESS_GROUP_ = CREATE_NEW_PROCESS_GROUP;
|
|
const DWORD_ CREATE_UNICODE_ENVIRONMENT_ = CREATE_UNICODE_ENVIRONMENT;
|
|
const DWORD_ CREATE_SEPARATE_WOW_VDM_ = CREATE_SEPARATE_WOW_VDM;
|
|
const DWORD_ CREATE_SHARED_WOW_VDM_ = CREATE_SHARED_WOW_VDM;
|
|
const DWORD_ CREATE_FORCEDOS_ = CREATE_FORCEDOS;
|
|
const DWORD_ CREATE_BREAKAWAY_FROM_JOB_ = CREATE_BREAKAWAY_FROM_JOB;
|
|
const DWORD_ CREATE_DEFAULT_ERROR_MODE_ = CREATE_DEFAULT_ERROR_MODE;
|
|
const DWORD_ CREATE_NO_WINDOW_ = CREATE_NO_WINDOW;
|
|
|
|
// Undocumented
|
|
const DWORD_ PROFILE_USER_ = PROFILE_USER;
|
|
const DWORD_ PROFILE_KERNEL_ = PROFILE_KERNEL;
|
|
const DWORD_ PROFILE_SERVER_ = PROFILE_SERVER;
|
|
|
|
#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
|
|
const DWORD_ CREATE_PROTECTED_PROCESS_ = CREATE_PROTECTED_PROCESS;
|
|
const DWORD_ EXTENDED_STARTUPINFO_PRESENT_ = EXTENDED_STARTUPINFO_PRESENT;
|
|
#endif
|
|
|
|
#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN7
|
|
const DWORD_ INHERIT_PARENT_AFFINITY_ = INHERIT_PARENT_AFFINITY;
|
|
#endif
|
|
|
|
// Only documented for Windows CE
|
|
#if defined(UNDER_CE)
|
|
const DWORD_ INHERIT_CALLER_PRIORITY_ = INHERIT_CALLER_PRIORITY;
|
|
#endif
|
|
|
|
const DWORD_ STARTF_USESHOWWINDOW_ = STARTF_USESHOWWINDOW;
|
|
const DWORD_ STARTF_USESIZE_ = STARTF_USESIZE;
|
|
const DWORD_ STARTF_USEPOSITION_ = STARTF_USEPOSITION;
|
|
const DWORD_ STARTF_USECOUNTCHARS_ = STARTF_USECOUNTCHARS;
|
|
const DWORD_ STARTF_USEFILLATTRIBUTE_ = STARTF_USEFILLATTRIBUTE;
|
|
const DWORD_ STARTF_RUNFULLSCREEN_ = STARTF_RUNFULLSCREEN;
|
|
const DWORD_ STARTF_FORCEONFEEDBACK_ = STARTF_FORCEONFEEDBACK;
|
|
const DWORD_ STARTF_FORCEOFFFEEDBACK_ = STARTF_FORCEOFFFEEDBACK;
|
|
const DWORD_ STARTF_USESTDHANDLES_ = STARTF_USESTDHANDLES;
|
|
const DWORD_ STARTF_USEHOTKEY_ = STARTF_USEHOTKEY;
|
|
|
|
#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN7
|
|
const DWORD_ STARTF_TITLEISLINKNAME_ = STARTF_TITLEISLINKNAME;
|
|
const DWORD_ STARTF_TITLEISAPPID_ = STARTF_TITLEISAPPID;
|
|
const DWORD_ STARTF_PREVENTPINNING_ = STARTF_PREVENTPINNING;
|
|
#endif
|
|
|
|
const DWORD_ PROCESS_TERMINATE_ = PROCESS_TERMINATE;
|
|
const DWORD_ PROCESS_CREATE_THREAD_ = PROCESS_CREATE_THREAD;
|
|
const DWORD_ PROCESS_SET_SESSIONID_ = PROCESS_SET_SESSIONID;
|
|
const DWORD_ PROCESS_VM_OPERATION_ = PROCESS_VM_OPERATION;
|
|
const DWORD_ PROCESS_VM_READ_ = PROCESS_VM_READ;
|
|
const DWORD_ PROCESS_VM_WRITE_ = PROCESS_VM_WRITE;
|
|
const DWORD_ PROCESS_DUP_HANDLE_ = PROCESS_DUP_HANDLE;
|
|
const DWORD_ PROCESS_CREATE_PROCESS_ = PROCESS_CREATE_PROCESS;
|
|
const DWORD_ PROCESS_SET_QUOTA_ = PROCESS_SET_QUOTA;
|
|
const DWORD_ PROCESS_SET_INFORMATION_ = PROCESS_SET_INFORMATION;
|
|
const DWORD_ PROCESS_QUERY_INFORMATION_ = PROCESS_QUERY_INFORMATION;
|
|
const DWORD_ PROCESS_SUSPEND_RESUME_ = PROCESS_SUSPEND_RESUME;
|
|
const DWORD_ PROCESS_ALL_ACCESS_ = PROCESS_ALL_ACCESS;
|
|
|
|
#else // defined( BOOST_USE_WINDOWS_H )
|
|
|
|
const DWORD_ DEBUG_PROCESS_ = 0x1;
|
|
const DWORD_ DEBUG_ONLY_THIS_PROCESS_ = 0x2;
|
|
const DWORD_ CREATE_SUSPENDED_ = 0x4;
|
|
const DWORD_ DETACHED_PROCESS_ = 0x8;
|
|
const DWORD_ CREATE_NEW_CONSOLE_ = 0x10;
|
|
const DWORD_ CREATE_NEW_PROCESS_GROUP_ = 0x200;
|
|
const DWORD_ CREATE_UNICODE_ENVIRONMENT_ = 0x400;
|
|
const DWORD_ CREATE_SEPARATE_WOW_VDM_ = 0x800;
|
|
const DWORD_ CREATE_SHARED_WOW_VDM_ = 0x1000;
|
|
const DWORD_ CREATE_FORCEDOS_ = 0x2000;
|
|
const DWORD_ CREATE_BREAKAWAY_FROM_JOB_ = 0x1000000;
|
|
const DWORD_ CREATE_DEFAULT_ERROR_MODE_ = 0x4000000;
|
|
const DWORD_ CREATE_NO_WINDOW_ = 0x8000000;
|
|
|
|
// Undocumented
|
|
const DWORD_ PROFILE_USER_ = 0x10000000;
|
|
const DWORD_ PROFILE_KERNEL_ = 0x20000000;
|
|
const DWORD_ PROFILE_SERVER_ = 0x40000000;
|
|
|
|
#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
|
|
const DWORD_ CREATE_PROTECTED_PROCESS_ = 0x40000;
|
|
const DWORD_ EXTENDED_STARTUPINFO_PRESENT_ = 0x80000;
|
|
#endif
|
|
|
|
#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN7
|
|
const DWORD_ INHERIT_PARENT_AFFINITY_ = 0x10000;
|
|
#endif
|
|
|
|
// Only documented for Windows CE
|
|
#if defined(UNDER_CE)
|
|
const DWORD_ INHERIT_CALLER_PRIORITY_ = 0x20000;
|
|
#endif
|
|
|
|
const DWORD_ STARTF_USESHOWWINDOW_ = 0x00000001;
|
|
const DWORD_ STARTF_USESIZE_ = 0x00000002;
|
|
const DWORD_ STARTF_USEPOSITION_ = 0x00000004;
|
|
const DWORD_ STARTF_USECOUNTCHARS_ = 0x00000008;
|
|
const DWORD_ STARTF_USEFILLATTRIBUTE_ = 0x00000010;
|
|
const DWORD_ STARTF_RUNFULLSCREEN_ = 0x00000020;
|
|
const DWORD_ STARTF_FORCEONFEEDBACK_ = 0x00000040;
|
|
const DWORD_ STARTF_FORCEOFFFEEDBACK_ = 0x00000080;
|
|
const DWORD_ STARTF_USESTDHANDLES_ = 0x00000100;
|
|
const DWORD_ STARTF_USEHOTKEY_ = 0x00000200;
|
|
|
|
#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN7
|
|
const DWORD_ STARTF_TITLEISLINKNAME_ = 0x00000800;
|
|
const DWORD_ STARTF_TITLEISAPPID_ = 0x00001000;
|
|
const DWORD_ STARTF_PREVENTPINNING_ = 0x00002000;
|
|
#endif
|
|
|
|
const DWORD_ PROCESS_TERMINATE_ = 0x0001;
|
|
const DWORD_ PROCESS_CREATE_THREAD_ = 0x0002;
|
|
const DWORD_ PROCESS_SET_SESSIONID_ = 0x0004;
|
|
const DWORD_ PROCESS_VM_OPERATION_ = 0x0008;
|
|
const DWORD_ PROCESS_VM_READ_ = 0x0010;
|
|
const DWORD_ PROCESS_VM_WRITE_ = 0x0020;
|
|
const DWORD_ PROCESS_DUP_HANDLE_ = 0x0040;
|
|
const DWORD_ PROCESS_CREATE_PROCESS_ = 0x0080;
|
|
const DWORD_ PROCESS_SET_QUOTA_ = 0x0100;
|
|
const DWORD_ PROCESS_SET_INFORMATION_ = 0x0200;
|
|
const DWORD_ PROCESS_QUERY_INFORMATION_ = 0x0400;
|
|
const DWORD_ PROCESS_SUSPEND_RESUME_ = 0x0800;
|
|
const DWORD_ PROCESS_ALL_ACCESS_ = (STANDARD_RIGHTS_REQUIRED_ | SYNCHRONIZE_ | 0xFFF);
|
|
|
|
#endif // defined( BOOST_USE_WINDOWS_H )
|
|
|
|
#if defined( BOOST_USE_WINDOWS_H ) && !defined( BOOST_WINAPI_IS_MINGW )
|
|
|
|
const DWORD_ CREATE_PRESERVE_CODE_AUTHZ_LEVEL_ = CREATE_PRESERVE_CODE_AUTHZ_LEVEL;
|
|
|
|
// Undocumented
|
|
const DWORD_ CREATE_IGNORE_SYSTEM_DEFAULT_ = CREATE_IGNORE_SYSTEM_DEFAULT;
|
|
|
|
#else // defined( BOOST_USE_WINDOWS_H ) && !defined( BOOST_WINAPI_IS_MINGW )
|
|
|
|
const DWORD_ CREATE_PRESERVE_CODE_AUTHZ_LEVEL_ = 0x2000000;
|
|
|
|
// Undocumented
|
|
const DWORD_ CREATE_IGNORE_SYSTEM_DEFAULT_ = 0x80000000;
|
|
|
|
#endif // defined( BOOST_USE_WINDOWS_H ) && !defined( BOOST_WINAPI_IS_MINGW )
|
|
|
|
typedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _PROCESS_INFORMATION {
|
|
HANDLE_ hProcess;
|
|
HANDLE_ hThread;
|
|
DWORD_ dwProcessId;
|
|
DWORD_ dwThreadId;
|
|
} PROCESS_INFORMATION_, *PPROCESS_INFORMATION_, *LPPROCESS_INFORMATION_;
|
|
|
|
typedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _STARTUPINFOA {
|
|
DWORD_ cb;
|
|
LPSTR_ lpReserved;
|
|
LPSTR_ lpDesktop;
|
|
LPSTR_ lpTitle;
|
|
DWORD_ dwX;
|
|
DWORD_ dwY;
|
|
DWORD_ dwXSize;
|
|
DWORD_ dwYSize;
|
|
DWORD_ dwXCountChars;
|
|
DWORD_ dwYCountChars;
|
|
DWORD_ dwFillAttribute;
|
|
DWORD_ dwFlags;
|
|
WORD_ wShowWindow;
|
|
WORD_ cbReserved2;
|
|
LPBYTE_ lpReserved2;
|
|
HANDLE_ hStdInput;
|
|
HANDLE_ hStdOutput;
|
|
HANDLE_ hStdError;
|
|
} STARTUPINFOA_, *LPSTARTUPINFOA_;
|
|
|
|
typedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _STARTUPINFOW {
|
|
DWORD_ cb;
|
|
LPWSTR_ lpReserved;
|
|
LPWSTR_ lpDesktop;
|
|
LPWSTR_ lpTitle;
|
|
DWORD_ dwX;
|
|
DWORD_ dwY;
|
|
DWORD_ dwXSize;
|
|
DWORD_ dwYSize;
|
|
DWORD_ dwXCountChars;
|
|
DWORD_ dwYCountChars;
|
|
DWORD_ dwFillAttribute;
|
|
DWORD_ dwFlags;
|
|
WORD_ wShowWindow;
|
|
WORD_ cbReserved2;
|
|
LPBYTE_ lpReserved2;
|
|
HANDLE_ hStdInput;
|
|
HANDLE_ hStdOutput;
|
|
HANDLE_ hStdError;
|
|
} STARTUPINFOW_, *LPSTARTUPINFOW_;
|
|
|
|
#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
|
|
|
|
typedef struct _PROC_THREAD_ATTRIBUTE_LIST PROC_THREAD_ATTRIBUTE_LIST_, *PPROC_THREAD_ATTRIBUTE_LIST_;
|
|
|
|
#if !defined(BOOST_NO_ANSI_APIS)
|
|
typedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _STARTUPINFOEXA {
|
|
STARTUPINFOA_ StartupInfo;
|
|
PPROC_THREAD_ATTRIBUTE_LIST_ lpAttributeList;
|
|
} STARTUPINFOEXA_, *LPSTARTUPINFOEXA_;
|
|
#endif //BOOST_NO_ANSI_APIS
|
|
|
|
typedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _STARTUPINFOEXW {
|
|
STARTUPINFOW_ StartupInfo;
|
|
PPROC_THREAD_ATTRIBUTE_LIST_ lpAttributeList;
|
|
} STARTUPINFOEXW_, *LPSTARTUPINFOEXW_;
|
|
|
|
#endif // BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
|
|
|
|
using ::GetExitCodeProcess;
|
|
using ::ExitProcess;
|
|
using ::TerminateProcess;
|
|
using ::OpenProcess;
|
|
|
|
#if !defined( BOOST_NO_ANSI_APIS )
|
|
BOOST_FORCEINLINE BOOL_ CreateProcessA(
|
|
LPCSTR_ lpApplicationName,
|
|
LPSTR_ lpCommandLine,
|
|
LPSECURITY_ATTRIBUTES_ lpProcessAttributes,
|
|
LPSECURITY_ATTRIBUTES_ lpThreadAttributes,
|
|
INT_ bInheritHandles,
|
|
DWORD_ dwCreationFlags,
|
|
LPVOID_ lpEnvironment,
|
|
LPCSTR_ lpCurrentDirectory,
|
|
LPSTARTUPINFOA_ lpStartupInfo,
|
|
LPPROCESS_INFORMATION_ lpProcessInformation)
|
|
{
|
|
return ::CreateProcessA(
|
|
lpApplicationName,
|
|
lpCommandLine,
|
|
reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpProcessAttributes),
|
|
reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpThreadAttributes),
|
|
bInheritHandles,
|
|
dwCreationFlags,
|
|
lpEnvironment,
|
|
lpCurrentDirectory,
|
|
reinterpret_cast< ::_STARTUPINFOA* >(lpStartupInfo),
|
|
reinterpret_cast< ::_PROCESS_INFORMATION* >(lpProcessInformation));
|
|
}
|
|
|
|
BOOST_FORCEINLINE BOOL_ 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)
|
|
{
|
|
return ::CreateProcessA(
|
|
lpApplicationName,
|
|
lpCommandLine,
|
|
reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpProcessAttributes),
|
|
reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpThreadAttributes),
|
|
bInheritHandles,
|
|
dwCreationFlags,
|
|
lpEnvironment,
|
|
lpCurrentDirectory,
|
|
reinterpret_cast< ::_STARTUPINFOA* >(lpStartupInfo),
|
|
reinterpret_cast< ::_PROCESS_INFORMATION* >(lpProcessInformation));
|
|
}
|
|
#endif
|
|
|
|
BOOST_FORCEINLINE BOOL_ CreateProcessW(
|
|
LPCWSTR_ lpApplicationName,
|
|
LPWSTR_ lpCommandLine,
|
|
LPSECURITY_ATTRIBUTES_ lpProcessAttributes,
|
|
LPSECURITY_ATTRIBUTES_ lpThreadAttributes,
|
|
INT_ bInheritHandles,
|
|
DWORD_ dwCreationFlags,
|
|
LPVOID_ lpEnvironment,
|
|
LPCWSTR_ lpCurrentDirectory,
|
|
LPSTARTUPINFOW_ lpStartupInfo,
|
|
LPPROCESS_INFORMATION_ lpProcessInformation)
|
|
{
|
|
return ::CreateProcessW(
|
|
lpApplicationName,
|
|
lpCommandLine,
|
|
reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpProcessAttributes),
|
|
reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpThreadAttributes),
|
|
bInheritHandles,
|
|
dwCreationFlags,
|
|
lpEnvironment,
|
|
lpCurrentDirectory,
|
|
reinterpret_cast< ::_STARTUPINFOW* >(lpStartupInfo),
|
|
reinterpret_cast< ::_PROCESS_INFORMATION* >(lpProcessInformation));
|
|
}
|
|
|
|
BOOST_FORCEINLINE BOOL_ 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)
|
|
{
|
|
return ::CreateProcessW(
|
|
lpApplicationName,
|
|
lpCommandLine,
|
|
reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpProcessAttributes),
|
|
reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpThreadAttributes),
|
|
bInheritHandles,
|
|
dwCreationFlags,
|
|
lpEnvironment,
|
|
lpCurrentDirectory,
|
|
reinterpret_cast< ::_STARTUPINFOW* >(lpStartupInfo),
|
|
reinterpret_cast< ::_PROCESS_INFORMATION* >(lpProcessInformation));
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
#endif // BOOST_PLAT_WINDOWS_DESKTOP
|
|
|
|
#endif // BOOST_DETAIL_WINAPI_PROCESS_HPP_
|