Implement core Object Manager subsystem
This commit is contained in:
31
xtoskrnl/includes/ob/devmap.hh
Normal file
31
xtoskrnl/includes/ob/devmap.hh
Normal file
@@ -0,0 +1,31 @@
|
||||
/**
|
||||
* PROJECT: ExectOS
|
||||
* COPYRIGHT: See COPYING.md in the top level directory
|
||||
* FILE: xtoskrnl/includes/ob/devmap.hh
|
||||
* DESCRIPTION: Object Manager Device Map
|
||||
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
|
||||
*/
|
||||
|
||||
#ifndef __XTOSKRNL_OB_DEVMAP_HH
|
||||
#define __XTOSKRNL_OB_DEVMAP_HH
|
||||
|
||||
#include <xtos.hh>
|
||||
|
||||
|
||||
/* Object Manager */
|
||||
namespace OB
|
||||
{
|
||||
class DeviceMap
|
||||
{
|
||||
private:
|
||||
STATIC KPUSH_LOCK DeviceMapLock;
|
||||
STATIC BOOLEAN UniqueDeviceMaps;
|
||||
|
||||
public:
|
||||
STATIC XTAPI POBJECT_DIRECTORY GetGlobalDevicesDirectory(IN POBJECT_DIRECTORY Directory);
|
||||
STATIC XTAPI BOOLEAN GetUniqueDeviceMaps(VOID);
|
||||
STATIC XTAPI XTSTATUS InitializeDeviceMap(VOID);
|
||||
};
|
||||
}
|
||||
|
||||
#endif /* __XTOSKRNL_OB_DEVMAP_HH */
|
||||
86
xtoskrnl/includes/ob/lifecycl.hh
Normal file
86
xtoskrnl/includes/ob/lifecycl.hh
Normal file
@@ -0,0 +1,86 @@
|
||||
/**
|
||||
* PROJECT: ExectOS
|
||||
* COPYRIGHT: See COPYING.md in the top level directory
|
||||
* FILE: xtoskrnl/includes/ob/lifecycl.hh
|
||||
* DESCRIPTION: Object Manager Lifecycle Management
|
||||
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
|
||||
*/
|
||||
|
||||
#ifndef __XTOSKRNL_OB_LIFECYCL_HH
|
||||
#define __XTOSKRNL_OB_LIFECYCL_HH
|
||||
|
||||
#include <xtos.hh>
|
||||
|
||||
|
||||
/* Object Manager */
|
||||
namespace OB
|
||||
{
|
||||
class LifeCycle
|
||||
{
|
||||
private:
|
||||
STATIC PVOID RemoveObjectList;
|
||||
STATIC WORK_QUEUE_ITEM RemoveObjectWorkItem;
|
||||
|
||||
public:
|
||||
STATIC XTAPI XTSTATUS AllocateObject(IN POBJECT_CREATE_INFORMATION CreateInfo,
|
||||
IN KPROCESSOR_MODE OwnerProcessorMode,
|
||||
IN POBJECT_TYPE ObjectType,
|
||||
IN PUNICODE_STRING ObjectName,
|
||||
IN ULONG ObjectBodySize,
|
||||
OUT POBJECT_HEADER *ReturnedObjectHeader);
|
||||
STATIC XTAPI VOID DeferObjectDeletion(IN POBJECT_HEADER ObjectHeader);
|
||||
STATIC XTFASTCALL LONG_PTR DereferenceObject(IN PVOID Object);
|
||||
STATIC XTFASTCALL LONG_PTR DereferenceObject(IN PVOID Object,
|
||||
IN ULONG Count);
|
||||
STATIC XTFASTCALL LONG_PTR DereferenceObjectDeferDelete(IN PVOID Object);
|
||||
STATIC XTFASTCALL VOID DereferenceObjectNameInformation(IN POBJECT_HEADER_NAME_INFO NameInfo);
|
||||
STATIC XTFASTCALL POBJECT_HEADER_CREATOR_INFO GetObjectCreatorInformation(IN POBJECT_HEADER Header);
|
||||
STATIC XTFASTCALL POBJECT_HEADER_NAME_INFO GetObjectNameInformation(IN POBJECT_HEADER Header);
|
||||
STATIC XTAPI VOID InitializeObjectLifeCycle(VOID);
|
||||
STATIC XTFASTCALL LONG_PTR ReferenceObject(IN PVOID Object);
|
||||
STATIC XTFASTCALL LONG_PTR ReferenceObject(IN PVOID Object,
|
||||
IN ULONG Count);
|
||||
STATIC XTFASTCALL POBJECT_HEADER_NAME_INFO ReferenceObjectNameInformation(IN POBJECT_HEADER ObjectHeader);
|
||||
|
||||
private:
|
||||
STATIC XTFASTCALL PWCH AllocateObjectName(IN ULONG Length,
|
||||
IN BOOLEAN UseLookaside,
|
||||
IN OUT PUNICODE_STRING ObjectName);
|
||||
STATIC XTAPI VOID CalculateOptionalHeaderSize(IN POBJECT_CREATE_INFORMATION CreateInfo,
|
||||
IN POBJECT_TYPE ObjectType,
|
||||
IN PUNICODE_STRING ObjectName,
|
||||
OUT POBJECT_OPTIONAL_HEADER_LAYOUT Layout);
|
||||
STATIC XTAPI XTSTATUS CaptureObjectCreateInformation(IN POBJECT_TYPE ObjectType,
|
||||
IN KPROCESSOR_MODE ProcessorMode,
|
||||
IN KPROCESSOR_MODE OwnerProcessorMode,
|
||||
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
||||
IN OUT PUNICODE_STRING CapturedObjectName,
|
||||
IN POBJECT_CREATE_INFORMATION ObjectCreateInfo,
|
||||
IN BOOLEAN UseLookaside);
|
||||
STATIC XTAPI XTSTATUS CaptureObjectName(IN KPROCESSOR_MODE ProcessorMode,
|
||||
IN PUNICODE_STRING ObjectName,
|
||||
IN OUT PUNICODE_STRING CapturedObjectName,
|
||||
IN BOOLEAN UseLookaside);
|
||||
STATIC XTAPI XTSTATUS CreateObject(IN KPROCESSOR_MODE ProcessorMode,
|
||||
IN POBJECT_TYPE ObjectType,
|
||||
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
||||
IN KPROCESSOR_MODE OwnerProcessorMode,
|
||||
IN OUT PVOID ParseContext,
|
||||
IN ULONG ObjectBodySize,
|
||||
IN ULONG PagedPoolCharge,
|
||||
IN ULONG NonPagedPoolCharge,
|
||||
OUT PVOID *Object);
|
||||
STATIC XTAPI VOID DeleteObject(IN PVOID Object,
|
||||
IN BOOLEAN CalledOnWorkerThread);
|
||||
STATIC XTAPI VOID FreeObject(IN PVOID Object);
|
||||
STATIC XTFASTCALL VOID FreeObjectCreateInformation(IN POBJECT_CREATE_INFORMATION CreateInfo);
|
||||
STATIC XTFASTCALL VOID FreeObjectName(IN OUT PUNICODE_STRING ObjectName);
|
||||
STATIC XTAPI PVOID GetObjectAllocationBase(IN POBJECT_HEADER ObjectHeader);
|
||||
STATIC XTAPI VOID ProcessDeferredDeletionQueue(IN PVOID Parameter);
|
||||
STATIC XTFASTCALL VOID ReleaseObjectCreateInformation(IN POBJECT_CREATE_INFORMATION CreateInfo);
|
||||
STATIC XTAPI VOID ReturnObjectQuota(IN POBJECT_HEADER ObjectHeader,
|
||||
IN POBJECT_TYPE ObjectType);
|
||||
};
|
||||
}
|
||||
|
||||
#endif /* __XTOSKRNL_OB_LIFECYCL_HH */
|
||||
53
xtoskrnl/includes/ob/obdir.hh
Normal file
53
xtoskrnl/includes/ob/obdir.hh
Normal file
@@ -0,0 +1,53 @@
|
||||
/**
|
||||
* PROJECT: ExectOS
|
||||
* COPYRIGHT: See COPYING.md in the top level directory
|
||||
* FILE: xtoskrnl/includes/ob/obdir.hh
|
||||
* DESCRIPTION: Object Manager Security API
|
||||
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
|
||||
*/
|
||||
|
||||
#ifndef __XTOSKRNL_OB_OBDIR_HH
|
||||
#define __XTOSKRNL_OB_OBDIR_HH
|
||||
|
||||
#include <xtos.hh>
|
||||
|
||||
|
||||
/* Object Manager */
|
||||
namespace OB
|
||||
{
|
||||
class Directory
|
||||
{
|
||||
public:
|
||||
STATIC XTAPI BOOLEAN DeleteDirectoryEntry(IN POBJECT_LOOKUP_CONTEXT LookupContext);
|
||||
STATIC XTFASTCALL VOID InitializeLookupContext(OUT POBJECT_LOOKUP_CONTEXT LookupContext);
|
||||
STATIC XTAPI BOOLEAN InsertDirectoryEntry(IN OUT POBJECT_DIRECTORY Directory,
|
||||
IN POBJECT_LOOKUP_CONTEXT LookupContext,
|
||||
IN OUT POBJECT_HEADER ObjectHeader);
|
||||
STATIC XTFASTCALL VOID LockLookupContext(IN POBJECT_DIRECTORY Directory,
|
||||
IN POBJECT_LOOKUP_CONTEXT LookupContext);
|
||||
|
||||
STATIC XTAPI PVOID LookupDirectoryEntry(IN POBJECT_DIRECTORY Directory,
|
||||
IN PUNICODE_STRING Name,
|
||||
IN ULONG Attributes,
|
||||
IN BOOLEAN SearchGlobalDirectory,
|
||||
OUT POBJECT_LOOKUP_CONTEXT LookupContext);
|
||||
STATIC XTFASTCALL VOID ReleaseLookupContext(IN OUT POBJECT_LOOKUP_CONTEXT LookupContext);
|
||||
|
||||
private:
|
||||
STATIC XTFASTCALL VOID AcquireExclusiveDirectoryLock(IN OUT POBJECT_DIRECTORY Directory,
|
||||
IN OUT POBJECT_LOOKUP_CONTEXT LookupContext);
|
||||
STATIC XTFASTCALL VOID AcquireSharedDirectoryLock(IN POBJECT_DIRECTORY Directory,
|
||||
IN POBJECT_LOOKUP_CONTEXT LookupContext);
|
||||
STATIC XTFASTCALL ULONG ComputeObjectNameHash(IN PCUNICODE_STRING Name);
|
||||
STATIC XTFASTCALL VOID ReleaseDirectoryLock(IN OUT POBJECT_DIRECTORY Directory,
|
||||
IN OUT POBJECT_LOOKUP_CONTEXT LookupContext);
|
||||
STATIC XTFASTCALL VOID ReleaseLookupContextObject(IN OUT POBJECT_LOOKUP_CONTEXT LookupContext);
|
||||
STATIC XTFASTCALL PVOID SearchDirectory(IN POBJECT_DIRECTORY Directory,
|
||||
IN PCUNICODE_STRING Name,
|
||||
IN BOOLEAN CaseInsensitive,
|
||||
IN ULONG HashIndex,
|
||||
IN POBJECT_LOOKUP_CONTEXT LookupContext);
|
||||
};
|
||||
}
|
||||
|
||||
#endif /* __XTOSKRNL_OB_OBDIR_HH */
|
||||
30
xtoskrnl/includes/ob/obmgr.hh
Normal file
30
xtoskrnl/includes/ob/obmgr.hh
Normal file
@@ -0,0 +1,30 @@
|
||||
/**
|
||||
* PROJECT: ExectOS
|
||||
* COPYRIGHT: See COPYING.md in the top level directory
|
||||
* FILE: xtoskrnl/includes/ob/obmgr.hh
|
||||
* DESCRIPTION: Object Manager
|
||||
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
|
||||
*/
|
||||
|
||||
#ifndef __XTOSKRNL_OB_OBMGR_HH
|
||||
#define __XTOSKRNL_OB_OBMGR_HH
|
||||
|
||||
#include <xtos.hh>
|
||||
|
||||
|
||||
/* Object Manager */
|
||||
namespace OB
|
||||
{
|
||||
class Manager
|
||||
{
|
||||
private:
|
||||
STATIC GENERAL_LOOKASIDE CreateInfoList;
|
||||
STATIC GENERAL_LOOKASIDE NameBufferList;
|
||||
|
||||
public:
|
||||
STATIC XTAPI XTSTATUS InitializeObjectManager(VOID);
|
||||
STATIC XTAPI VOID InitializeSystemLookasideList(VOID);
|
||||
};
|
||||
}
|
||||
|
||||
#endif /* __XTOSKRNL_OB_OBMGR_HH */
|
||||
32
xtoskrnl/includes/ob/security.hh
Normal file
32
xtoskrnl/includes/ob/security.hh
Normal file
@@ -0,0 +1,32 @@
|
||||
/**
|
||||
* PROJECT: ExectOS
|
||||
* COPYRIGHT: See COPYING.md in the top level directory
|
||||
* FILE: xtoskrnl/includes/ob/security.hh
|
||||
* DESCRIPTION: Object Manager Security API
|
||||
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
|
||||
*/
|
||||
|
||||
#ifndef __XTOSKRNL_OB_SECURITY_HH
|
||||
#define __XTOSKRNL_OB_SECURITY_HH
|
||||
|
||||
#include <xtos.hh>
|
||||
|
||||
|
||||
/* Object Manager */
|
||||
namespace OB
|
||||
{
|
||||
class Security
|
||||
{
|
||||
public:
|
||||
STATIC XTAPI XTSTATUS ProcessObjectSecurityDescriptor(IN PVOID Object,
|
||||
IN SECURITY_OPERATION_CODE OperationCode,
|
||||
IN PSECURITY_INFORMATION SecurityInformation,
|
||||
IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
|
||||
IN OUT PULONG Length,
|
||||
IN OUT PSECURITY_DESCRIPTOR *OldSecurityDescriptor,
|
||||
IN MMPOOL_TYPE PoolType,
|
||||
IN PGENERIC_MAPPING GenericMapping);
|
||||
};
|
||||
}
|
||||
|
||||
#endif /* __XTOSKRNL_OB_SECURITY_HH */
|
||||
44
xtoskrnl/includes/ob/typereg.hh
Normal file
44
xtoskrnl/includes/ob/typereg.hh
Normal file
@@ -0,0 +1,44 @@
|
||||
/**
|
||||
* PROJECT: ExectOS
|
||||
* COPYRIGHT: See COPYING.md in the top level directory
|
||||
* FILE: xtoskrnl/includes/ob/typereg.hh
|
||||
* DESCRIPTION: Object Manager Type Registry
|
||||
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
|
||||
*/
|
||||
|
||||
#ifndef __XTOSKRNL_OB_TYPEREG_HH
|
||||
#define __XTOSKRNL_OB_TYPEREG_HH
|
||||
|
||||
#include <xtos.hh>
|
||||
|
||||
|
||||
/* Object Manager */
|
||||
namespace OB
|
||||
{
|
||||
class TypeRegistry
|
||||
{
|
||||
private:
|
||||
STATIC KEVENT DefaultEvent;
|
||||
STATIC POBJECT_TYPE MasterObjectType;
|
||||
STATIC POBJECT_DIRECTORY ObjectTypeDirectory;
|
||||
STATIC POBJECT_TYPE ObjectTypesTable[OBJECT_MAX_DEFINED_OBJECT_TYPES];
|
||||
|
||||
public:
|
||||
STATIC XTAPI XTSTATUS CreateObjectType(IN PUNICODE_STRING TypeName,
|
||||
IN POBJECT_TYPE_INITIALIZER ObjectTypeInitializer,
|
||||
IN PSECURITY_DESCRIPTOR SecurityDescriptor,
|
||||
OUT POBJECT_TYPE *ObjectType);
|
||||
STATIC XTAPI VOID DeleteObjectType(IN PVOID Object);
|
||||
STATIC XTAPI XTSTATUS InitializeObjectTypeRegistry(VOID);
|
||||
|
||||
private:
|
||||
STATIC XTAPI ULONG GenerateObjectPoolTag(IN PUNICODE_STRING TypeName);
|
||||
STATIC XTAPI VOID InitializeObjectType(IN OUT POBJECT_TYPE ObjectType,
|
||||
IN POBJECT_TYPE_INITIALIZER Initializer,
|
||||
IN PUNICODE_STRING ObjectName);
|
||||
STATIC XTAPI XTSTATUS ValidateObjectTypeParameters(IN PUNICODE_STRING TypeName,
|
||||
IN POBJECT_TYPE_INITIALIZER Initializer);
|
||||
};
|
||||
}
|
||||
|
||||
#endif /* __XTOSKRNL_OB_TYPEREG_HH */
|
||||
Reference in New Issue
Block a user