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 typedef struct _W32_OBJECT_CALLBACK
{
22 OB_OPEN_METHOD WinStaCreate
;
23 OB_PARSE_METHOD WinStaParse
;
24 OB_DELETE_METHOD WinStaDelete
;
25 OB_FIND_METHOD WinStaFind
;
26 OB_CREATE_METHOD DesktopCreate
;
27 OB_DELETE_METHOD DesktopDelete
;
28 } W32_OBJECT_CALLBACK
, *PW32_OBJECT_CALLBACK
;
30 #define PROCESS_STATE_TERMINATED (1)
31 #define PROCESS_STATE_ACTIVE (2)
33 VOID
PiInitDefaultLocale(VOID
);
34 VOID
PiInitProcessManager(VOID
);
35 VOID
PiShutdownProcessManager(VOID
);
36 VOID
PsInitThreadManagment(VOID
);
37 VOID
PsInitProcessManagment(VOID
);
38 VOID
PsInitIdleThread(VOID
);
39 VOID
PiTerminateProcessThreads(PEPROCESS Process
, NTSTATUS ExitStatus
);
40 VOID
PsTerminateCurrentThread(NTSTATUS ExitStatus
);
41 VOID
PsTerminateOtherThread(PETHREAD Thread
, NTSTATUS ExitStatus
);
42 VOID
PsReleaseThread(PETHREAD Thread
);
43 VOID
PsBeginThread(PKSTART_ROUTINE StartRoutine
, PVOID StartContext
);
44 VOID
PsBeginThreadWithContextInternal(VOID
);
45 VOID
PiKillMostProcesses(VOID
);
46 NTSTATUS STDCALL
PiTerminateProcess(PEPROCESS Process
, NTSTATUS ExitStatus
);
47 VOID
PiInitApcManagement(VOID
);
48 VOID STDCALL
PiDeleteThread(PVOID ObjectBody
);
49 VOID
PsReapThreads(VOID
);
50 VOID
PsInitializeThreadReaper(VOID
);
51 VOID
PsQueueThreadReap(PETHREAD Thread
);
53 PsInitializeThread(PEPROCESS Process
,
55 POBJECT_ATTRIBUTES ObjectAttributes
,
56 KPROCESSOR_MODE AccessMode
,
59 PACCESS_TOKEN STDCALL
PsReferenceEffectiveToken(PETHREAD Thread
,
60 PTOKEN_TYPE TokenType
,
62 PSECURITY_IMPERSONATION_LEVEL Level
);
64 NTSTATUS STDCALL
PsOpenTokenOfProcess(HANDLE ProcessHandle
,
65 PACCESS_TOKEN
* Token
);
68 PspTerminateProcessThreads(PEPROCESS Process
,
70 NTSTATUS
PsSuspendThread(PETHREAD Thread
, PULONG PreviousCount
);
71 NTSTATUS
PsResumeThread(PETHREAD Thread
, PULONG PreviousCount
);
74 PspAssignPrimaryToken(PEPROCESS Process
,
76 VOID STDCALL
PsExitSpecialApc(PKAPC Apc
,
77 PKNORMAL_ROUTINE
*NormalRoutine
,
79 PVOID
*SystemArgument1
,
80 PVOID
*SystemArgument2
);
84 PspInitializeProcessSecurity(PEPROCESS Process
,
85 PEPROCESS Parent OPTIONAL
);
90 PspSystemThreadStartup(PKSTART_ROUTINE StartRoutine
,
94 PsInitializeIdleOrFirstThread (
97 PKSTART_ROUTINE StartRoutine
,
98 KPROCESSOR_MODE AccessMode
,
101 * Internal thread priorities, added by Phillip Susi
102 * TODO: rebalence these to make use of all priorities... the ones above 16
103 * can not all be used right now
105 #define PROCESS_PRIO_IDLE 3
106 #define PROCESS_PRIO_NORMAL 8
107 #define PROCESS_PRIO_HIGH 13
108 #define PROCESS_PRIO_RT 18
111 VOID STDCALL
PiDeleteProcess(PVOID ObjectBody
);
115 PspReapRoutine(PVOID Context
);
119 PspExitThread(NTSTATUS ExitStatus
);
121 extern LIST_ENTRY PspReaperListHead
;
122 extern WORK_QUEUE_ITEM PspReaperWorkItem
;
123 extern BOOLEAN PspReaping
;
124 extern PEPROCESS PsInitialSystemProcess
;
125 extern PEPROCESS PsIdleProcess
;
126 extern LIST_ENTRY PsActiveProcessHead
;
127 extern FAST_MUTEX PspActiveProcessMutex
;
128 extern LARGE_INTEGER ShortPsLockDelay
, PsLockTimeout
;
132 PspTerminateThreadByPointer(PETHREAD Thread
,
133 NTSTATUS ExitStatus
);
135 VOID
PsUnfreezeOtherThread(PETHREAD Thread
);
136 VOID
PsFreezeOtherThread(PETHREAD Thread
);
137 VOID
PsFreezeProcessThreads(PEPROCESS Process
);
138 VOID
PsUnfreezeProcessThreads(PEPROCESS Process
);
139 ULONG
PsEnumThreadsByProcess(PEPROCESS Process
);
140 PEPROCESS STDCALL
PsGetNextProcess(PEPROCESS OldProcess
);
142 PsApplicationProcessorInit(VOID
);
144 PsPrepareForApplicationProcessorInit(ULONG Id
);
146 PsIdleThreadMain(PVOID Context
);
149 PiSuspendThreadRundownRoutine(PKAPC Apc
);
151 PiSuspendThreadKernelRoutine(PKAPC Apc
,
152 PKNORMAL_ROUTINE
* NormalRoutine
,
153 PVOID
* NormalContext
,
154 PVOID
* SystemArgument1
,
155 PVOID
* SystemArguemnt2
);
157 PiSuspendThreadNormalRoutine(PVOID NormalContext
,
158 PVOID SystemArgument1
,
159 PVOID SystemArgument2
);
161 PsInitialiseSuspendImplementation(VOID
);
164 PspExitProcess(PEPROCESS Process
);
168 PspDeleteProcess(PVOID ObjectBody
);
172 PspDeleteThread(PVOID ObjectBody
);
174 extern LONG PiNrThreadsAwaitingReaping
;
177 PsInitWin32Thread (PETHREAD Thread
);
180 PsTerminateWin32Process (PEPROCESS Process
);
183 PsTerminateWin32Thread (PETHREAD Thread
);
186 PsInitialiseW32Call(VOID
);
190 PspRunCreateThreadNotifyRoutines(PETHREAD
, BOOLEAN
);
194 PspRunCreateProcessNotifyRoutines(PEPROCESS
, BOOLEAN
);
196 VOID INIT_FUNCTION
PsInitJobManagment(VOID
);
200 NTSTATUS
PsCreateCidHandle(PVOID Object
, POBJECT_TYPE ObjectType
, PHANDLE Handle
);
201 NTSTATUS
PsDeleteCidHandle(HANDLE CidHandle
, POBJECT_TYPE ObjectType
);
202 PHANDLE_TABLE_ENTRY
PsLookupCidHandle(HANDLE CidHandle
, POBJECT_TYPE ObjectType
, PVOID
*Object
);
203 VOID
PsUnlockCidHandle(PHANDLE_TABLE_ENTRY CidEntry
);
204 NTSTATUS
PsLockProcess(PEPROCESS Process
, BOOLEAN Timeout
);
205 VOID
PsUnlockProcess(PEPROCESS Process
);
207 #define ETHREAD_TO_KTHREAD(pEThread) (&(pEThread)->Tcb)
208 #define KTHREAD_TO_ETHREAD(pKThread) (CONTAINING_RECORD((pKThread), ETHREAD, Tcb))
209 #define EPROCESS_TO_KPROCESS(pEProcess) (&(pEProcess)->Pcb)
210 #define KPROCESS_TO_EPROCESS(pKProcess) (CONTAINING_RECORD((pKProcess), EPROCESS, Pcb))
212 #define MAX_PROCESS_NOTIFY_ROUTINE_COUNT 8
213 #define MAX_LOAD_IMAGE_NOTIFY_ROUTINE_COUNT 8
215 #endif /* __INCLUDE_INTERNAL_PS_H */