ptos: ps: Add process init logic

Signed-off-by: Chloe M <chloe@mensia.org>
This commit is contained in:
2026-07-13 22:01:39 -04:00
parent 27b7e930fa
commit 9d7ff0461f
2 changed files with 97 additions and 0 deletions
+46
View File
@@ -0,0 +1,46 @@
/*
* Copyright (c) 2026, Chloe M.
* Provided under the BSD-3 clause.
*
* Description: Process management
* Author: Chloe M.
*/
#ifndef _PS_PROCESS_H_
#define _PS_PROCESS_H_ 1
#include <ptapi/status.h>
#include <ptdef.h>
/* Maximum length of process name */
#define PS_NAME_MAX 64
/* Pool tag for process allocations */
#define PS_POOL_TAG 'PS'
/* Process flags */
#define PS_USER BIT(0) /* Set if user-level */
/*
* Represents a running process on the machine
*
* @Name: Name of process
* @Pid: Process ID
* @Flags: Initialization flags
*/
typedef struct {
CHAR Name[PS_NAME_MAX];
UQUAD Pid;
ULONG Flags;
} PROCESS;
/*
* Allocate and create a new process descriptor
*
* @Name: Name of process
* @Flags: Initialization flags of process
* @Result: Result is written here
*/
PT_STATUS PsCreateProcess(const CHAR *Name, ULONG Flags, PROCESS **Result);
#endif /* !_PS_PROCESS_H_ */
+51
View File
@@ -0,0 +1,51 @@
/*
* Copyright (c) 2026, Chloe M.
* Provided under the BSD-3 clause.
*
* Description: Process management
* Author: Chloe M.
*/
#include <ps/process.h>
#include <ex/pool.h>
#include <string.h>
#include <atomic.h>
static UQUAD ProcessId = 0;
PT_STATUS
PsCreateProcess(const CHAR *Name, ULONG Flags, PROCESS **Result)
{
USIZE NameLen;
PROCESS *Process;
if (Name == NULL || Result == NULL) {
return STATUS_INVALID_PARAM;
}
/* TODO: Support user-level processes */
if (ISSET(Flags, PS_USER)) {
return STATUS_NOT_SUPPORTED;
}
NameLen = RtlStrLen(Name);
if (NameLen >= PS_NAME_MAX - 1) {
return STATUS_NAME_TOO_LONG;
}
Process = ExAllocatePoolWithTag(
POOL_NON_PAGED,
sizeof(*Process),
PS_POOL_TAG
);
if (Process == NULL) {
return STATUS_NO_MEMORY;
}
RtlMemCpy(Process->Name, Name, NameLen);
Process->Pid = AtomicIncQuad(&ProcessId);
Process->Flags = Flags;
*Result = Process;
return STATUS_SUCCESS;
}