summaryrefslogtreecommitdiff
path: root/boost/detail/winapi/process.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/detail/winapi/process.hpp')
-rw-r--r--boost/detail/winapi/process.hpp374
1 files changed, 363 insertions, 11 deletions
diff --git a/boost/detail/winapi/process.hpp b/boost/detail/winapi/process.hpp
index 3c3de56e3e..d980aa6d4b 100644
--- a/boost/detail/winapi/process.hpp
+++ b/boost/detail/winapi/process.hpp
@@ -1,34 +1,386 @@
// process.hpp --------------------------------------------------------------//
-// Copyright 2010 Vicente J. Botet Escriba
+// 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_
-#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/GetCurrentProcess.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
-// Windows CE define GetCurrentProcessId as an inline function in kfuncs.h
-#if !defined( BOOST_USE_WINDOWS_H ) && !defined( UNDER_CE )
+#if BOOST_PLAT_WINDOWS_DESKTOP
+
+#if !defined( BOOST_USE_WINDOWS_H )
extern "C" {
-BOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI GetCurrentProcessId(BOOST_DETAIL_WINAPI_VOID);
-}
+
+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);
+
+} // extern "C"
+#endif //defined BOOST_WINDOWS_H
namespace boost {
namespace detail {
namespace winapi {
-using ::GetCurrentProcessId;
+
+#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
+
+#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
+
+#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;
+
+#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
+#endif // BOOST_DETAIL_WINAPI_PROCESS_HPP_