From 1601bfe87b7ed7479fb9d213181e61eca02780d4 Mon Sep 17 00:00:00 2001 From: "Chloe M." Date: Tue, 14 Jul 2026 21:27:44 +0000 Subject: [PATCH] ptos: ps: Add new VAS per-process Signed-off-by: Chloe M. --- service/ptos/head/ps/process.h | 3 +++ service/ptos/ps/process.c | 10 ++++++++++ 2 files changed, 13 insertions(+) diff --git a/service/ptos/head/ps/process.h b/service/ptos/head/ps/process.h index ef179ea..d86dcd9 100644 --- a/service/ptos/head/ps/process.h +++ b/service/ptos/head/ps/process.h @@ -9,6 +9,7 @@ #ifndef _PS_PROCESS_H_ #define _PS_PROCESS_H_ 1 +#include #include #include @@ -27,11 +28,13 @@ * @Name: Name of process * @Pid: Process ID * @Flags: Initialization flags + * @Vas: Virtual address space of process */ typedef struct _PROCESS { CHAR Name[PS_NAME_MAX]; UQUAD Pid; ULONG Flags; + MMU_VAS Vas; } PROCESS; /* diff --git a/service/ptos/ps/process.c b/service/ptos/ps/process.c index 38884e5..9c0f47c 100644 --- a/service/ptos/ps/process.c +++ b/service/ptos/ps/process.c @@ -18,6 +18,8 @@ PsCreateProcess(const CHAR *Name, ULONG Flags, PROCESS **Result) { USIZE NameLen; PROCESS *Process; + MMU_VAS CurrentVas; + PT_STATUS Status; if (Name == NULL || Result == NULL) { return STATUS_INVALID_PARAM; @@ -43,6 +45,14 @@ PsCreateProcess(const CHAR *Name, ULONG Flags, PROCESS **Result) return STATUS_NO_MEMORY; } + /* Fork a new VAS */ + HalMmuReadVas(&CurrentVas); + Status = HalMmuForkVas(&CurrentVas, &Process->Vas); + if (PT_ERROR(Status)) { + ExFreePoolWithTag(Process, PS_POOL_TAG); + return Status; + } + RtlMemCpy(Process->Name, Name, NameLen); Process->Pid = AtomicIncQuad(&ProcessId); Process->Flags = Flags;