ReactOS 0.4.17-dev-769-g1500a35
job.c File Reference
#include <k32.h>
#include <winspool.h>
#include <debug.h>
Include dependency graph for job.c:

Go to the source code of this file.

Macros

#define NDEBUG
 

Functions

HANDLE WINAPI CreateJobObjectA (_In_ LPSECURITY_ATTRIBUTES lpJobAttributes, _In_ LPCSTR lpName)
 
HANDLE WINAPI CreateJobObjectW (_In_ LPSECURITY_ATTRIBUTES lpJobAttributes, _In_ LPCWSTR lpName)
 
HANDLE WINAPI OpenJobObjectW (_In_ DWORD dwDesiredAccess, _In_ BOOL bInheritHandle, _In_ LPCWSTR lpName)
 
HANDLE WINAPI OpenJobObjectA (_In_ DWORD dwDesiredAccess, _In_ BOOL bInheritHandle, _In_ LPCSTR lpName)
 
BOOL WINAPI IsProcessInJob (_In_ HANDLE ProcessHandle, _In_opt_ HANDLE JobHandle, _Out_ PBOOL Result)
 
BOOL WINAPI AssignProcessToJobObject (_In_ HANDLE hJob, _In_ HANDLE hProcess)
 
BOOL WINAPI QueryInformationJobObject (_In_opt_ HANDLE hJob, _In_ JOBOBJECTINFOCLASS JobObjectInformationClass, _Out_writes_bytes_to_(cbJobObjectInformationLength, *lpReturnLength) LPVOID lpJobObjectInformation, _In_ DWORD cbJobObjectInformationLength, _Out_opt_ LPDWORD lpReturnLength)
 
BOOL WINAPI SetInformationJobObject (_In_ HANDLE hJob, _In_ JOBOBJECTINFOCLASS JobObjectInformationClass, _In_reads_bytes_(cbJobObjectInformationLength) LPVOID lpJobObjectInformation, _In_ DWORD cbJobObjectInformationLength)
 
BOOL WINAPI TerminateJobObject (_In_ HANDLE hJob, _In_ UINT uExitCode)
 
BOOL WINAPI CreateJobSet (IN ULONG NumJob, IN PJOB_SET_ARRAY UserJobSet, IN ULONG Flags)
 

Macro Definition Documentation

◆ NDEBUG

#define NDEBUG

Definition at line 16 of file job.c.

Function Documentation

◆ AssignProcessToJobObject()

BOOL WINAPI AssignProcessToJobObject ( _In_ HANDLE  hJob,
_In_ HANDLE  hProcess 
)

Definition at line 104 of file job.c.

107{
109
111 if (!NT_SUCCESS(Status))
112 {
114 return FALSE;
115 }
116
117 return TRUE;
118}
LONG NTSTATUS
Definition: precomp.h:26
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
Status
Definition: gdiplustypes.h:24
_In_ BOOL _In_ HANDLE hProcess
Definition: mapping.h:71
NTSTATUS NTAPI NtAssignProcessToJobObject(_In_ HANDLE JobHandle, _In_ HANDLE ProcessHandle)
Definition: job.c:1928
DWORD BaseSetLastNTError(IN NTSTATUS Status)
Definition: reactos.cpp:167

Referenced by RunProcessInJob().

◆ CreateJobObjectA()

HANDLE WINAPI CreateJobObjectA ( _In_ LPSECURITY_ATTRIBUTES  lpJobAttributes,
_In_ LPCSTR  lpName 
)

Definition at line 26 of file job.c.

29{
30 /* Call the W(ide) function */
31 ConvertWin32AnsiObjectApiToUnicodeApi(JobObject, lpName, lpJobAttributes);
32}
#define ConvertWin32AnsiObjectApiToUnicodeApi(obj, name,...)
Definition: base_x.h:54
_In_ LPCSTR lpName
Definition: winbase.h:2519

◆ CreateJobObjectW()

