kernel
Loading...
Searching...
No Matches
psmgr.c
Go to the documentation of this file.
1/*++
2
3Module Name:
4
5 psmgr.c
6
7Purpose:
8
9 This translation unit contains the initialization routines of the Process & Thread subsystem.
10
11Author:
12
13 slep (Matanel) 2025.
14
15Revision History:
16
17--*/
18
19#include "../../includes/ps.h"
20#include "../../includes/ob.h"
21
22// Explanation for future me or anything going over my kernel.
23// Instead of creating processes and deleting them when exiting, we use an object manager
24// To automatically do this for us when the reference count for the required thread ends.
25// It defines how should the process / thread be created (With what pool, what access rights)
26// It supplements the core functionality of security for the process & threads life, and access.
27
28// Reference count reaches 0 -> Dump Routine -> Deletion Routine (depends on kind of thread)
29
32
33static
35PsInitializeProcessThreadManager(
36 void
37)
38
39/*++
40
41 Routine description:
42
43 Initializes the process & thread subsystem.
44
45 Arguments:
46
47 None.
48
49 Return Values:
50
51 MTSTATUS Status codes representing if succeeded or not.
52 If we didn't succeed, system should bugcheck with status code.
53
54--*/
55
56{
57 // Define how each thread & process be created and deleted.
58 MTSTATUS status;
59 OBJECT_TYPE_INITIALIZER ObjectTypeInitializer;
60 kmemset(&ObjectTypeInitializer, 0, sizeof(OBJECT_TYPE_INITIALIZER));
61
62 // Processes
63 char* Name = "Process";
64 ObjectTypeInitializer.PoolType = NonPagedPool;
65#ifdef DEBUG
66 ObjectTypeInitializer.DumpProcedure = NULL; // TODO DUMP PROC!
67#else
68 ObjectTypeInitializer.DumpProcedure = NULL;
69#endif
70 ObjectTypeInitializer.DeleteProcedure = &PsDeleteProcess;
71 ObjectTypeInitializer.ValidAccessRights = MT_PROCESS_ALL_ACCESS;
72 status = ObCreateObjectType(Name, &ObjectTypeInitializer, &PsProcessType);
73 if (MT_FAILURE(status)) return status;
74
75 // Threads
76 Name = "Thread";
77 ObjectTypeInitializer.PoolType = NonPagedPool;
78#ifdef DEBUG
79 ObjectTypeInitializer.DumpProcedure = NULL; // TODO DUMP PROC!
80#else
81 ObjectTypeInitializer.DumpProcedure = NULL;
82#endif
83 ObjectTypeInitializer.DeleteProcedure = &PsDeleteThread;
84 ObjectTypeInitializer.ValidAccessRights = MT_THREAD_ALL_ACCESS;
85 status = ObCreateObjectType(Name, &ObjectTypeInitializer, &PsThreadType);
86 if (MT_FAILURE(status)) return status;
87
88 return MT_SUCCESS;
89}
90
91
94 IN enum _PS_PHASE_ROUTINE Phase
95)
96
97{
98 if (Phase == PS_PHASE_INITIALIZE_SYSTEM) {
99 // Initialize the PS Subsystem.
100 // Initialize the CID Table.
102
103 // Initialize the process & thread subsystem.
104 MTSTATUS st = PsInitializeProcessThreadManager();
105 return st;
106 }
107 else if (Phase == PS_PHASE_INITIALIZE_WORKER_THREADS) {
109 return MT_SUCCESS;
110 }
111 else {
113 }
114}
115
#define IN
Definition annotations.h:8
NORETURN void MeBugCheck(IN enum _BUGCHECK_CODES BugCheckCode)
Definition bugcheck.c:220
void PsInitializeCidTable(void)
Definition cid.c:27
@ INVALID_INITIALIZATION_PHASE
Definition me.h:124
@ NonPagedPool
Definition mm.h:355
FORCEINLINE void * kmemset(void *dest, int64_t val, uint64_t len)
Definition mm.h:655
#define MT_SUCCESS
Definition mtstatus.h:22
#define MT_FAILURE(Status)
Definition mtstatus.h:16
int32_t MTSTATUS
Definition mtstatus.h:12
MTSTATUS ObCreateObjectType(IN char *TypeName, IN POBJECT_TYPE_INITIALIZER ObjectTypeInitializer, OUT POBJECT_TYPE *ReturnedObjectType)
Definition ob.c:62
struct _OBJECT_TYPE * POBJECT_TYPE
struct _OBJECT_TYPE_INITIALIZER OBJECT_TYPE_INITIALIZER
void PsDeleteProcess(IN void *ProcessObject)
Definition process.c:522
_PS_PHASE_ROUTINE
Definition ps.h:55
@ PS_PHASE_INITIALIZE_SYSTEM
Definition ps.h:56
@ PS_PHASE_INITIALIZE_WORKER_THREADS
Definition ps.h:57
#define MT_THREAD_ALL_ACCESS
Definition ps.h:72
#define MT_PROCESS_ALL_ACCESS
Definition ps.h:89
POBJECT_TYPE PsThreadType
Definition psmgr.c:31
POBJECT_TYPE PsProcessType
Definition psmgr.c:30
MTSTATUS PsInitializeSystem(IN enum _PS_PHASE_ROUTINE Phase)
Definition psmgr.c:93
void PsInitializeWorkerThreads(void)
Definition pswork.c:93
OB_DELETE_METHOD DeleteProcedure
Definition ob.h:43
OB_DUMP_METHOD DumpProcedure
Definition ob.h:42
POOL_TYPE PoolType
Definition ob.h:39
uint32_t ValidAccessRights
Definition ob.h:41
void PsDeleteThread(IN void *Object)
Definition thread.c:305