38654ebfdbf641a174a682c8073b2cfc211376e7
[reactos.git] / reactos / ntoskrnl / include / internal / ps.h
1 #ifndef __INCLUDE_INTERNAL_PS_H
2 #define __INCLUDE_INTERNAL_PS_H
3
4 /* Forward declarations. */
5 struct _KTHREAD;
6 struct _KTRAPFRAME;
7 struct _EJOB;
8
9 #include <internal/arch/ps.h>
10
11 extern LCID PsDefaultThreadLocaleId;
12 extern LCID PsDefaultSystemLocaleId;
13
14 /* Top level irp definitions. */
15 #define FSRTL_FSP_TOP_LEVEL_IRP (0x01)
16 #define FSRTL_CACHE_TOP_LEVEL_IRP (0x02)
17 #define FSRTL_MOD_WRITE_TOP_LEVEL_IRP (0x03)
18 #define FSRTL_FAST_IO_TOP_LEVEL_IRP (0x04)
19 #define FSRTL_MAX_TOP_LEVEL_IRP_FLAG (0x04)
20
21 #define PROCESS_STATE_TERMINATED (1)
22 #define PROCESS_STATE_ACTIVE (2)
23
24 VOID PiInitDefaultLocale(VOID);
25 VOID PiInitProcessManager(VOID);
26 VOID PiShutdownProcessManager(VOID);
27 VOID PsInitThreadManagment(VOID);
28 VOID PsInitProcessManagment(VOID);
29 VOID PsInitIdleThread(VOID);
30 VOID PiTerminateProcessThreads(PEPROCESS Process, NTSTATUS ExitStatus);
31 VOID PsTerminateCurrentThread(NTSTATUS ExitStatus);
32 VOID PsTerminateOtherThread(PETHREAD Thread, NTSTATUS ExitStatus);
33 VOID PsReleaseThread(PETHREAD Thread);
34 VOID PsBeginThread(PKSTART_ROUTINE StartRoutine, PVOID StartContext);
35 VOID PsBeginThreadWithContextInternal(VOID);
36 VOID PiKillMostProcesses(VOID);
37 NTSTATUS STDCALL PiTerminateProcess(PEPROCESS Process, NTSTATUS ExitStatus);
38 VOID PiInitApcManagement(VOID);
39 VOID STDCALL PiDeleteThread(PVOID ObjectBody);
40 VOID PsReapThreads(VOID);
41 VOID PsInitializeThreadReaper(VOID);
42 VOID PsQueueThreadReap(PETHREAD Thread);
43 NTSTATUS
44 PsInitializeThread(PEPROCESS Process,
45 PETHREAD* ThreadPtr,
46 POBJECT_ATTRIBUTES ObjectAttributes,
47 KPROCESSOR_MODE AccessMode,
48 BOOLEAN First);
49
50 PACCESS_TOKEN STDCALL PsReferenceEffectiveToken(PETHREAD Thread,
51 PTOKEN_TYPE TokenType,
52 PUCHAR b,
53 PSECURITY_IMPERSONATION_LEVEL Level);
54
55 NTSTATUS STDCALL PsOpenTokenOfProcess(HANDLE ProcessHandle,
56 PACCESS_TOKEN* Token);
57 VOID
58 STDCALL
59 PspTerminateProcessThreads(PEPROCESS Process,
60 NTSTATUS ExitStatus);
61 NTSTATUS PsSuspendThread(PETHREAD Thread, PULONG PreviousCount);
62 NTSTATUS PsResumeThread(PETHREAD Thread, PULONG PreviousCount);
63 NTSTATUS
64 STDCALL
65 PspAssignPrimaryToken(PEPROCESS Process,
66 HANDLE TokenHandle);
67 VOID STDCALL PsExitSpecialApc(PKAPC Apc,
68 PKNORMAL_ROUTINE *NormalRoutine,
69 PVOID *NormalContext,
70 PVOID *SystemArgument1,
71 PVOID *SystemArgument2);
72
73 NTSTATUS
74 STDCALL
75 PspInitializeProcessSecurity(PEPROCESS Process,
76 PEPROCESS Parent OPTIONAL);
77
78
79 VOID
80 STDCALL
81 PspSystemThreadStartup(PKSTART_ROUTINE StartRoutine,
82 PVOID StartContext);
83
84 NTSTATUS
85 PsInitializeIdleOrFirstThread (
86 PEPROCESS Process,
87 PETHREAD* ThreadPtr,
88 PKSTART_ROUTINE StartRoutine,
89 KPROCESSOR_MODE AccessMode,
90 BOOLEAN First);
91 /*
92 * Internal thread priorities, added by Phillip Susi
93 * TODO: rebalence these to make use of all priorities... the ones above 16
94 * can not all be used right now
95 */
96 #define PROCESS_PRIO_IDLE 3
97 #define PROCESS_PRIO_NORMAL 8
98 #define PROCESS_PRIO_HIGH 13
99 #define PROCESS_PRIO_RT 18
100
101
102 VOID STDCALL PiDeleteProcess(PVOID ObjectBody);
103
104 VOID
105 STDCALL
106 PspReapRoutine(PVOID Context);
107
108 VOID
109 STDCALL
110 PspExitThread(NTSTATUS ExitStatus);
111
112 extern LIST_ENTRY PspReaperListHead;
113 extern WORK_QUEUE_ITEM PspReaperWorkItem;
114 extern BOOLEAN PspReaping;
115 extern PEPROCESS PsInitialSystemProcess;
116 extern PEPROCESS PsIdleProcess;
117 extern LIST_ENTRY PsActiveProcessHead;
118 extern FAST_MUTEX PspActiveProcessMutex;
119 extern LARGE_INTEGER ShortPsLockDelay, PsLockTimeout;
120
121 VOID
122 STDCALL
123 PspTerminateThreadByPointer(PETHREAD Thread,
124 NTSTATUS ExitStatus);
125
126 VOID PsUnfreezeOtherThread(PETHREAD Thread);
127 VOID PsFreezeOtherThread(PETHREAD Thread);
128 VOID PsFreezeProcessThreads(PEPROCESS Process);
129 VOID PsUnfreezeProcessThreads(PEPROCESS Process);
130 ULONG PsEnumThreadsByProcess(PEPROCESS Process);
131 PEPROCESS STDCALL PsGetNextProcess(PEPROCESS OldProcess);
132 VOID
133 PsApplicationProcessorInit(VOID);
134 VOID
135 PsPrepareForApplicationProcessorInit(ULONG Id);
136 VOID STDCALL
137 PsIdleThreadMain(PVOID Context);
138
139 VOID STDCALL
140 PiSuspendThreadRundownRoutine(PKAPC Apc);
141 VOID STDCALL
142 PiSuspendThreadKernelRoutine(PKAPC Apc,
143 PKNORMAL_ROUTINE* NormalRoutine,
144 PVOID* NormalContext,
145 PVOID* SystemArgument1,
146 PVOID* SystemArguemnt2);
147 VOID STDCALL
148 PiSuspendThreadNormalRoutine(PVOID NormalContext,
149 PVOID SystemArgument1,
150 PVOID SystemArgument2);
151 VOID
152 PsInitialiseSuspendImplementation(VOID);
153 NTSTATUS
154 STDCALL
155 PspExitProcess(PEPROCESS Process);
156
157 VOID
158 STDCALL
159 PspDeleteProcess(PVOID ObjectBody);
160
161 VOID
162 STDCALL
163 PspDeleteThread(PVOID ObjectBody);
164
165 extern LONG PiNrThreadsAwaitingReaping;
166
167 NTSTATUS
168 PsInitWin32Thread (PETHREAD Thread);
169
170 VOID
171 PsTerminateWin32Process (PEPROCESS Process);
172
173 VOID
174 PsTerminateWin32Thread (PETHREAD Thread);
175
176 VOID
177 PsInitialiseW32Call(VOID);
178
179 VOID
180 STDCALL
181 PspRunCreateThreadNotifyRoutines(PETHREAD, BOOLEAN);
182
183 VOID
184 STDCALL
185 PspRunCreateProcessNotifyRoutines(PEPROCESS, BOOLEAN);
186
187 VOID INIT_FUNCTION PsInitJobManagment(VOID);
188
189 /* CLIENT ID */
190
191 NTSTATUS PsCreateCidHandle(PVOID Object, POBJECT_TYPE ObjectType, PHANDLE Handle);
192 NTSTATUS PsDeleteCidHandle(HANDLE CidHandle, POBJECT_TYPE ObjectType);
193 PHANDLE_TABLE_ENTRY PsLookupCidHandle(HANDLE CidHandle, POBJECT_TYPE ObjectType, PVOID *Object);
194 VOID PsUnlockCidHandle(PHANDLE_TABLE_ENTRY CidEntry);
195 NTSTATUS PsLockProcess(PEPROCESS Process, BOOLEAN Timeout);
196 VOID PsUnlockProcess(PEPROCESS Process);
197
198 #define ETHREAD_TO_KTHREAD(pEThread) (&(pEThread)->Tcb)
199 #define KTHREAD_TO_ETHREAD(pKThread) (CONTAINING_RECORD((pKThread), ETHREAD, Tcb))
200 #define EPROCESS_TO_KPROCESS(pEProcess) (&(pEProcess)->Pcb)
201 #define KPROCESS_TO_EPROCESS(pKProcess) (CONTAINING_RECORD((pKProcess), EPROCESS, Pcb))
202
203 #define MAX_PROCESS_NOTIFY_ROUTINE_COUNT 8
204 #define MAX_LOAD_IMAGE_NOTIFY_ROUTINE_COUNT 8
205
206 #endif /* __INCLUDE_INTERNAL_PS_H */