HANDLE WINAPI CreateJobObjectW ( _In_ LPSECURITY_ATTRIBUTES  lpJobAttributes,
_In_ LPCWSTR  lpName 
)

Definition at line 39 of file job.c.

42{
43 /* Create the NT object */
44 CreateNtObjectFromWin32Api(JobObject, JobObject, JOB_OBJECT_ALL_ACCESS, lpJobAttributes, lpName);
45}
#define CreateNtObjectFromWin32Api(obj, ntobj, access, sec, name,...)
Definition: base_x.h:135
#define JOB_OBJECT_ALL_ACCESS
Definition: pstypes.h:201

Referenced by CreateRestrictedJob(), test_Access(), test_InvalidParameters(), test_RoundTrip(), and test_SandboxPolicies().

◆ CreateJobSet()

BOOL WINAPI CreateJobSet ( IN ULONG  NumJob,
IN PJOB_SET_ARRAY  UserJobSet,
IN ULONG  Flags 
)

Definition at line 348 of file job.c.

351{
353
354 Status = NtCreateJobSet(NumJob, UserJobSet, Flags);
355 if (!NT_SUCCESS(Status))
356 {
358 return FALSE;
359 }
360
361 return TRUE;
362}
_In_ D3DDDI_VIDEO_PRESENT_TARGET_ID _In_ ULONG _In_ ULONG Flags
Definition: dispmprt.h:245
NTSTATUS NTAPI NtCreateJobSet(IN ULONG NumJob, IN PJOB_SET_ARRAY UserJobSet, IN ULONG Flags)
Definition: job.c:1834

◆ IsProcessInJob()

BOOL WINAPI IsProcessInJob ( _In_ HANDLE  ProcessHandle,
_In_opt_ HANDLE  JobHandle,
_Out_ PBOOL  Result 
)

Definition at line 81 of file job.c.

85{
87
89 if (NT_SUCCESS(Status))
90 {
92 return TRUE;
93 }
94
96 return FALSE;
97}
_In_ HANDLE ProcessHandle
Definition: mmfuncs.h:407
NTSTATUS NTAPI NtIsProcessInJob(_In_ HANDLE ProcessHandle, _In_opt_ HANDLE JobHandle)
Definition: job.c:2014
#define STATUS_PROCESS_IN_JOB
Definition: ntstatus.h:161
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
Definition: wsk.h:409

◆ OpenJobObjectA()

HANDLE WINAPI OpenJobObjectA ( _In_ DWORD  dwDesiredAccess,
_In_ BOOL  bInheritHandle,
_In_ LPCSTR  lpName 
)

Definition at line 67 of file job.c.

71{
72 /* Call the W(ide) function */
74}
#define ConvertOpenWin32AnsiObjectApiToUnicodeApi(obj, acc, inh, name)
Definition: base_x.h:86
static BOOL bInheritHandle
Definition: pipe.c:110

◆ OpenJobObjectW()

HANDLE WINAPI OpenJobObjectW ( _In_ DWORD  dwDesiredAccess,
_In_ BOOL  bInheritHandle,
_In_ LPCWSTR  lpName 
)

Definition at line 52 of file job.c.

56{
57 /* Open the NT object */
58 OpenNtObjectFromWin32Api(JobObject, dwDesiredAccess, bInheritHandle, lpName);
59}
#define OpenNtObjectFromWin32Api(ntobj, acc, inh, name)
Definition: base_x.h:143

◆ QueryInformationJobObject()

BOOL WINAPI QueryInformationJobObject ( _In_opt_ HANDLE  hJob,
_In_ JOBOBJECTINFOCLASS  JobObjectInformationClass,
_Out_writes_bytes_to_(cbJobObjectInformationLength, *lpReturnLength) LPVOID  lpJobObjectInformation,
_In_ DWORD  cbJobObjectInformationLength,
_Out_opt_ LPDWORD  lpReturnLength 
)

