Files
exectos/xtoskrnl/ps/psmgr.cc
Aiken Harris b83aaf7cd0
Some checks failed
Builds / ExectOS (i686, release) (push) Failing after 29s
Builds / ExectOS (amd64, debug) (push) Failing after 31s
Builds / ExectOS (i686, debug) (push) Failing after 36s
Builds / ExectOS (amd64, release) (push) Failing after 37s
Register Process and Thread object types
2026-07-09 23:19:42 +02:00

81 lines
2.5 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_PERMANENT | OBJECT_EXCLUSIVE | OBJECT_OPENIF;
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);
}