170 if (PreviousProcess !=
NULL)
172 ASSERT(PreviousProcess->Job == Job);
176 Entry = PreviousProcess->JobLinks.Flink;
181 Entry = Job->ProcessListHead.Flink;
185 if (
Entry == &Job->ProcessListHead)
237 Candidate = PreviousProcess;
247 NextProcess = Candidate;
258 if (PreviousProcess !=
NULL)
468 Job->ActiveProcesses >= Job->ActiveProcessLimit)
471 if (Job->CompletionPort)
513 Job->TotalProcesses++;
514 Job->ActiveProcesses++;
516 if (Job->CompletionPort &&
Process->UniqueProcessId)
528 if (Job->UIRestrictionsClass != 0 &&
Process->Win32Process !=
NULL)
544 DPRINT1(
"Failed to apply the UI restrictions of job %p to process %p: 0x%lx\n",
588 ASSERT(Job->ActiveProcesses != 0);
590 Job->ActiveProcesses--;
594 return Job->ActiveProcesses == 0;
751 if (ActiveProcessZero)
864 if (SystemHandleCount > 1)
866 DPRINT1(
"PspJobClose called with unexpected SystemHandleCount: %lu\n",
978 AllowedFlags = IsExtendedLimit
983 if (ExtendedLimit->BasicLimitInformation.LimitFlags & ~AllowedFlags)
985 DPRINT1(
"Invalid LimitFlags specified: 0x%08X\n",
986 ExtendedLimit->BasicLimitInformation.LimitFlags & ~AllowedFlags);
993 DPRINT1(
"Invalid LimitFlags combination specified "
994 "(PRESERVE_JOB_TIME and JOB_TIME are mutually exclusive)\n");
1011 if ((ExtendedLimit->BasicLimitInformation.MaximumWorkingSetSize > 0 &&
1012 ExtendedLimit->BasicLimitInformation.MinimumWorkingSetSize <= 0)
1014 (ExtendedLimit->BasicLimitInformation.MinimumWorkingSetSize > 0 &&
1015 ExtendedLimit->BasicLimitInformation.MaximumWorkingSetSize <= 0)
1017 ExtendedLimit->BasicLimitInformation.MaximumWorkingSetSize <
1018 ExtendedLimit->BasicLimitInformation.MinimumWorkingSetSize)
1021 goto ExitFromBasicLimits;
1024 Job->MinimumWorkingSetSize = ExtendedLimit->BasicLimitInformation.MinimumWorkingSetSize;
1025 Job->MaximumWorkingSetSize = ExtendedLimit->BasicLimitInformation.MaximumWorkingSetSize;
1030 Job->PerProcessUserTimeLimit.QuadPart =
1031 ExtendedLimit->BasicLimitInformation.PerProcessUserTimeLimit.QuadPart;
1036 Job->PerJobUserTimeLimit.QuadPart =
1037 ExtendedLimit->BasicLimitInformation.PerJobUserTimeLimit.QuadPart;
1042 Job->ActiveProcessLimit = ExtendedLimit->BasicLimitInformation.ActiveProcessLimit;
1052 if (ExtendedLimit->BasicLimitInformation.Affinity !=
1056 goto ExitFromBasicLimits;
1059 Job->Affinity = ExtendedLimit->BasicLimitInformation.Affinity;
1068 goto ExitFromBasicLimits;
1079 Job->PriorityClass = ExtendedLimit->BasicLimitInformation.PriorityClass;
1084 goto ExitFromBasicLimits;
1093 goto ExitFromBasicLimits;
1106 Job->SchedulingClass = ExtendedLimit->BasicLimitInformation.SchedulingClass;
1111 goto ExitFromBasicLimits;
1116 Job->SchedulingClass = ExtendedLimit->BasicLimitInformation.SchedulingClass;
1129 Job->ProcessMemoryLimit = ExtendedLimit->ProcessMemoryLimit >>
PAGE_SHIFT;
1134 Job->JobMemoryLimit = ExtendedLimit->JobMemoryLimit >>
PAGE_SHIFT;
1139 Job->LimitFlags = ExtendedLimit->BasicLimitInformation.LimitFlags;
1234 if (!AssociateCpInfo->CompletionPort)
1260 Job->CompletionKey = AssociateCpInfo->CompletionKey;
1306 RtlZeroMemory(&BasicAndIo->BasicInfo,
sizeof(BasicAndIo->BasicInfo));
1312 BasicAndIo->BasicInfo.TotalUserTime.QuadPart = Job->TotalUserTime.QuadPart;
1313 BasicAndIo->BasicInfo.TotalKernelTime.QuadPart = Job->TotalKernelTime.QuadPart;
1314 BasicAndIo->BasicInfo.ThisPeriodTotalUserTime.QuadPart = Job->ThisPeriodTotalUserTime.QuadPart;
1315 BasicAndIo->BasicInfo.ThisPeriodTotalKernelTime.QuadPart = Job->ThisPeriodTotalKernelTime.QuadPart;
1316 BasicAndIo->BasicInfo.TotalPageFaultCount = Job->TotalPageFaultCount;
1317 BasicAndIo->BasicInfo.TotalProcesses = Job->TotalProcesses;
1318 BasicAndIo->BasicInfo.ActiveProcesses = Job->ActiveProcesses;
1319 BasicAndIo->BasicInfo.TotalTerminatedProcesses = Job->TotalTerminatedProcesses;
1322 BasicAndIo->IoInfo.ReadOperationCount = Job->ReadOperationCount;
1323 BasicAndIo->IoInfo.WriteOperationCount = Job->WriteOperationCount;
1324 BasicAndIo->IoInfo.OtherOperationCount = Job->OtherOperationCount;
1325 BasicAndIo->IoInfo.ReadTransferCount = Job->ReadTransferCount;
1326 BasicAndIo->IoInfo.WriteTransferCount = Job->WriteTransferCount;
1327 BasicAndIo->IoInfo.OtherTransferCount = Job->OtherTransferCount;
1330 for (NextEntry = Job->ProcessListHead.
Flink;
1331 NextEntry != &Job->ProcessListHead;
1332 NextEntry = NextEntry->
Flink)
1392 ExtendedLimit->BasicLimitInformation.LimitFlags = Job->LimitFlags;
1393 ExtendedLimit->BasicLimitInformation.MinimumWorkingSetSize = Job->MinimumWorkingSetSize;
1394 ExtendedLimit->BasicLimitInformation.MaximumWorkingSetSize = Job->MaximumWorkingSetSize;
1395 ExtendedLimit->BasicLimitInformation.ActiveProcessLimit = Job->ActiveProcessLimit;
1396 ExtendedLimit->BasicLimitInformation.PriorityClass = Job->PriorityClass;
1397 ExtendedLimit->BasicLimitInformation.SchedulingClass = Job->SchedulingClass;
1398 ExtendedLimit->BasicLimitInformation.Affinity = Job->Affinity;
1399 ExtendedLimit->BasicLimitInformation.PerProcessUserTimeLimit.QuadPart = Job->PerProcessUserTimeLimit.QuadPart;
1400 ExtendedLimit->BasicLimitInformation.PerJobUserTimeLimit.QuadPart = Job->PerJobUserTimeLimit.QuadPart;
1407 ExtendedLimit->ProcessMemoryLimit = Job->ProcessMemoryLimit <<
PAGE_SHIFT;
1408 ExtendedLimit->JobMemoryLimit = Job->JobMemoryLimit <<
PAGE_SHIFT;
1409 ExtendedLimit->PeakProcessMemoryUsed = Job->PeakProcessMemoryUsed <<
PAGE_SHIFT;
1410 ExtendedLimit->PeakJobMemoryUsed = Job->PeakJobMemoryUsed <<
PAGE_SHIFT;
1415 RtlZeroMemory(&ExtendedLimit->IoInfo,
sizeof(ExtendedLimit->IoInfo));
1538 ProcIdList->NumberOfAssignedProcesses = Job->ActiveProcesses;
1539 ProcIdList->NumberOfProcessIdsInList = 0;
1560 *ReturnRequiredLength = 0;
1606 ULONG UIRestrictionsClass
1694 if (Job->UIRestrictionsClass != UIRestrictionsClass)
1701 Job->UIRestrictionsClass = UIRestrictionsClass;
1772 DPRINT1(
"Failed to create job object, Status 0x%08lx\n",
Status);
2022 PEJOB JobObjectFromHandle;
2053 if (ProcessJob !=
NULL)
2057 if (JobHandle ==
NULL)
2069 (
PVOID *)&JobObjectFromHandle,
2074 if ((ProcessJob == JobObjectFromHandle))
2190 PVOID JobInfoBuffer;
2236 ASSERT(RequiredAlign == 1 ||
2237 RequiredAlign == 2 ||
2238 RequiredAlign == 4 ||
2239 RequiredAlign == 8 ||
2240 RequiredAlign == 16);
2245 if (JobInformation !=
NULL)
2247 ProbeForWrite(JobInformation, JobInformationLength, RequiredAlign);
2264 if (JobHandle !=
NULL)
2283 Job = CurrentProcess->
Job;
2295 switch (JobInformationClass)
2301 JobInfoBuffer = &BasicAndIo;
2310 JobInfoBuffer = &ExtendedLimit;
2317 JobInformationLength,
2318 &ReturnRequiredLength);
2327 JobInfoBuffer = &UiRestrictions;
2334 DPRINT1(
"Class %d not implemented\n", JobInformationClass);
2339 DPRINT1(
"Invalid class %d\n", JobInformationClass);
2440 ASSERT(RequiredAlign == 1 ||
2441 RequiredAlign == 2 ||
2442 RequiredAlign == 4 ||
2443 RequiredAlign == 8 ||
2444 RequiredAlign == 16);
2449 if (JobInformationLength != 0)
2451 ProbeForRead(JobInformation, JobInformationLength, RequiredAlign);
2497 switch (JobInformationClass)
2508 if (IsExtendedLimit)
2539 sizeof(AssociateCpInfo));
2575 DPRINT1(
"Class %d not implemented\n", JobInformationClass);
2580 DPRINT1(
"Invalid class %d\n", JobInformationClass);
#define STATUS_PRIVILEGE_NOT_HELD
_In_ PVOID _In_ ULONG _Out_ PVOID _In_ ULONG _Inout_ PULONG ReturnLength
_In_ PVOID _In_ ULONG _Out_ PVOID _In_ ULONG _Inout_ PULONG _In_ KPROCESSOR_MODE PreviousMode
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
#define STATUS_NOT_IMPLEMENTED
_In_ HANDLE _In_ CONST PDXGKMDT_OPM_GET_INFO_PARAMETERS Parameters
_In_ ULONG _In_ ULONG _In_opt_ DXGKCB_MIRACAST_SEND_MESSAGE_CALLBACK Callback
_In_ D3DDDI_VIDEO_PRESENT_TARGET_ID _In_ ULONG _In_ ULONG Flags
#define NT_SUCCESS(StatCode)
static const WCHAR Message[]
NTSTATUS NTAPI IoCompletion(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Ctx)
#define RemoveEntryList(Entry)
#define InsertTailList(ListHead, Entry)
#define IsListEmpty(ListHead)
#define KeInitializeEvent(pEvt, foo, foo2)
#define KeSetEvent(pEvt, foo, foo2)
#define ExAcquireResourceExclusiveLite(res, wait)
#define InitializeListHead(ListHead)
#define ExAcquireResourceSharedLite(res, wait)
#define ExReleaseRundownProtection
#define ExGetPreviousMode
#define InterlockedExchangeUL(Target, Value)
#define ExAcquireRundownProtection
VOID NTAPI ProbeForRead(IN CONST VOID *Address, IN SIZE_T Length, IN ULONG Alignment)
VOID NTAPI ProbeForWrite(IN PVOID Address, IN SIZE_T Length, IN ULONG Alignment)
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
VOID FASTCALL KeReleaseGuardedMutexUnsafe(IN OUT PKGUARDED_MUTEX GuardedMutex)
VOID FASTCALL KeInitializeGuardedMutex(OUT PKGUARDED_MUTEX GuardedMutex)
VOID FASTCALL KeAcquireGuardedMutexUnsafe(IN OUT PKGUARDED_MUTEX GuardedMutex)
VOID FASTCALL ExAcquireFastMutex(IN PFAST_MUTEX FastMutex)
VOID FASTCALL ExReleaseFastMutex(IN PFAST_MUTEX FastMutex)
#define KeGetCurrentThread
#define JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO
#define JOB_OBJECT_UILIMIT_ALL
#define PROCESS_TERMINATE
#define JOB_OBJECT_SET_SECURITY_ATTRIBUTES
#define PROCESS_QUERY_INFORMATION
#define JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME
#define PROCESS_PRIORITY_CLASS_INVALID
#define JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT
struct _JOBOBJECT_BASIC_PROCESS_ID_LIST JOBOBJECT_BASIC_PROCESS_ID_LIST
#define JOB_OBJECT_LIMIT_JOB_MEMORY
@ PsW32JobCalloutTerminate
@ PsW32JobCalloutAddProcess
@ PsW32JobCalloutSetInformation
#define JOB_OBJECT_LIMIT_WORKINGSET
enum _PSW32JOBCALLOUTTYPE PSW32JOBCALLOUTTYPE
#define PROCESS_PRIORITY_CLASS_ABOVE_NORMAL
enum _JOBOBJECTINFOCLASS JOBOBJECTINFOCLASS
#define JOB_OBJECT_LIMIT_PROCESS_MEMORY
struct _JOBOBJECT_BASIC_LIMIT_INFORMATION * PJOBOBJECT_BASIC_LIMIT_INFORMATION
#define JOB_OBJECT_LIMIT_SCHEDULING_CLASS
#define JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
struct _JOBOBJECT_SECURITY_LIMIT_INFORMATION JOBOBJECT_SECURITY_LIMIT_INFORMATION
#define JOB_OBJECT_LIMIT_PRIORITY_CLASS
#define JOB_OBJECT_TERMINATE
#define JOB_OBJECT_LIMIT_JOB_TIME
@ JobObjectAssociateCompletionPortInformation
@ JobObjectBasicLimitInformation
@ JobObjectBasicAndIoAccountingInformation
@ JobObjectBasicAccountingInformation
@ JobObjectSecurityLimitInformation
@ JobObjectExtendedLimitInformation
@ JobObjectEndOfJobTimeInformation
@ JobObjectBasicUIRestrictions
@ JobObjectBasicProcessIdList
@ JobObjectJobSetInformation
struct _JOBOBJECT_EXTENDED_LIMIT_INFORMATION JOBOBJECT_EXTENDED_LIMIT_INFORMATION
struct _JOBOBJECT_BASIC_ACCOUNTING_INFORMATION JOBOBJECT_BASIC_ACCOUNTING_INFORMATION
#define JOB_OBJECT_LIMIT_ACTIVE_PROCESS
#define JOB_OBJECT_ASSIGN_PROCESS
struct _JOBOBJECT_EXTENDED_LIMIT_INFORMATION * PJOBOBJECT_EXTENDED_LIMIT_INFORMATION
#define JOB_OBJECT_LIMIT_PROCESS_TIME
#define JOB_OBJECT_SET_ATTRIBUTES
#define JOB_OBJECT_MSG_NEW_PROCESS
#define JOB_OBJECT_LIMIT_AFFINITY
struct _JOBOBJECT_BASIC_UI_RESTRICTIONS * PJOBOBJECT_BASIC_UI_RESTRICTIONS
#define PROCESS_SET_QUOTA
struct _JOBOBJECT_ASSOCIATE_COMPLETION_PORT JOBOBJECT_ASSOCIATE_COMPLETION_PORT
#define EXCEPTION_EXECUTE_HANDLER
#define InterlockedCompareExchangePointer
#define KeEnterGuardedRegionThread(_Thread)
#define KeLeaveGuardedRegionThread(_Thread)
#define IO_COMPLETION_MODIFY_STATE
_In_ HANDLE ProcessHandle
#define _In_reads_bytes_(s)
#define _Out_writes_bytes_(s)
#define THREAD_ALL_ACCESS
#define NtCurrentProcess()
#define STANDARD_RIGHTS_READ
struct _EPROCESS * PEPROCESS
#define STANDARD_RIGHTS_ALL
#define STANDARD_RIGHTS_WRITE
#define STANDARD_RIGHTS_EXECUTE
#define UNREFERENCED_PARAMETER(P)
VOID FASTCALL ExReleaseResourceLite(IN PERESOURCE Resource)
BOOLEAN NTAPI ExIsResourceAcquiredExclusiveLite(IN PERESOURCE Resource)
ULONG NTAPI ExIsResourceAcquiredSharedLite(IN PERESOURCE Resource)
PVOID NTAPI ExEnterCriticalRegionAndAcquireResourceShared(IN PERESOURCE Resource)
PVOID NTAPI ExEnterCriticalRegionAndAcquireResourceExclusive(IN PERESOURCE Resource)
VOID FASTCALL ExReleaseResourceAndLeaveCriticalRegion(IN PERESOURCE Resource)
POBJECT_TYPE IoCompletionType
NTSTATUS NTAPI IoSetIoCompletion(IN PVOID IoCompletion, IN PVOID KeyContext, IN PVOID ApcContext, IN NTSTATUS IoStatus, IN ULONG_PTR IoStatusInformation, IN BOOLEAN Quota)
KAFFINITY KeActiveProcessors
VOID NTAPI KeQueryValuesProcess(IN PKPROCESS Process, PPROCESS_VALUES Values)
BOOLEAN NTAPI SeCheckPrivilegedObject(_In_ LUID PrivilegeValue, _In_ HANDLE ObjectHandle, _In_ ACCESS_MASK DesiredAccess, _In_ KPROCESSOR_MODE PreviousMode)
Checks a privileged object if such object has the specific privilege submitted by the caller.
const LUID SeIncreaseBasePriorityPrivilege
BOOLEAN NTAPI KeAreAllApcsDisabled(VOID)
static NTSTATUS NTAPI PspQueryJobProcessIdListCallback(_In_ PEPROCESS Process, _Inout_ PVOID Context)
NTSTATUS NTAPI NtSetInformationJobObject(_In_ HANDLE JobHandle, _In_ JOBOBJECTINFOCLASS JobInformationClass, _In_reads_bytes_(JobInformationLength) PVOID JobInformation, _In_ ULONG JobInformationLength)
NTSTATUS NTAPI NtTerminateJobObject(_In_ HANDLE JobHandle, _In_ NTSTATUS ExitStatus)
static NTSTATUS PspAssociateCompletionPortWithJob(_In_ PEJOB Job, _In_ PJOBOBJECT_ASSOCIATE_COMPLETION_PORT AssociateCpInfo)
static NTSTATUS PspSetJobLimitsBasicOrExtended(_In_ PEJOB Job, _In_ PJOBOBJECT_EXTENDED_LIMIT_INFORMATION ExtendedLimit, _In_ BOOLEAN IsExtendedLimit)
NTSTATUS NTAPI PspInvokeW32JobCallout(_In_ PEJOB Job, _In_ PSW32JOBCALLOUTTYPE CalloutType, _In_opt_ PVOID Data)
NTSTATUS NTAPI NtQueryInformationJobObject(_In_opt_ HANDLE JobHandle, _In_ JOBOBJECTINFOCLASS JobInformationClass, _Out_writes_bytes_(JobInformationLength) PVOID JobInformation, _In_ ULONG JobInformationLength, _Out_opt_ PULONG ReturnLength)
static NTSTATUS NTAPI PspAssociateCompletionPortCallback(_In_ PEPROCESS Process, _In_ PVOID Context)
NTSTATUS NTAPI PspSendJobMessageLocked(_In_ PEJOB Job, _In_ ULONG Message, _In_opt_ PVOID CompletionValue, _In_ BOOLEAN Quota)
NTSTATUS NTAPI NtIsProcessInJob(_In_ HANDLE ProcessHandle, _In_opt_ HANDLE JobHandle)
static PEPROCESS PspGetNextProcessInJobLocked(_In_ PEJOB Job, _In_opt_ PEPROCESS PreviousProcess)
ULONG NTAPI PsGetJobUIRestrictionsClass(PEJOB Job)
static NTSTATUS PspQueryJobProcessIdList(_In_ PEJOB Job, _Out_writes_bytes_(JobInformationLength) PJOBOBJECT_BASIC_PROCESS_ID_LIST ProcIdList, _In_ ULONG JobInformationLength, _Out_ PULONG ReturnRequiredLength)
static PEPROCESS PspGetNextProcessInJob(_In_ PEJOB Job, _In_opt_ PEPROCESS PreviousProcess)
NTSTATUS NTAPI PspAssignProcessToJob(_In_ PEPROCESS Process, _In_ PEJOB Job)
VOID NTAPI PspInitializeJobStructures(VOID)
static NTSTATUS NTAPI PspTerminateProcessCallback(_In_ PEPROCESS Process, _In_ PVOID Context)
VOID NTAPI PspCloseJob(_In_ PEPROCESS Process, _In_ PVOID ObjectBody, _In_ ACCESS_MASK GrantedAccess, _In_ ULONG_PTR ProcessHandleCount, _In_ ULONG_PTR SystemHandleCount)
NTSTATUS NTAPI NtCreateJobObject(_Out_ PHANDLE JobHandle, _In_ ACCESS_MASK DesiredAccess, _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes)
static NTSTATUS PspQueryJobBasicAccountingInfo(_In_ PEJOB Job, _Out_ PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION BasicAndIo)
struct PSP_TERMINATE_PROCESS_CONTEXT * PPSP_TERMINATE_PROCESS_CONTEXT
VOID NTAPI PspExitProcessFromJob(_In_ PEPROCESS Process)
PVOID NTAPI PsGetJobLock(PEJOB Job)
struct PSP_QUERY_JOB_PROCESS_ID_CONTEXT * PPSP_QUERY_JOB_PROCESS_ID_CONTEXT
NTSTATUS NTAPI PspTerminateJobObject(_In_ PEJOB Job, _In_ NTSTATUS ExitStatus)
static NTSTATUS PspQueryJobLimitInformation(_In_ PEJOB Job, _In_ BOOLEAN Extended, _Out_ PJOBOBJECT_EXTENDED_LIMIT_INFORMATION ExtendedLimit)
VOID NTAPI PspDeleteJob(_In_ PVOID ObjectBody)
BOOLEAN PspUseJobSchedulingClasses
ULONG NTAPI PsGetJobSessionId(PEJOB Job)
static FAST_MUTEX PsJobListLock
static NTSTATUS PspEnumerateProcessesInJobLocked(_In_ PEJOB Job, _In_ PJOB_ENUMERATOR_CALLBACK Callback, _In_opt_ PVOID Context)
static BOOLEAN PspDeactivateProcessFromJobLocked(_In_ PEJOB Job, _In_ PEPROCESS Process)
CHAR PspJobSchedulingClasses[PSP_JOB_SCHEDULING_CLASSES]
NTSTATUS NTAPI NtOpenJobObject(_Out_ PHANDLE JobHandle, _In_ ACCESS_MASK DesiredAccess, _In_ POBJECT_ATTRIBUTES ObjectAttributes)
VOID NTAPI PspRemoveProcessFromJob(_In_ PEPROCESS Process)
NTSTATUS NTAPI NtAssignProcessToJobObject(_In_ HANDLE JobHandle, _In_ HANDLE ProcessHandle)
static NTSTATUS PspSetJobUIRestrictions(_In_ PEJOB Job, _In_ ULONG UIRestrictionsClass)
GENERIC_MAPPING PspJobMapping
NTSTATUS NTAPI NtCreateJobSet(IN ULONG NumJob, IN PJOB_SET_ARRAY UserJobSet, IN ULONG Flags)
VOID NTAPI PsSetJobUIRestrictionsClass(PEJOB Job, ULONG UIRestrictionsClass)
ULONG PspJobInfoLengths[]
NTSTATUS NTAPI PspEnumerateProcessesInJob(_In_ PEJOB Job, _In_ PJOB_ENUMERATOR_CALLBACK Callback, _In_opt_ PVOID Context)
POBJECT_TYPE PsProcessType
ULONG NTAPI PsGetProcessSessionId(IN PEPROCESS Process)
_Out_ EXECUTION_STATE * PreviousFlags
#define STATUS_PROCESS_IN_JOB
#define STATUS_QUOTA_EXCEEDED
#define STATUS_PROCESS_NOT_IN_JOB
#define STATUS_PROCESS_IS_TERMINATING
#define STATUS_INVALID_INFO_CLASS
BOOLEAN FASTCALL ObReferenceObjectSafe(IN PVOID Object)
NTSTATUS NTAPI ObInsertObject(IN PVOID Object, IN PACCESS_STATE AccessState OPTIONAL, IN ACCESS_MASK DesiredAccess, IN ULONG ObjectPointerBias, OUT PVOID *NewObject OPTIONAL, OUT PHANDLE Handle)
NTSTATUS NTAPI ObOpenObjectByName(IN POBJECT_ATTRIBUTES ObjectAttributes, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, IN PACCESS_STATE PassedAccessState, IN ACCESS_MASK DesiredAccess, IN OUT PVOID ParseContext, OUT PHANDLE Handle)
NTSTATUS NTAPI ObCreateObject(IN KPROCESSOR_MODE ProbeMode OPTIONAL, IN POBJECT_TYPE Type, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN KPROCESSOR_MODE AccessMode, IN OUT PVOID ParseContext OPTIONAL, IN ULONG ObjectSize, IN ULONG PagedPoolCharge OPTIONAL, IN ULONG NonPagedPoolCharge OPTIONAL, OUT PVOID *Object)
NTSTATUS NTAPI ObReferenceObjectByHandle(IN HANDLE Handle, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, OUT PVOID *Object, OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL)
#define PSP_JOB_BASIC_LIMIT_VALID_FLAGS
NTSTATUS NTAPI PsTerminateProcess(IN PEPROCESS Process, IN NTSTATUS ExitStatus)
#define PSP_JOB_CLOSE_DONE
NTSTATUS(NTAPI * PJOB_ENUMERATOR_CALLBACK)(_In_ PEPROCESS Process, _In_opt_ PVOID Context)
#define PSP_JOB_SCHEDULING_CLASSES
#define PSP_JOB_NOT_REALLY_ACTIVE
#define PSP_JOB_SCHEDULING_CLASS_DEFAULT
#define PSP_JOB_EXTENDED_LIMIT_VALID_FLAGS
#define PSP_JOB_ACCOUNTING_FOLDED
#define PSP_JOB_TERMINATING
PKWIN32_JOB_CALLOUT PspW32JobCallout
#define _SEH2_GetExceptionCode()
#define _SEH2_EXCEPT(...)
#define _SEH2_YIELD(__stmt)
#define ProbeForWriteHandle(Ptr)
#define ProbeForWriteUlong(Ptr)
#define STATUS_BUFFER_OVERFLOW
PJOBOBJECT_BASIC_PROCESS_ID_LIST ProcessIdList
LIST_ENTRY ProcessListHead
ULONG UIRestrictionsClass
EX_PUSH_LOCK MemoryLimitsLock
ULONGLONG ReadOperationCount
ULONGLONG WriteTransferCount
ULONGLONG WriteOperationCount
ULONGLONG ReadTransferCount
ULONGLONG OtherOperationCount
ULONGLONG OtherTransferCount
ULONG NumberOfProcessIdsInList
ULONG NumberOfAssignedProcesses
ULONG UIRestrictionsClass
struct _LIST_ENTRY * Flink
LARGE_INTEGER TotalUserTime
LARGE_INTEGER TotalKernelTime
#define FIELD_OFFSET(t, f)
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define CONTAINING_RECORD(address, type, field)
#define STATUS_ACCESS_DENIED
#define STATUS_INVALID_PARAMETER
#define STATUS_INFO_LENGTH_MISMATCH
_Must_inspect_result_ _In_ WDFDEVICE _In_ ULONG _In_ ACCESS_MASK DesiredAccess
_In_ ULONG _Out_opt_ PULONG RequiredLength
#define ExInitializeResource
FORCEINLINE VOID ExInitializeFastMutex(_Out_ PFAST_MUTEX FastMutex)
#define ObDereferenceObject
#define ObReferenceObject
#define PsGetCurrentProcess
_In_ PSECURITY_SUBJECT_CONTEXT _In_ BOOLEAN _In_ ACCESS_MASK _In_ ACCESS_MASK _Outptr_opt_ PPRIVILEGE_SET _In_ PGENERIC_MAPPING _In_ KPROCESSOR_MODE _Out_ PACCESS_MASK GrantedAccess