1 #ifndef __INCLUDE_INTERNAL_PS_H
2 #define __INCLUDE_INTERNAL_PS_H
4 /* Forward declarations. */
9 #include <internal/arch/ps.h>
11 extern LCID PsDefaultThreadLocaleId
;
12 extern LCID PsDefaultSystemLocaleId
;
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)
21 #define PROCESS_STATE_TERMINATED (1)
22 #define PROCESS_STATE_ACTIVE (2)
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
);
44 PsInitializeThread(PEPROCESS Process
,
46 POBJECT_ATTRIBUTES ObjectAttributes
,
47 KPROCESSOR_MODE AccessMode
,
50 PACCESS_TOKEN STDCALL
PsReferenceEffectiveToken(PETHREAD Thread
,
51 PTOKEN_TYPE TokenType
,
53 PSECURITY_IMPERSONATION_LEVEL Level
);
55 NTSTATUS STDCALL
PsOpenTokenOfProcess(HANDLE ProcessHandle
,
56 PACCESS_TOKEN
* Token
);
59 PspTerminateProcessThreads(PEPROCESS Process
,
61 NTSTATUS
PsSuspendThread(PETHREAD Thread
, PULONG PreviousCount
);
62 NTSTATUS
PsResumeThread(PETHREAD Thread
, PULONG PreviousCount
);
65 PspAssignPrimaryToken(PEPROCESS Process
,
67 VOID STDCALL
PsExitSpecialApc(PKAPC Apc
,
68 PKNORMAL_ROUTINE
*NormalRoutine
,
70 PVOID
*SystemArgument1
,
71 PVOID
*SystemArgument2
);
75 PspInitializeProcessSecurity(PEPROCESS Process
,
76 PEPROCESS Parent OPTIONAL
);
81 PspSystemThreadStartup(PKSTART_ROUTINE StartRoutine
,
85 PsInitializeIdleOrFirstThread (
88 PKSTART_ROUTINE StartRoutine
,
89 KPROCESSOR_MODE AccessMode
,
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
96 #define PROCESS_PRIO_IDLE 3
97 #define PROCESS_PRIO_NORMAL 8
98 #define PROCESS_PRIO_HIGH 13
99 #define PROCESS_PRIO_RT 18
102 VOID STDCALL
PiDeleteProcess(PVOID ObjectBody
);
106 PspReapRoutine(PVOID Context
);
110 PspExitThread(NTSTATUS ExitStatus
);
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
;
123 PspTerminateThreadByPointer(PETHREAD Thread
,
124 NTSTATUS ExitStatus
);
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
);
133 PsApplicationProcessorInit(VOID
);
135 PsPrepareForApplicationProcessorInit(ULONG Id
);
137 PsIdleThreadMain(PVOID Context
);
140 PiSuspendThreadRundownRoutine(PKAPC Apc
);
142 PiSuspendThreadKernelRoutine(PKAPC Apc
,
143 PKNORMAL_ROUTINE
* NormalRoutine
,
144 PVOID
* NormalContext
,
145 PVOID
* SystemArgument1
,
146 PVOID
* SystemArguemnt2
);
148 PiSuspendThreadNormalRoutine(PVOID NormalContext
,
149 PVOID SystemArgument1
,
150 PVOID SystemArgument2
);
152 PsInitialiseSuspendImplementation(VOID
);
155 PspExitProcess(PEPROCESS Process
);
159 PspDeleteProcess(PVOID ObjectBody
);
163 PspDeleteThread(PVOID ObjectBody
);
165 extern LONG PiNrThreadsAwaitingReaping
;
168 PsInitWin32Thread (PETHREAD Thread
);
171 PsTerminateWin32Process (PEPROCESS Process
);
174 PsTerminateWin32Thread (PETHREAD Thread
);
177 PsInitialiseW32Call(VOID
);
181 PspRunCreateThreadNotifyRoutines(PETHREAD
, BOOLEAN
);
185 PspRunCreateProcessNotifyRoutines(PEPROCESS
, BOOLEAN
);
187 VOID INIT_FUNCTION
PsInitJobManagment(VOID
);
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
);
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))
203 #define MAX_PROCESS_NOTIFY_ROUTINE_COUNT 8
204 #define MAX_LOAD_IMAGE_NOTIFY_ROUTINE_COUNT 8
206 #endif /* __INCLUDE_INTERNAL_PS_H */