Definition at line 125 of file job.c.

132{
134 PVOID JobInfo;
136 ULONG ExpectedSize;
137
138 if (JobObjectInformationClass == JobObjectBasicLimitInformation)
139 {
140 ExpectedSize = sizeof(JOBOBJECT_BASIC_LIMIT_INFORMATION);
141 JobInfo = &LocalInfo;
142 }
143 else if (JobObjectInformationClass == JobObjectExtendedLimitInformation)
144 {
145 ExpectedSize = sizeof(JOBOBJECT_EXTENDED_LIMIT_INFORMATION);
146 JobInfo = &LocalInfo;
147 }
148 else
149 {
150 ExpectedSize = cbJobObjectInformationLength;
151 JobInfo = lpJobObjectInformation;
152 }
153
154 if (cbJobObjectInformationLength != ExpectedSize)
155 {
157 return FALSE;
158 }
159
161 JobObjectInformationClass,
162 JobInfo,
163 ExpectedSize,
164 lpReturnLength);
165 if (NT_SUCCESS(Status))
166 {
167 if (JobInfo != &LocalInfo) return TRUE;
168
169 switch (LocalInfo.BasicLimitInformation.PriorityClass)
170 {
174 break;
175
179 break;
180
184 break;
185
189 break;
190
194 break;
195
199 break;
200
201 default:
204 break;
205 }
206
207 RtlCopyMemory(lpJobObjectInformation, &LocalInfo, ExpectedSize);
208 return TRUE;
209 }
210
212 return FALSE;
213}
#define PROCESS_PRIORITY_CLASS_IDLE
Definition: pstypes.h:103
#define PROCESS_PRIORITY_CLASS_NORMAL
Definition: pstypes.h:104
#define PROCESS_PRIORITY_CLASS_HIGH
Definition: pstypes.h:105
#define PROCESS_PRIORITY_CLASS_ABOVE_NORMAL
Definition: pstypes.h:108
@ JobObjectBasicLimitInformation
Definition: pstypes.h:493
@ JobObjectExtendedLimitInformation
Definition: pstypes.h:500
struct _JOBOBJECT_EXTENDED_LIMIT_INFORMATION JOBOBJECT_EXTENDED_LIMIT_INFORMATION
#define PROCESS_PRIORITY_CLASS_BELOW_NORMAL
Definition: pstypes.h:107
#define PROCESS_PRIORITY_CLASS_REALTIME
Definition: pstypes.h:106
struct _JOBOBJECT_BASIC_LIMIT_INFORMATION JOBOBJECT_BASIC_LIMIT_INFORMATION
NTSTATUS NTAPI NtQueryInformationJobObject(_In_opt_ HANDLE JobHandle, _In_ JOBOBJECTINFOCLASS JobInformationClass, _Out_writes_bytes_(JobInformationLength) PVOID JobInformation, _In_ ULONG JobInformationLength, _Out_opt_ PULONG ReturnLength)
Definition: job.c:2179
JOBOBJECT_BASIC_LIMIT_INFORMATION BasicLimitInformation
Definition: pstypes.h:1741
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
uint32_t ULONG
Definition: typedefs.h:59
#define STATUS_INFO_LENGTH_MISMATCH
Definition: udferr_usr.h:133
#define NORMAL_PRIORITY_CLASS
Definition: winbase.h:186
#define REALTIME_PRIORITY_CLASS
Definition: winbase.h:189
#define BELOW_NORMAL_PRIORITY_CLASS
Definition: winbase.h:195
#define HIGH_PRIORITY_CLASS
Definition: winbase.h:188
#define IDLE_PRIORITY_CLASS
Definition: winbase.h:187
#define ABOVE_NORMAL_PRIORITY_CLASS
Definition: winbase.h:196

Referenced by test_Access(), test_InvalidParameters(), test_QueryInformationJobObject(), test_RoundTrip(), and test_SandboxPolicies().

◆ SetInformationJobObject()

