]>
Commit | Line | Data |
---|---|---|
b32b8144 FG |
1 | /* |
2 | * Copyright 2016 Klemens D. Morgenstern | |
3 | * | |
4 | * Distributed under the Boost Software License, Version 1.0. | |
5 | * See http://www.boost.org/LICENSE_1_0.txt | |
6 | */ | |
7 | ||
8 | #ifndef BOOST_WINAPI_JOBS_HPP_INCLUDED_ | |
9 | #define BOOST_WINAPI_JOBS_HPP_INCLUDED_ | |
10 | ||
11 | #include <boost/winapi/config.hpp> | |
12 | ||
13 | #ifdef BOOST_HAS_PRAGMA_ONCE | |
14 | #pragma once | |
15 | #endif | |
16 | ||
17 | #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN2K | |
18 | ||
19 | #include <boost/winapi/basic_types.hpp> | |
20 | #include <boost/winapi/access_rights.hpp> | |
20effc67 | 21 | #include <boost/winapi/detail/header.hpp> |
b32b8144 FG |
22 | |
23 | #if !defined( BOOST_USE_WINDOWS_H ) | |
24 | extern "C" { | |
25 | #if !defined( BOOST_NO_ANSI_APIS ) | |
26 | #if BOOST_WINAPI_PARTITION_DESKTOP | |
20effc67 | 27 | BOOST_WINAPI_IMPORT boost::winapi::HANDLE_ BOOST_WINAPI_WINAPI_CC CreateJobObjectA( |
b32b8144 FG |
28 | ::_SECURITY_ATTRIBUTES* lpJobAttributes, |
29 | boost::winapi::LPCSTR_ lpName); | |
30 | #endif | |
31 | #endif | |
32 | ||
33 | #if BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM | |
20effc67 | 34 | BOOST_WINAPI_IMPORT boost::winapi::HANDLE_ BOOST_WINAPI_WINAPI_CC CreateJobObjectW( |
b32b8144 FG |
35 | ::_SECURITY_ATTRIBUTES* lpJobAttributes, |
36 | boost::winapi::LPCWSTR_ lpName); | |
37 | ||
20effc67 | 38 | BOOST_WINAPI_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC AssignProcessToJobObject( |
b32b8144 FG |
39 | boost::winapi::HANDLE_ hJob, |
40 | boost::winapi::HANDLE_ hProcess); | |
41 | ||
42 | #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WINXP | |
20effc67 | 43 | BOOST_WINAPI_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC IsProcessInJob( |
b32b8144 FG |
44 | boost::winapi::HANDLE_ ProcessHandle, |
45 | boost::winapi::HANDLE_ JobHandle, | |
46 | boost::winapi::PBOOL_ Result); | |
47 | #endif | |
48 | ||
20effc67 | 49 | BOOST_WINAPI_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC TerminateJobObject( |
b32b8144 FG |
50 | boost::winapi::HANDLE_ hJob, |
51 | boost::winapi::UINT_ uExitCode); | |
52 | #endif // BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM | |
53 | } // extern "C" | |
54 | #endif // !defined( BOOST_USE_WINDOWS_H ) | |
55 | ||
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 ) | |
58 | extern "C" { | |
59 | #if !defined( BOOST_NO_ANSI_APIS ) | |
60 | #if BOOST_WINAPI_PARTITION_DESKTOP | |
20effc67 | 61 | BOOST_WINAPI_IMPORT boost::winapi::HANDLE_ BOOST_WINAPI_WINAPI_CC OpenJobObjectA( |
b32b8144 FG |
62 | boost::winapi::DWORD_ dwDesiredAccess, |
63 | boost::winapi::BOOL_ bInheritHandles, | |
64 | boost::winapi::LPCSTR_ lpName); | |
65 | #endif | |
66 | #endif | |
67 | ||
68 | #if BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM | |
20effc67 | 69 | BOOST_WINAPI_IMPORT boost::winapi::HANDLE_ BOOST_WINAPI_WINAPI_CC OpenJobObjectW( |
b32b8144 FG |
70 | boost::winapi::DWORD_ dwDesiredAccess, |
71 | boost::winapi::BOOL_ bInheritHandles, | |
72 | boost::winapi::LPCWSTR_ lpName); | |
73 | #endif | |
74 | } // extern "C" | |
75 | #endif // !defined( BOOST_USE_WINDOWS_H ) || defined( BOOST_WINAPI_IS_MINGW ) | |
76 | ||
77 | namespace boost { | |
78 | namespace winapi { | |
79 | ||
80 | // MinGW does not define job constants | |
81 | #if defined( BOOST_USE_WINDOWS_H ) && !defined( BOOST_WINAPI_IS_MINGW ) | |
92f5a8d4 TL |
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; | |
b32b8144 | 88 | #else |
92f5a8d4 TL |
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); | |
b32b8144 FG |
95 | #endif |
96 | ||
97 | #if BOOST_WINAPI_PARTITION_DESKTOP | |
98 | #if !defined( BOOST_NO_ANSI_APIS ) | |
99 | BOOST_FORCEINLINE HANDLE_ CreateJobObjectA(LPSECURITY_ATTRIBUTES_ lpJobAttributes, LPCSTR_ lpName) | |
100 | { | |
101 | return ::CreateJobObjectA(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpJobAttributes), lpName); | |
102 | } | |
103 | ||
104 | BOOST_FORCEINLINE HANDLE_ create_job_object(LPSECURITY_ATTRIBUTES_ lpJobAttributes, LPCSTR_ lpName) | |
105 | { | |
106 | return ::CreateJobObjectA(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpJobAttributes), lpName); | |
107 | } | |
108 | ||
109 | using ::OpenJobObjectA; | |
110 | ||
111 | BOOST_FORCEINLINE HANDLE_ open_job_object(DWORD_ dwDesiredAccess, BOOL_ bInheritHandles, LPCSTR_ lpName) | |
112 | { | |
113 | return ::OpenJobObjectA(dwDesiredAccess, bInheritHandles, lpName); | |
114 | } | |
115 | #endif // !defined( BOOST_NO_ANSI_APIS ) | |
116 | #endif // BOOST_WINAPI_PARTITION_DESKTOP | |
117 | ||
118 | #if BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM | |
119 | using ::AssignProcessToJobObject; | |
120 | BOOST_FORCEINLINE HANDLE_ CreateJobObjectW(LPSECURITY_ATTRIBUTES_ lpJobAttributes, LPCWSTR_ lpName) | |
121 | { | |
122 | return ::CreateJobObjectW(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpJobAttributes), lpName); | |
123 | } | |
124 | ||
125 | BOOST_FORCEINLINE HANDLE_ create_job_object(LPSECURITY_ATTRIBUTES_ lpJobAttributes, LPCWSTR_ lpName) | |
126 | { | |
127 | return ::CreateJobObjectW(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpJobAttributes), lpName); | |
128 | } | |
129 | ||
130 | BOOST_FORCEINLINE HANDLE_ open_job_object(DWORD_ dwDesiredAccess, BOOL_ bInheritHandles, LPCWSTR_ lpName) | |
131 | { | |
132 | return ::OpenJobObjectW(dwDesiredAccess, bInheritHandles, lpName); | |
133 | } | |
134 | ||
135 | #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WINXP | |
136 | using ::IsProcessInJob; | |
137 | #endif | |
138 | ||
139 | using ::OpenJobObjectW; | |
140 | using ::TerminateJobObject; | |
141 | #endif // BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM | |
142 | ||
143 | } // namespace winapi | |
144 | } // namespace boost | |
145 | ||
20effc67 TL |
146 | #include <boost/winapi/detail/footer.hpp> |
147 | ||
b32b8144 FG |
148 | #endif // BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN2K |
149 | #endif // BOOST_WINAPI_JOBS_HPP_INCLUDED_ |