1 #ifndef __INCLUDE_INTERNAL_PSMGR_H
2 #define __INCLUDE_INTERNAL_PSMGR_H
4 #include <internal/hal.h>
6 extern PEPROCESS SystemProcess
;
7 extern HANDLE SystemProcessHandle
;
9 /* ntoskrnl/ps/thread.c */
10 extern POBJECT_TYPE PsThreadType
;
11 extern POBJECT_TYPE PsProcessType
;
12 extern PETHREAD CurrentThread
;
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
,
38 ACCESS_MASK DesiredAccess
,
39 POBJECT_ATTRIBUTES ObjectAttributes
);
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)
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
54 #define PROCESS_PRIO_IDLE 3
55 #define PROCESS_PRIO_NORMAL 8
56 #define PROCESS_PRIO_HIGH 13
57 #define PROCESS_PRIO_RT 18
60 * Functions the HAL must provide
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
);