]>
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> | |
21 | ||
22 | #if !defined( BOOST_USE_WINDOWS_H ) | |
23 | extern "C" { | |
24 | #if !defined( BOOST_NO_ANSI_APIS ) | |
25 | #if BOOST_WINAPI_PARTITION_DESKTOP | |
26 | BOOST_SYMBOL_IMPORT boost::winapi::HANDLE_ WINAPI CreateJobObjectA( | |
27 | ::_SECURITY_ATTRIBUTES* lpJobAttributes, | |
28 | boost::winapi::LPCSTR_ lpName); | |
29 | #endif | |
30 | #endif | |
31 | ||
32 | #if BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM | |
33 | BOOST_SYMBOL_IMPORT boost::winapi::HANDLE_ WINAPI CreateJobObjectW( | |
34 | ::_SECURITY_ATTRIBUTES* lpJobAttributes, | |
35 | boost::winapi::LPCWSTR_ lpName); | |
36 | ||
37 | BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI AssignProcessToJobObject( | |
38 | boost::winapi::HANDLE_ hJob, | |
39 | boost::winapi::HANDLE_ hProcess); | |
40 | ||
41 | #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WINXP | |
42 | BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI IsProcessInJob( | |
43 | boost::winapi::HANDLE_ ProcessHandle, | |
44 | boost::winapi::HANDLE_ JobHandle, | |
45 | boost::winapi::PBOOL_ Result); | |
46 | #endif | |
47 | ||
48 | BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI TerminateJobObject( | |
49 | boost::winapi::HANDLE_ hJob, | |
50 | boost::winapi::UINT_ uExitCode); | |
51 | #endif // BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM | |
52 | } // extern "C" | |
53 | #endif // !defined( BOOST_USE_WINDOWS_H ) | |
54 | ||
55 | // MinGW does not declare OpenJobObjectA/W in headers but exports them from libraries | |
56 | #if !defined( BOOST_USE_WINDOWS_H ) || defined( BOOST_WINAPI_IS_MINGW ) | |
57 | extern "C" { | |
58 | #if !defined( BOOST_NO_ANSI_APIS ) | |
59 | #if BOOST_WINAPI_PARTITION_DESKTOP | |
60 | BOOST_SYMBOL_IMPORT boost::winapi::HANDLE_ WINAPI OpenJobObjectA( | |
61 | boost::winapi::DWORD_ dwDesiredAccess, | |
62 | boost::winapi::BOOL_ bInheritHandles, | |
63 | boost::winapi::LPCSTR_ lpName); | |
64 | #endif | |
65 | #endif | |
66 | ||
67 | #if BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM | |
68 | BOOST_SYMBOL_IMPORT boost::winapi::HANDLE_ WINAPI OpenJobObjectW( | |
69 | boost::winapi::DWORD_ dwDesiredAccess, | |
70 | boost::winapi::BOOL_ bInheritHandles, | |
71 | boost::winapi::LPCWSTR_ lpName); | |
72 | #endif | |
73 | } // extern "C" | |
74 | #endif // !defined( BOOST_USE_WINDOWS_H ) || defined( BOOST_WINAPI_IS_MINGW ) | |
75 | ||
76 | namespace boost { | |
77 | namespace winapi { | |
78 | ||
79 | // MinGW does not define job constants | |
80 | #if defined( BOOST_USE_WINDOWS_H ) && !defined( BOOST_WINAPI_IS_MINGW ) | |
81 | const DWORD_ JOB_OBJECT_ASSIGN_PROCESS_ = JOB_OBJECT_ASSIGN_PROCESS; | |
82 | const DWORD_ JOB_OBJECT_SET_ATTRIBUTES_ = JOB_OBJECT_SET_ATTRIBUTES; | |
83 | const DWORD_ JOB_OBJECT_QUERY_ = JOB_OBJECT_QUERY; | |
84 | const DWORD_ JOB_OBJECT_TERMINATE_ = JOB_OBJECT_TERMINATE; | |
85 | const DWORD_ JOB_OBJECT_SET_SECURITY_ATTRIBUTES_ = JOB_OBJECT_SET_SECURITY_ATTRIBUTES; | |
86 | const DWORD_ JOB_OBJECT_ALL_ACCESS_ = JOB_OBJECT_ALL_ACCESS; | |
87 | #else | |
88 | const DWORD_ JOB_OBJECT_ASSIGN_PROCESS_ = 0x0001; | |
89 | const DWORD_ JOB_OBJECT_SET_ATTRIBUTES_ = 0x0002; | |
90 | const DWORD_ JOB_OBJECT_QUERY_ = 0x0004; | |
91 | const DWORD_ JOB_OBJECT_TERMINATE_ = 0x0008; | |
92 | const DWORD_ JOB_OBJECT_SET_SECURITY_ATTRIBUTES_ = 0x0010; | |
93 | const DWORD_ JOB_OBJECT_ALL_ACCESS_ = (STANDARD_RIGHTS_REQUIRED_ | SYNCHRONIZE_ | 0x1F); | |
94 | #endif | |
95 | ||
96 | #if BOOST_WINAPI_PARTITION_DESKTOP | |
97 | #if !defined( BOOST_NO_ANSI_APIS ) | |
98 | BOOST_FORCEINLINE HANDLE_ CreateJobObjectA(LPSECURITY_ATTRIBUTES_ lpJobAttributes, LPCSTR_ lpName) | |
99 | { | |
100 | return ::CreateJobObjectA(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpJobAttributes), lpName); | |
101 | } | |
102 | ||
103 | BOOST_FORCEINLINE HANDLE_ create_job_object(LPSECURITY_ATTRIBUTES_ lpJobAttributes, LPCSTR_ lpName) | |
104 | { | |
105 | return ::CreateJobObjectA(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpJobAttributes), lpName); | |
106 | } | |
107 | ||
108 | using ::OpenJobObjectA; | |
109 | ||
110 | BOOST_FORCEINLINE HANDLE_ open_job_object(DWORD_ dwDesiredAccess, BOOL_ bInheritHandles, LPCSTR_ lpName) | |
111 | { | |
112 | return ::OpenJobObjectA(dwDesiredAccess, bInheritHandles, lpName); | |
113 | } | |
114 | #endif // !defined( BOOST_NO_ANSI_APIS ) | |
115 | #endif // BOOST_WINAPI_PARTITION_DESKTOP | |
116 | ||
117 | #if BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM | |
118 | using ::AssignProcessToJobObject; | |
119 | BOOST_FORCEINLINE HANDLE_ CreateJobObjectW(LPSECURITY_ATTRIBUTES_ lpJobAttributes, LPCWSTR_ lpName) | |
120 | { | |
121 | return ::CreateJobObjectW(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpJobAttributes), lpName); | |
122 | } | |
123 | ||
124 | BOOST_FORCEINLINE HANDLE_ create_job_object(LPSECURITY_ATTRIBUTES_ lpJobAttributes, LPCWSTR_ lpName) | |
125 | { | |
126 | return ::CreateJobObjectW(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpJobAttributes), lpName); | |
127 | } | |
128 | ||
129 | BOOST_FORCEINLINE HANDLE_ open_job_object(DWORD_ dwDesiredAccess, BOOL_ bInheritHandles, LPCWSTR_ lpName) | |
130 | { | |
131 | return ::OpenJobObjectW(dwDesiredAccess, bInheritHandles, lpName); | |
132 | } | |
133 | ||
134 | #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WINXP | |
135 | using ::IsProcessInJob; | |
136 | #endif | |
137 | ||
138 | using ::OpenJobObjectW; | |
139 | using ::TerminateJobObject; | |
140 | #endif // BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM | |
141 | ||
142 | } // namespace winapi | |
143 | } // namespace boost | |
144 | ||
145 | #endif // BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN2K | |
146 | #endif // BOOST_WINAPI_JOBS_HPP_INCLUDED_ |