2 * PROJECT: ReactOS Kernel
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: ntoskrnl/include/ps.h
5 * PURPOSE: Internal header for the Process Manager
6 * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
10 // Define this if you want debugging support
12 #define _PS_DEBUG_ 0x00
15 // These define the Debug Masks Supported
17 #define PS_THREAD_DEBUG 0x01
18 #define PS_PROCESS_DEBUG 0x02
19 #define PS_SECURITY_DEBUG 0x04
20 #define PS_JOB_DEBUG 0x08
21 #define PS_NOTIFICATIONS_DEBUG 0x10
22 #define PS_WIN32K_DEBUG 0x20
23 #define PS_STATE_DEBUG 0x40
24 #define PS_QUOTA_DEBUG 0x80
25 #define PS_KILL_DEBUG 0x100
26 #define PS_REF_DEBUG 0x200
29 // Debug/Tracing support
32 #ifdef NEW_DEBUG_SYSTEM_IMPLEMENTED // enable when Debug Filters are implemented
33 #define PSTRACE(x, ...) \
35 DbgPrintEx("%s [%.16s] - ", \
37 PsGetCurrentProcess()->ImageFileName); \
38 DbgPrintEx(__VA_ARGS__); \
41 #define PSTRACE(x, ...) \
42 if (x & PspTraceLevel) \
44 DbgPrint("%s [%.16s] - ", \
46 PsGetCurrentProcess()->ImageFileName); \
47 DbgPrint(__VA_ARGS__); \
50 #define PSREFTRACE(x) \
51 PSTRACE(PS_REF_DEBUG, \
52 "Pointer Count [%p] @%d: %lx\n", \
55 OBJECT_TO_OBJECT_HEADER(x)->PointerCount)
57 #define PSTRACE(x, ...) DPRINT(__VA_ARGS__)
62 // Maximum Count of Notification Routines
64 #define PSP_MAX_CREATE_THREAD_NOTIFY 8
65 #define PSP_MAX_LOAD_IMAGE_NOTIFY 8
66 #define PSP_MAX_CREATE_PROCESS_NOTIFY 8
69 // Maximum Job Scheduling Classes
71 #define PSP_JOB_SCHEDULING_CLASSES 10
74 // Thread "Set/Get Context" Context Structure
76 typedef struct _GET_SET_CTX_CONTEXT
82 } GET_SET_CTX_CONTEXT
, *PGET_SET_CTX_CONTEXT
;
85 // Initialization Functions
89 PspShutdownProcessManager(
96 IN PLOADER_PARAMETER_BLOCK LoaderBlock
104 PsGetNextProcessThread(
105 IN PEPROCESS Process
,
106 IN PETHREAD Thread OPTIONAL
112 IN PEPROCESS OldProcess OPTIONAL
118 IN PEPROCESS Process
,
120 IN BOOLEAN UseLargePages
131 PspGetSystemDllEntryPoints(
137 PsChangeQuantumTable(
138 IN BOOLEAN Immediate
,
139 IN ULONG PrioritySeparation
144 PsReferenceProcessFilePointer(
145 IN PEPROCESS Process
,
146 OUT PFILE_OBJECT
*FileObject
155 OUT PHANDLE ProcessHandle
,
156 IN ACCESS_MASK DesiredAccess
,
157 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
158 IN HANDLE ParentProcess OPTIONAL
,
160 IN HANDLE SectionHandle OPTIONAL
,
161 IN HANDLE DebugPort OPTIONAL
,
162 IN HANDLE ExceptionPort OPTIONAL
,
171 PsReferenceEffectiveToken(
173 OUT PTOKEN_TYPE TokenType
,
175 OUT PSECURITY_IMPERSONATION_LEVEL Level
180 PsOpenTokenOfProcess(
181 IN HANDLE ProcessHandle
,
182 OUT PACCESS_TOKEN
* Token
188 IN PEPROCESS Process
,
189 IN HANDLE TokenHandle OPTIONAL
,
190 IN PACCESS_TOKEN Token OPTIONAL
195 PspInitializeProcessSecurity(
196 IN PEPROCESS Process
,
197 IN PEPROCESS Parent OPTIONAL
202 PspDeleteProcessSecurity(
208 PspDeleteThreadSecurity(
213 // Reaping and Deletion
219 PKNORMAL_ROUTINE
*NormalRoutine
,
220 PVOID
*NormalContext
,
221 PVOID
*SystemArgument1
,
222 PVOID
*SystemArgument2
234 IN NTSTATUS ExitStatus
239 PspTerminateThreadByPointer(
241 IN NTSTATUS ExitStatus
,
248 IN BOOLEAN LastThread
,
255 IN PEPROCESS Process
,
256 IN NTSTATUS ExitStatus
272 // Thread/Process Startup
276 PspSystemThreadStartup(
277 PKSTART_ROUTINE StartRoutine
,
293 IN PEPROCESS Process
,
294 IN PEPROCESS ParentProcess
299 PspDestroyQuotaBlock(
305 // VDM and LDT Support
321 PspQueryDescriptorThread(
323 IN PVOID ThreadInformation
,
324 IN ULONG ThreadInformationLength
,
325 OUT PULONG ReturnLength OPTIONAL
334 PspExitProcessFromJob(
341 PspRemoveProcessFromJob(
342 IN PEPROCESS Process
,
348 PspInitializeJobStructures(
365 OUT PULONG PreviousCount OPTIONAL
372 OUT PULONG PreviousCount OPTIONAL
377 PspGetOrSetContextKernelRoutine(
379 IN OUT PKNORMAL_ROUTINE
* NormalRoutine
,
380 IN OUT PVOID
* NormalContext
,
381 IN OUT PVOID
* SystemArgument1
,
382 IN OUT PVOID
* SystemArgument2
390 PsReturnProcessPageFileQuota(
391 IN PEPROCESS Process
,
397 PsChargeProcessPageFileQuota(
398 IN PEPROCESS Process
,
404 PspIsProcessExiting(IN PEPROCESS Process
);
407 // Global data inside the Process Manager
409 extern ULONG PspTraceLevel
;
410 extern LCID PsDefaultThreadLocaleId
;
411 extern LCID PsDefaultSystemLocaleId
;
412 extern LIST_ENTRY PspReaperListHead
;
413 extern WORK_QUEUE_ITEM PspReaperWorkItem
;
414 extern BOOLEAN PspReaping
;
415 extern PEPROCESS PsIdleProcess
;
416 extern LIST_ENTRY PsActiveProcessHead
;
417 extern KGUARDED_MUTEX PspActiveProcessMutex
;
418 extern LARGE_INTEGER ShortPsLockDelay
;
419 extern EPROCESS_QUOTA_BLOCK PspDefaultQuotaBlock
;
420 extern PHANDLE_TABLE PspCidTable
;
421 extern EX_CALLBACK PspThreadNotifyRoutine
[PSP_MAX_CREATE_THREAD_NOTIFY
];
422 extern EX_CALLBACK PspProcessNotifyRoutine
[PSP_MAX_CREATE_PROCESS_NOTIFY
];
423 extern EX_CALLBACK PspLoadImageNotifyRoutine
[PSP_MAX_LOAD_IMAGE_NOTIFY
];
424 extern PLEGO_NOTIFY_ROUTINE PspLegoNotifyRoutine
;
425 extern ULONG PspThreadNotifyRoutineCount
, PspProcessNotifyRoutineCount
;
426 extern BOOLEAN PsImageNotifyEnabled
;
427 extern PKWIN32_PROCESS_CALLOUT PspW32ProcessCallout
;
428 extern PKWIN32_THREAD_CALLOUT PspW32ThreadCallout
;
429 extern PVOID PspSystemDllEntryPoint
;
430 extern PVOID PspSystemDllBase
;
431 extern BOOLEAN PspUseJobSchedulingClasses
;
432 extern CHAR PspJobSchedulingClasses
[PSP_JOB_SCHEDULING_CLASSES
];
433 extern ULONG PsRawPrioritySeparation
;
434 extern POBJECT_TYPE _PsThreadType
, _PsProcessType
;
435 extern PTOKEN PspBootAccessToken
;
436 extern GENERIC_MAPPING PspJobMapping
;
437 extern POBJECT_TYPE PsJobType
;
438 extern LARGE_INTEGER ShortPsLockDelay
;
439 extern UNICODE_STRING PsNtDllPathName
;
440 extern LIST_ENTRY PsLoadedModuleList
;
441 extern KSPIN_LOCK PsLoadedModuleSpinLock
;
442 extern ERESOURCE PsLoadedModuleResource
;
443 extern ULONG_PTR PsNtosImageBase
;