]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/boost/process/detail/windows/job_workaround.hpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / boost / process / detail / windows / job_workaround.hpp
1 // Copyright (c) 2016 Klemens D. Morgenstern
2 //
3 // Distributed under the Boost Software License, Version 1.0. (See accompanying
4 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5
6 #ifndef BOOST_PROCESS_DETAIL_WINDOWS_JOB_WORKAROUND_HPP_
7 #define BOOST_PROCESS_DETAIL_WINDOWS_JOB_WORKAROUND_HPP_
8
9 #include <boost/winapi/config.hpp>
10 #include <boost/winapi/basic_types.hpp>
11 #include <boost/winapi/dll.hpp>
12
13 namespace boost { namespace process { namespace detail { namespace windows { namespace workaround {
14
15 //this import workaround is to keep it a header-only library. and enums cannot be imported from the winapi.
16
17 extern "C"
18 {
19
20 typedef enum _JOBOBJECTINFOCLASS_ {
21 JobObjectBasicAccountingInformation_ = 1, JobObjectBasicLimitInformation_,
22 JobObjectBasicProcessIdList_, JobObjectBasicUIRestrictions_,
23 JobObjectSecurityLimitInformation_, JobObjectEndOfJobTimeInformation_,
24 JobObjectAssociateCompletionPortInformation_, JobObjectBasicAndIoAccountingInformation_,
25 JobObjectExtendedLimitInformation_, JobObjectJobSetInformation_,
26 JobObjectGroupInformation_,
27 JobObjectNotificationLimitInformation_,
28 JobObjectLimitViolationInformation_,
29 JobObjectGroupInformationEx_,
30 JobObjectCpuRateControlInformation_,
31 JobObjectCompletionFilter_,
32 JobObjectCompletionCounter_,
33 JobObjectReserved1Information_ = 18,
34 JobObjectReserved2Information_,
35 JobObjectReserved3Information_,
36 JobObjectReserved4Information_,
37 JobObjectReserved5Information_,
38 JobObjectReserved6Information_,
39 JobObjectReserved7Information_,
40 JobObjectReserved8Information_,
41 MaxJobObjectInfoClass_
42 } JOBOBJECTINFOCLASS_;
43
44 typedef struct _JOBOBJECT_BASIC_LIMIT_INFORMATION_ {
45 ::boost::winapi::LARGE_INTEGER_ PerProcessUserTimeLimit;
46 ::boost::winapi::LARGE_INTEGER_ PerJobUserTimeLimit;
47 ::boost::winapi::DWORD_ LimitFlags;
48 ::boost::winapi::SIZE_T_ MinimumWorkingSetSize;
49 ::boost::winapi::SIZE_T_ MaximumWorkingSetSize;
50 ::boost::winapi::DWORD_ ActiveProcessLimit;
51 ::boost::winapi::ULONG_PTR_ Affinity;
52 ::boost::winapi::DWORD_ PriorityClass;
53 ::boost::winapi::DWORD_ SchedulingClass;
54 } JOBOBJECT_BASIC_LIMIT_INFORMATION_;
55
56
57 typedef struct _IO_COUNTERS_ {
58 ::boost::winapi::ULONGLONG_ ReadOperationCount;
59 ::boost::winapi::ULONGLONG_ WriteOperationCount;
60 ::boost::winapi::ULONGLONG_ OtherOperationCount;
61 ::boost::winapi::ULONGLONG_ ReadTransferCount;
62 ::boost::winapi::ULONGLONG_ WriteTransferCount;
63 ::boost::winapi::ULONGLONG_ OtherTransferCount;
64 } IO_COUNTERS_;
65
66
67 typedef struct _JOBOBJECT_EXTENDED_LIMIT_INFORMATION_ {
68 JOBOBJECT_BASIC_LIMIT_INFORMATION_ BasicLimitInformation;
69 IO_COUNTERS_ IoInfo;
70 ::boost::winapi::SIZE_T_ ProcessMemoryLimit;
71 ::boost::winapi::SIZE_T_ JobMemoryLimit;
72 ::boost::winapi::SIZE_T_ PeakProcessMemoryUsed;
73 ::boost::winapi::SIZE_T_ PeakJobMemoryUsed;
74 } JOBOBJECT_EXTENDED_LIMIT_INFORMATION_;
75
76
77 /*BOOL WINAPI QueryInformationJobObject(
78 _In_opt_ HANDLE hJob,
79 _In_ JOBOBJECTINFOCLASS JobObjectInfoClass,
80 _Out_ LPVOID lpJobObjectInfo,
81 _In_ DWORD cbJobObjectInfoLength,
82 _Out_opt_ LPDWORD lpReturnLength
83 );
84 */
85 typedef ::boost::winapi::BOOL_ ( WINAPI *query_information_job_object_p)(
86 ::boost::winapi::HANDLE_,
87 JOBOBJECTINFOCLASS_,
88 void *,
89 ::boost::winapi::DWORD_,
90 ::boost::winapi::DWORD_ *);
91
92
93 inline ::boost::winapi::BOOL_ WINAPI query_information_job_object(
94 ::boost::winapi::HANDLE_ hJob,
95 JOBOBJECTINFOCLASS_ JobObjectInfoClass,
96 void * lpJobObjectInfo,
97 ::boost::winapi::DWORD_ cbJobObjectInfoLength,
98 ::boost::winapi::DWORD_ *lpReturnLength)
99 {
100 static ::boost::winapi::HMODULE_ h = ::boost::winapi::get_module_handle("Kernel32.dll");
101 static query_information_job_object_p f = reinterpret_cast<query_information_job_object_p>(::boost::winapi::get_proc_address(h, "QueryInformationJobObject"));
102
103 return (*f)(hJob, JobObjectInfoClass, lpJobObjectInfo, cbJobObjectInfoLength, lpReturnLength);
104 }
105
106 /*BOOL WINAPI SetInformationJobObject(
107 _In_ HANDLE hJob,
108 _In_ JOBOBJECTINFOCLASS JobObjectInfoClass,
109 _In_ LPVOID lpJobObjectInfo,
110 _In_ DWORD cbJobObjectInfoLength
111 );*/
112
113 typedef ::boost::winapi::BOOL_ ( WINAPI *set_information_job_object_p)(
114 ::boost::winapi::HANDLE_,
115 JOBOBJECTINFOCLASS_,
116 void *,
117 ::boost::winapi::DWORD_);
118
119 }
120
121 inline ::boost::winapi::BOOL_ WINAPI set_information_job_object(
122 ::boost::winapi::HANDLE_ hJob,
123 JOBOBJECTINFOCLASS_ JobObjectInfoClass,
124 void * lpJobObjectInfo,
125 ::boost::winapi::DWORD_ cbJobObjectInfoLength)
126 {
127 static ::boost::winapi::HMODULE_ h = ::boost::winapi::get_module_handle("Kernel32.dll");
128 static set_information_job_object_p f = reinterpret_cast<set_information_job_object_p>(::boost::winapi::get_proc_address(h, "SetInformationJobObject"));
129
130 return (*f)(hJob, JobObjectInfoClass, lpJobObjectInfo, cbJobObjectInfoLength);
131 }
132
133 constexpr static ::boost::winapi::DWORD_ JOB_OBJECT_LIMIT_BREAKAWAY_OK_ = 0x00000800;
134
135 }}}}}
136
137
138
139 #endif /* BOOST_PROCESS_DETAIL_WINDOWS_JOB_WORKAROUND_HPP_ */