659fbba3e45de3e33b3a1033bdc079b1ec12f8e8
[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 extern POBJECT_TYPE PsThreadType;
10 extern POBJECT_TYPE PsProcessType;
11
12 void PsInitThreadManagment(void);
13 VOID PsInitProcessManagment(VOID);
14 VOID PsInitIdleThread(VOID);
15 VOID PsDispatchThread(VOID);
16 VOID PiTerminateProcessThreads(PEPROCESS Process, NTSTATUS ExitStatus);
17 VOID PsTerminateOtherThread(PETHREAD Thread, NTSTATUS ExitStatus);
18 VOID PsReleaseThread(PETHREAD Thread);
19 VOID PsBeginThread(PKSTART_ROUTINE StartRoutine, PVOID StartContext);
20 VOID PsBeginThreadWithContextInternal(VOID);
21
22 /*
23 * PURPOSE: Thread states
24 */
25 enum
26 {
27 /*
28 * PURPOSE: Don't touch
29 */
30 THREAD_STATE_INVALID,
31
32 /*
33 * PURPOSE: Waiting to be dispatched
34 */
35 THREAD_STATE_RUNNABLE,
36
37 /*
38 * PURPOSE: Currently running
39 */
40 THREAD_STATE_RUNNING,
41
42 /*
43 * PURPOSE: Doesn't want to run
44 */
45 THREAD_STATE_SUSPENDED,
46
47 /*
48 * Waiting to be freed
49 */
50 THREAD_STATE_TERMINATED,
51 };
52
53 /*
54 * Functions the HAL must provide
55 */
56
57 void HalInitFirstTask(PETHREAD thread);
58 NTSTATUS HalInitTask(PETHREAD thread, PKSTART_ROUTINE fn, PVOID StartContext);
59 void HalTaskSwitch(PKTHREAD thread);
60 NTSTATUS HalInitTaskWithContext(PETHREAD Thread, PCONTEXT Context);
61 NTSTATUS HalReleaseTask(PETHREAD Thread);
62 VOID PiDeleteProcess(PVOID ObjectBody);
63
64 #endif