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