BOOL WINAPI SetInformationJobObject ( _In_ HANDLE  hJob,
_In_ JOBOBJECTINFOCLASS  JobObjectInformationClass,
_In_reads_bytes_(cbJobObjectInformationLength) LPVOID  lpJobObjectInformation,
_In_ DWORD  cbJobObjectInformationLength 
)

Definition at line 220 of file job.c.

225{
227 PVOID JobInfo;
229 ULONG ExpectedSize;
230 PVOID State = NULL;
232
233 if (JobObjectInformationClass == JobObjectBasicLimitInformation)
234 {
235 ExpectedSize = sizeof(JOBOBJECT_BASIC_LIMIT_INFORMATION);
236 JobInfo = &LocalInfo;
237 }
238 else if (JobObjectInformationClass == JobObjectExtendedLimitInformation)
239 {
240 ExpectedSize = sizeof(JOBOBJECT_EXTENDED_LIMIT_INFORMATION);
241 JobInfo = &LocalInfo;
242 }
243 else
244 {
245 ExpectedSize = cbJobObjectInformationLength;
246 JobInfo = lpJobObjectInformation;
247 }
248
249 if (cbJobObjectInformationLength != ExpectedSize)
250 {
252 return FALSE;
253 }
254
255 if (JobInfo == &LocalInfo)
256 {
257 RtlCopyMemory(&LocalInfo, lpJobObjectInformation, ExpectedSize);
258
259 if (LocalInfo.BasicLimitInformation.LimitFlags &
261 {
262 switch (LocalInfo.BasicLimitInformation.PriorityClass)
263 {
267 break;
268
272 break;
273
277 break;
278
282 break;
283
287 break;
288
292 break;
293
294 default:
297 break;
298 }
299 }
300
301 if (LocalInfo.BasicLimitInformation.LimitFlags &
303 {
305 }
306 }
307
309 JobObjectInformationClass,
310 JobInfo,
311 ExpectedSize);
312 if (NT_SUCCESS(Status))
313 {
315 return TRUE;
316 }
317
319 return FALSE;
320}
#define NULL
Definition: types.h:112
#define JOB_OBJECT_LIMIT_WORKINGSET
Definition: pstypes.h:208
#define JOB_OBJECT_LIMIT_PRIORITY_CLASS
Definition: pstypes.h:213
#define SE_INC_BASE_PRIORITY_PRIVILEGE
Definition: security.c:568
NTSYSAPI NTSTATUS NTAPI RtlAcquirePrivilege(_In_ PULONG Privilege, _In_ ULONG NumPriv, _In_ ULONG Flags, _Out_ PVOID *ReturnedState)
NTSYSAPI VOID NTAPI RtlReleasePrivilege(_In_ PVOID ReturnedState)
NTSTATUS NTAPI NtSetInformationJobObject(_In_ HANDLE JobHandle, _In_ JOBOBJECTINFOCLASS JobInformationClass, _In_reads_bytes_(JobInformationLength) PVOID JobInformation, _In_ ULONG JobInformationLength)
Definition: job.c:2406
BOOL Privilege(LPTSTR pszPrivilege, BOOL bEnable)
Definition: user_lib.cpp:531

Referenced by CreateRestrictedJob(), RunProcessInJob(), SetRestrictions(), test_InvalidParameters(), and test_SandboxPolicies().

◆ TerminateJobObject()

BOOL WINAPI TerminateJobObject ( _In_ HANDLE  hJob,
_In_ UINT  uExitCode 
)

Definition at line 327 of file job.c.

330{
332
333 Status = NtTerminateJobObject(hJob, uExitCode);
334 if (!NT_SUCCESS(Status))
335 {
337 return FALSE;
338 }
339
340 return TRUE;
341}
NTSTATUS NTAPI NtTerminateJobObject(_In_ HANDLE JobHandle, _In_ NTSTATUS ExitStatus)
Definition: job.c:2118