2 * Copyright 2016 Klemens D. Morgenstern
4 * Distributed under the Boost Software License, Version 1.0.
5 * See http://www.boost.org/LICENSE_1_0.txt
8 #ifndef BOOST_WINAPI_JOBS_HPP_INCLUDED_
9 #define BOOST_WINAPI_JOBS_HPP_INCLUDED_
11 #include <boost/winapi/config.hpp>
13 #ifdef BOOST_HAS_PRAGMA_ONCE
17 #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN2K
19 #include <boost/winapi/basic_types.hpp>
20 #include <boost/winapi/access_rights.hpp>
21 #include <boost/winapi/detail/header.hpp>
23 #if !defined( BOOST_USE_WINDOWS_H )
25 #if !defined( BOOST_NO_ANSI_APIS )
26 #if BOOST_WINAPI_PARTITION_DESKTOP
27 BOOST_WINAPI_IMPORT boost::winapi::HANDLE_ BOOST_WINAPI_WINAPI_CC CreateJobObjectA(
28 ::_SECURITY_ATTRIBUTES* lpJobAttributes,
29 boost::winapi::LPCSTR_ lpName);
33 #if BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM
34 BOOST_WINAPI_IMPORT boost::winapi::HANDLE_ BOOST_WINAPI_WINAPI_CC CreateJobObjectW(
35 ::_SECURITY_ATTRIBUTES* lpJobAttributes,
36 boost::winapi::LPCWSTR_ lpName);
38 BOOST_WINAPI_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC AssignProcessToJobObject(
39 boost::winapi::HANDLE_ hJob,
40 boost::winapi::HANDLE_ hProcess);
42 #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WINXP
43 BOOST_WINAPI_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC IsProcessInJob(
44 boost::winapi::HANDLE_ ProcessHandle,
45 boost::winapi::HANDLE_ JobHandle,
46 boost::winapi::PBOOL_ Result);
49 BOOST_WINAPI_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC TerminateJobObject(
50 boost::winapi::HANDLE_ hJob,
51 boost::winapi::UINT_ uExitCode);
52 #endif // BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM
54 #endif // !defined( BOOST_USE_WINDOWS_H )
56 // MinGW does not declare OpenJobObjectA/W in headers but exports them from libraries
57 #if !defined( BOOST_USE_WINDOWS_H ) || defined( BOOST_WINAPI_IS_MINGW )
59 #if !defined( BOOST_NO_ANSI_APIS )
60 #if BOOST_WINAPI_PARTITION_DESKTOP
61 BOOST_WINAPI_IMPORT boost::winapi::HANDLE_ BOOST_WINAPI_WINAPI_CC OpenJobObjectA(
62 boost::winapi::DWORD_ dwDesiredAccess,
63 boost::winapi::BOOL_ bInheritHandles,
64 boost::winapi::LPCSTR_ lpName);
68 #if BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM
69 BOOST_WINAPI_IMPORT boost::winapi::HANDLE_ BOOST_WINAPI_WINAPI_CC OpenJobObjectW(
70 boost::winapi::DWORD_ dwDesiredAccess,
71 boost::winapi::BOOL_ bInheritHandles,
72 boost::winapi::LPCWSTR_ lpName);
75 #endif // !defined( BOOST_USE_WINDOWS_H ) || defined( BOOST_WINAPI_IS_MINGW )
80 // MinGW does not define job constants
81 #if defined( BOOST_USE_WINDOWS_H ) && !defined( BOOST_WINAPI_IS_MINGW )
82 BOOST_CONSTEXPR_OR_CONST DWORD_ JOB_OBJECT_ASSIGN_PROCESS_ = JOB_OBJECT_ASSIGN_PROCESS;
83 BOOST_CONSTEXPR_OR_CONST DWORD_ JOB_OBJECT_SET_ATTRIBUTES_ = JOB_OBJECT_SET_ATTRIBUTES;
84 BOOST_CONSTEXPR_OR_CONST DWORD_ JOB_OBJECT_QUERY_ = JOB_OBJECT_QUERY;
85 BOOST_CONSTEXPR_OR_CONST DWORD_ JOB_OBJECT_TERMINATE_ = JOB_OBJECT_TERMINATE;
86 BOOST_CONSTEXPR_OR_CONST DWORD_ JOB_OBJECT_SET_SECURITY_ATTRIBUTES_ = JOB_OBJECT_SET_SECURITY_ATTRIBUTES;
87 BOOST_CONSTEXPR_OR_CONST DWORD_ JOB_OBJECT_ALL_ACCESS_ = JOB_OBJECT_ALL_ACCESS;
89 BOOST_CONSTEXPR_OR_CONST DWORD_ JOB_OBJECT_ASSIGN_PROCESS_ = 0x0001;
90 BOOST_CONSTEXPR_OR_CONST DWORD_ JOB_OBJECT_SET_ATTRIBUTES_ = 0x0002;
91 BOOST_CONSTEXPR_OR_CONST DWORD_ JOB_OBJECT_QUERY_ = 0x0004;
92 BOOST_CONSTEXPR_OR_CONST DWORD_ JOB_OBJECT_TERMINATE_ = 0x0008;
93 BOOST_CONSTEXPR_OR_CONST DWORD_ JOB_OBJECT_SET_SECURITY_ATTRIBUTES_ = 0x0010;
94 BOOST_CONSTEXPR_OR_CONST DWORD_ JOB_OBJECT_ALL_ACCESS_ = (STANDARD_RIGHTS_REQUIRED_ | SYNCHRONIZE_ | 0x1F);
97 #if BOOST_WINAPI_PARTITION_DESKTOP
98 #if !defined( BOOST_NO_ANSI_APIS )
99 BOOST_FORCEINLINE HANDLE_ CreateJobObjectA(LPSECURITY_ATTRIBUTES_ lpJobAttributes, LPCSTR_ lpName)
101 return ::CreateJobObjectA(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpJobAttributes), lpName);
104 BOOST_FORCEINLINE HANDLE_ create_job_object(LPSECURITY_ATTRIBUTES_ lpJobAttributes, LPCSTR_ lpName)
106 return ::CreateJobObjectA(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpJobAttributes), lpName);
109 using ::OpenJobObjectA;
111 BOOST_FORCEINLINE HANDLE_ open_job_object(DWORD_ dwDesiredAccess, BOOL_ bInheritHandles, LPCSTR_ lpName)
113 return ::OpenJobObjectA(dwDesiredAccess, bInheritHandles, lpName);
115 #endif // !defined( BOOST_NO_ANSI_APIS )
116 #endif // BOOST_WINAPI_PARTITION_DESKTOP
118 #if BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM
119 using ::AssignProcessToJobObject;
120 BOOST_FORCEINLINE HANDLE_ CreateJobObjectW(LPSECURITY_ATTRIBUTES_ lpJobAttributes, LPCWSTR_ lpName)
122 return ::CreateJobObjectW(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpJobAttributes), lpName);
125 BOOST_FORCEINLINE HANDLE_ create_job_object(LPSECURITY_ATTRIBUTES_ lpJobAttributes, LPCWSTR_ lpName)
127 return ::CreateJobObjectW(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpJobAttributes), lpName);
130 BOOST_FORCEINLINE HANDLE_ open_job_object(DWORD_ dwDesiredAccess, BOOL_ bInheritHandles, LPCWSTR_ lpName)
132 return ::OpenJobObjectW(dwDesiredAccess, bInheritHandles, lpName);
135 #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WINXP
136 using ::IsProcessInJob;
139 using ::OpenJobObjectW;
140 using ::TerminateJobObject;
141 #endif // BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM
143 } // namespace winapi
146 #include <boost/winapi/detail/footer.hpp>
148 #endif // BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN2K
149 #endif // BOOST_WINAPI_JOBS_HPP_INCLUDED_