Files
exectos/xtoskrnl/ps/psmgr.cc
Aiken Harris 6b840939d5
Some checks failed
Builds / ExectOS (amd64, debug) (push) Failing after 37s
Builds / ExectOS (amd64, release) (push) Failing after 27s
Builds / ExectOS (i686, release) (push) Failing after 26s
Builds / ExectOS (i686, debug) (push) Failing after 34s
Initialize initial system process and idle process during PS initialization
2026-07-14 21:42:54 +02:00

90 lines
2.8 KiB
C++

/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/ps/psmgr.cc
* DESCRIPTION: Process Manager
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#include <xtos.hh>
/**
* Retrieves the global object type descriptor for Process objects.
*
* @return This routine returns a pointer to the process object type structure.
*
* @since XT 1.0
*/
XTFASTCALL
POBJECT_TYPE
PS::ProcessManager::GetProcessType(VOID)
{
/* Return the process object type descriptor */
return ProcessType;
}
/**
* Retrieves the global object type descriptor for Thread objects.
*
* @return This routine returns a pointer to the thread object type structure.
*
* @since XT 1.0
*/
XTFASTCALL
POBJECT_TYPE
PS::ProcessManager::GetThreadType(VOID)
{
/* Return the thread object type descriptor */
return ThreadType;
}
/**
* Initializes the Process Manager subsystem.
*
* @return This routine does not return any value.
*
* @since XT 1.0
*/
XTAPI
VOID
PS::ProcessManager::InitializeProcessManager(VOID)
{
OBJECT_TYPE_INITIALIZER ObjectTypeInitializer;
UNICODE_STRING ObjectTypeName;
/* Clear the object type initializer */
RTL::Memory::ZeroMemory(&ObjectTypeInitializer, sizeof(ObjectTypeInitializer));
/* Initialize common attributes */
ObjectTypeInitializer.InvalidAttributes = OBJECT_EXCLUSIVE | OBJECT_OPENIF | OBJECT_PERMANENT;
ObjectTypeInitializer.Length = sizeof(ObjectTypeInitializer);
ObjectTypeInitializer.PoolType = NonPagedPool;
ObjectTypeInitializer.SecurityRequired = TRUE;
/* Initialize the Process object type */
RTL::Unicode::InitializeString(&ObjectTypeName, L"Process");
ObjectTypeInitializer.DefaultNonPagedPoolCharge = sizeof(EPROCESS);
ObjectTypeInitializer.DeleteProcedure = PS::Process::DeleteProcess;
ObjectTypeInitializer.GenericMapping = PS_PROCESS_GENERIC_MAPPING;
ObjectTypeInitializer.ValidAccessMask = SE_PROCESS_ALL_ACCESS;
OB::TypeRegistry::CreateObjectType(&ObjectTypeName, &ObjectTypeInitializer, NULLPTR, &ProcessType);
/* Initialize the Thread object type */
RTL::Unicode::InitializeString(&ObjectTypeName, L"Thread");
ObjectTypeInitializer.DefaultNonPagedPoolCharge = sizeof(ETHREAD);
ObjectTypeInitializer.DeleteProcedure = PS::Thread::DeleteThread;
ObjectTypeInitializer.GenericMapping = PS_THREAD_GENERIC_MAPPING;
ObjectTypeInitializer.ValidAccessMask = SE_THREAD_ALL_ACCESS;
OB::TypeRegistry::CreateObjectType(&ObjectTypeName, &ObjectTypeInitializer, NULLPTR, &ThreadType);
/* Initialize system quota */
PS::Quota::InitializeQuota();
/* Create system process */
PS::Process::CreateInitialSystemProcess();
/* Initialize IDLE process */
PS::Process::InitializeIdleProcess();
}