1 // jobs.hpp --------------------------------------------------------------//
3 // Copyright 2016 Klemens D. Morgenstern
5 // Distributed under the Boost Software License, Version 1.0.
6 // See http://www.boost.org/LICENSE_1_0.txt
8 #ifndef BOOST_DETAIL_WINAPI_JOBS_HPP_
9 #define BOOST_DETAIL_WINAPI_JOBS_HPP_
11 #include <boost/detail/winapi/basic_types.hpp>
12 #include <boost/detail/winapi/access_rights.hpp>
14 #if !defined( BOOST_USE_WINDOWS_H )
16 #if !defined( BOOST_NO_ANSI_APIS )
17 BOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI CreateJobObjectA(
18 ::_SECURITY_ATTRIBUTES* lpJobAttributes,
19 boost::detail::winapi::LPCSTR_ lpName);
22 BOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI CreateJobObjectW(
23 ::_SECURITY_ATTRIBUTES* lpJobAttributes,
24 boost::detail::winapi::LPCWSTR_ lpName);
26 BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI AssignProcessToJobObject(
27 boost::detail::winapi::HANDLE_ hJob,
28 boost::detail::winapi::HANDLE_ hProcess);
30 BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI IsProcessInJob(
31 boost::detail::winapi::HANDLE_ ProcessHandle,
32 boost::detail::winapi::HANDLE_ JobHandle,
33 boost::detail::winapi::PBOOL_ Result);
35 BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI TerminateJobObject(
36 boost::detail::winapi::HANDLE_ hJob,
37 boost::detail::winapi::UINT_ uExitCode);
39 BOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI OpenJobObjectA(
40 boost::detail::winapi::DWORD_ dwDesiredAccess,
41 boost::detail::winapi::BOOL_ bInheritHandles,
42 boost::detail::winapi::LPCSTR_ lpName);
44 BOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI OpenJobObjectW(
45 boost::detail::winapi::DWORD_ dwDesiredAccess,
46 boost::detail::winapi::BOOL_ bInheritHandles,
47 boost::detail::winapi::LPCWSTR_ lpName);
49 #endif // !defined( BOOST_USE_WINDOWS_H )
51 namespace boost { namespace detail { namespace winapi {
53 #if defined( BOOST_USE_WINDOWS_H )
54 const DWORD_ JOB_OBJECT_ASSIGN_PROCESS_ = JOB_OBJECT_ASSIGN_PROCESS;
55 const DWORD_ JOB_OBJECT_SET_ATTRIBUTES_ = JOB_OBJECT_SET_ATTRIBUTES;
56 const DWORD_ JOB_OBJECT_QUERY_ = JOB_OBJECT_QUERY;
57 const DWORD_ JOB_OBJECT_TERMINATE_ = JOB_OBJECT_TERMINATE;
58 const DWORD_ JOB_OBJECT_SET_SECURITY_ATTRIBUTES_ = JOB_OBJECT_SET_SECURITY_ATTRIBUTES;
59 const DWORD_ JOB_OBJECT_ALL_ACCESS_ = JOB_OBJECT_ALL_ACCESS;
61 const DWORD_ JOB_OBJECT_ASSIGN_PROCESS_ = 0x0001;
62 const DWORD_ JOB_OBJECT_SET_ATTRIBUTES_ = 0x0002;
63 const DWORD_ JOB_OBJECT_QUERY_ = 0x0004;
64 const DWORD_ JOB_OBJECT_TERMINATE_ = 0x0008;
65 const DWORD_ JOB_OBJECT_SET_SECURITY_ATTRIBUTES_ = 0x0010;
66 const DWORD_ JOB_OBJECT_ALL_ACCESS_ = (STANDARD_RIGHTS_REQUIRED_ | SYNCHRONIZE_ | 0x1F);
69 #if !defined( BOOST_NO_ANSI_APIS )
70 using ::OpenJobObjectA;
73 using ::OpenJobObjectW;
75 using ::AssignProcessToJobObject;
76 using ::IsProcessInJob;
77 using ::TerminateJobObject;
79 #if !defined( BOOST_NO_ANSI_APIS )
80 BOOST_FORCEINLINE HANDLE_ CreateJobObjectA(LPSECURITY_ATTRIBUTES_ lpJobAttributes, LPCSTR_ lpName)
82 return ::CreateJobObjectA(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpJobAttributes), lpName);
85 BOOST_FORCEINLINE HANDLE_ create_job_object(LPSECURITY_ATTRIBUTES_ lpJobAttributes, LPCSTR_ lpName)
87 return ::CreateJobObjectA(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpJobAttributes), lpName);
90 BOOST_FORCEINLINE HANDLE_ open_job_object(DWORD_ dwDesiredAccess, BOOL_ bInheritHandles, LPCSTR_ lpName)
92 return ::OpenJobObjectA(dwDesiredAccess, bInheritHandles, lpName);
94 #endif // !defined( BOOST_NO_ANSI_APIS )
96 BOOST_FORCEINLINE HANDLE_ CreateJobObjectW(LPSECURITY_ATTRIBUTES_ lpJobAttributes, LPCWSTR_ lpName)
98 return ::CreateJobObjectW(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpJobAttributes), lpName);
101 BOOST_FORCEINLINE HANDLE_ create_job_object(LPSECURITY_ATTRIBUTES_ lpJobAttributes, LPCWSTR_ lpName)
103 return ::CreateJobObjectW(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpJobAttributes), lpName);
106 BOOST_FORCEINLINE HANDLE_ open_job_object(DWORD_ dwDesiredAccess, BOOL_ bInheritHandles, LPCWSTR_ lpName)
108 return OpenJobObjectW(dwDesiredAccess, bInheritHandles, lpName);
111 } // namespace winapi
112 } // namespace detail
115 #endif // BOOST_DETAIL_WINAPI_JOBS_HPP_