392b7e3e8ea18a5a59eaa2ae06c845ed2e28daff
[reactos.git] / reactos / include / internal / ps.h
1 #ifndef __INCLUDE_INTERNAL_PSMGR_H
2 #define __INCLUDE_INTERNAL_PSMGR_H
3
4 #include <internal/hal.h>
5
6 extern PEPROCESS SystemProcess;
7 extern HANDLE SystemProcessHandle;
8
9 /* ntoskrnl/ps/thread.c */
10 extern POBJECT_TYPE PsThreadType;
11 extern POBJECT_TYPE PsProcessType;
12 extern PETHREAD CurrentThread;
13
14 VOID PiInitProcessManager(VOID);
15 VOID PiShutdownProcessManager(VOID);
16 VOID PsInitThreadManagment(VOID);
17 VOID PsInitProcessManagment(VOID);
18 VOID PsInitIdleThread(VOID);
19 VOID PsDispatchThread(ULONG NewThreadStatus);
20 VOID PsDispatchThreadNoLock(ULONG NewThreadStatus);
21 VOID PiTerminateProcessThreads(PEPROCESS Process, NTSTATUS ExitStatus);
22 VOID PsTerminateOtherThread(PETHREAD Thread, NTSTATUS ExitStatus);
23 VOID PsReleaseThread(PETHREAD Thread);
24 VOID PsBeginThread(PKSTART_ROUTINE StartRoutine, PVOID StartContext);
25 VOID PsBeginThreadWithContextInternal(VOID);
26 VOID PiKillMostProcesses(VOID);
27 NTSTATUS STDCALL PiTerminateProcess(PEPROCESS Process, NTSTATUS ExitStatus);
28 ULONG PsUnfreezeThread(PETHREAD Thread, PNTSTATUS WaitStatus);
29 ULONG PsFreezeThread(PETHREAD Thread, PNTSTATUS WaitStatus,
30 UCHAR Alertable, ULONG WaitMode);
31 VOID PiInitApcManagement(VOID);
32 VOID PiDeleteThread(PVOID ObjectBody);
33 VOID PiCloseThread(PVOID ObjectBody, ULONG HandleCount);
34 VOID PsReapThreads(VOID);
35 NTSTATUS PsInitializeThread(HANDLE ProcessHandle,
36 PETHREAD* ThreadPtr,
37 PHANDLE ThreadHandle,
38 ACCESS_MASK DesiredAccess,
39 POBJECT_ATTRIBUTES ObjectAttributes);
40
41 #define THREAD_STATE_INVALID (0)
42 #define THREAD_STATE_RUNNABLE (1)
43 #define THREAD_STATE_RUNNING (2)
44 #define THREAD_STATE_SUSPENDED (3)
45 #define THREAD_STATE_FROZEN (4)
46 #define THREAD_STATE_TERMINATED_1 (5)
47 #define THREAD_STATE_TERMINATED_2 (6)
48 #define THREAD_STATE_MAX (7)
49
50
51 // Internal thread priorities, added by Phillip Susi
52 // TODO: rebalence these to make use of all priorities... the ones above 16 can not all be used right now
53
54 #define PROCESS_PRIO_IDLE 3
55 #define PROCESS_PRIO_NORMAL 8
56 #define PROCESS_PRIO_HIGH 13
57 #define PROCESS_PRIO_RT 18
58
59 /*
60 * Functions the HAL must provide
61 */
62
63 void HalInitFirstTask(PETHREAD thread);
64 NTSTATUS HalInitTask(PETHREAD thread, PKSTART_ROUTINE fn, PVOID StartContext);
65 void HalTaskSwitch(PKTHREAD thread);
66 NTSTATUS HalInitTaskWithContext(PETHREAD Thread, PCONTEXT Context);
67 NTSTATUS HalReleaseTask(PETHREAD Thread);
68 VOID PiDeleteProcess(PVOID ObjectBody);
69 VOID PsReapThreads(VOID);
70 VOID PsUnfreezeOtherThread(PETHREAD Thread);
71 VOID PsFreezeOtherThread(PETHREAD Thread);
72 VOID PsFreezeProcessThreads(PEPROCESS Process);
73 VOID PsUnfreezeProcessThreads(PEPROCESS Process);
74
75 #endif