My Project
Loading...
Searching...
No Matches
ob.h
Go to the documentation of this file.
1/*++
3Module Name:
4
5 ob.h
7Purpose:
8
9 This module contains the header files & prototypes required for the Object Manager implementation of MatanelOS.
10
11Author:
12
13 slep (Matanel) 2025.
14
15Revision History:
16
17--*/
18
19#ifndef X86_MATANEL_OB_H
20#define X86_MATANEL_OB_H
21
22#include "core.h"
23#include "me.h"
24#include "ht.h"
25
26// --------------- STRUCTURES ---------------
27
28// Forward declare the object header
29struct _OBJECT_HEADER;
30
31// Function pointer types for object callbacks
32typedef void (*OB_DELETE_METHOD)(void* Object);
33typedef void (*OB_CLOSE_METHOD)(void* Object, void* Process, uint64_t Handle);
34typedef void (*OB_DUMP_METHOD)(void* Object);
35
36// Defines how a specific type of object behaves.
37// This struct mimics standard Windows OBJECT_TYPE_INITIALIZER
46
47typedef struct _OBJECT_TYPE {
48 DOUBLY_LINKED_LIST TypeList; // Global list of all types
49 char Name[32]; // "Process", "Thread", "Mutant"
50 uint32_t TotalNumberOfObjects; // Statistics
51 uint32_t TotalNumberOfHandles; // Statistics
52 OBJECT_TYPE_INITIALIZER TypeInfo; // Routine (init & del & dbg) information for this object
54
55// Object header (it is aligned to 16 bytes, to avoid bugs)
56typedef struct _OBJECT_HEADER {
57 uint64_t PointerCount; // Number of kernel pointers referencing this object.
58 union {
59 uint64_t HandleCount; // Number of user handles open (future)
60 volatile void* NextToFree; // If object is deferred for deletion, NextToFree is used instead of HandleCount.
61 };
62 POBJECT_TYPE Type; // Pointer to type definition.
63 uint32_t Flags;
64} __attribute__((aligned(16))) OBJECT_HEADER, *POBJECT_HEADER;
65_Static_assert(sizeof(OBJECT_HEADER) % 16 == 0, "OBJECT_HEADER must be 16-byte aligned");
66
67// Macros for arithemetic
68#define OBJECT_TO_OBJECT_HEADER(o) \
69 ((POBJECT_HEADER)((char*)(o) - sizeof(OBJECT_HEADER)))
70
71#define OBJECT_HEADER_TO_OBJECT(h) \
72 ((void*)((char*)(h) + sizeof(OBJECT_HEADER)))
73
74// --------------- FUNCTIONS ---------------
75
76typedef uint32_t ACCESS_MASK;
77
78void ObInitialize(void);
79
81 IN char* TypeName,
82 IN POBJECT_TYPE_INITIALIZER ObjectTypeInitializer,
83 OUT POBJECT_TYPE* ObjectType
84);
85
88 IN POBJECT_TYPE ObjectType,
89 IN uint32_t ObjectSize,
90 OUT void** ObjectCreated
91 //_In_Opt char* Name - When files arrive, i'll uncomment this.
92);
93
96 IN void* Object,
97 IN ACCESS_MASK DesiredAccess,
98 OUT PHANDLE ReturnedHandle
99);
100
103 IN void* Object,
104 IN ACCESS_MASK DesiredAccess,
105 OUT PHANDLE ReturnedHandle,
106 IN PHANDLE_TABLE ObjectTable
107);
108
109bool
111 IN void* Object
112);
113
116 IN void* Object,
117 IN POBJECT_TYPE DesiredType
118);
119
122 IN HANDLE Handle,
123 IN uint32_t DesiredAccess,
124 IN POBJECT_TYPE DesiredType,
125 OUT void** Object,
126 _Out_Opt PHANDLE_TABLE_ENTRY HandleInformation
127);
128
130 IN void* Object
131);
132
133#endif
#define _Out_Opt
Definition annotations.h:10
#define IN
Definition annotations.h:7
#define OUT
Definition annotations.h:8
struct _DOUBLY_LINKED_LIST DOUBLY_LINKED_LIST
uint32_t ACCESS_MASK
Definition ht.h:63
int32_t * PHANDLE
Definition ht.h:59
struct _HANDLE_TABLE_ENTRY * PHANDLE_TABLE_ENTRY
struct _HANDLE_TABLE * PHANDLE_TABLE
int32_t HANDLE
Definition ht.h:59
typedef __attribute__
Definition fat32.h:63
enum _POOL_TYPE POOL_TYPE
int32_t MTSTATUS
Definition mtstatus.h:12
MTSTATUS ObCreateHandleForObject(IN void *Object, IN ACCESS_MASK DesiredAccess, OUT PHANDLE ReturnedHandle)
Definition ob.c:318
void ObInitialize(void)
Definition ob.c:33
struct _OBJECT_TYPE * POBJECT_TYPE
void(* OB_CLOSE_METHOD)(void *Object, void *Process, uint64_t Handle)
Definition ob.h:33
struct _OBJECT_TYPE_INITIALIZER * POBJECT_TYPE_INITIALIZER
MTSTATUS ObReferenceObjectByHandle(IN HANDLE Handle, IN uint32_t DesiredAccess, IN POBJECT_TYPE DesiredType, OUT void **Object, _Out_Opt PHANDLE_TABLE_ENTRY HandleInformation)
Definition ob.c:247
struct _OBJECT_HEADER * POBJECT_HEADER
Definition ob.h:64
MTSTATUS ObReferenceObjectByPointer(IN void *Object, IN POBJECT_TYPE DesiredType)
Definition ob.c:200
MTSTATUS ObCreateHandleForObjectEx(IN void *Object, IN ACCESS_MASK DesiredAccess, OUT PHANDLE ReturnedHandle, IN PHANDLE_TABLE ObjectTable)
Definition ob.c:363
void ObDereferenceObject(IN void *Object)
Definition ob.c:446
void(* OB_DELETE_METHOD)(void *Object)
Definition ob.h:32
MTSTATUS ObCreateObjectType(IN char *TypeName, IN POBJECT_TYPE_INITIALIZER ObjectTypeInitializer, OUT POBJECT_TYPE *ObjectType)
Definition ob.c:60
bool ObReferenceObject(IN void *Object)
Definition ob.c:160
struct _OBJECT_TYPE OBJECT_TYPE
void(* OB_DUMP_METHOD)(void *Object)
Definition ob.h:34
struct _OBJECT_TYPE_INITIALIZER OBJECT_TYPE_INITIALIZER
MTSTATUS ObCreateObject(IN POBJECT_TYPE ObjectType, IN uint32_t ObjectSize, OUT void **ObjectCreated)
Definition ob.c:116
POBJECT_TYPE Type
Definition ob.h:62
uint64_t PointerCount
Definition ob.h:57
uint64_t HandleCount
Definition ob.h:59
volatile void * NextToFree
Definition ob.h:60
uint32_t Flags
Definition ob.h:63
OB_DELETE_METHOD DeleteProcedure
Definition ob.h:43
OB_CLOSE_METHOD CloseProcedure
Definition ob.h:44
OB_DUMP_METHOD DumpProcedure
Definition ob.h:42
POOL_TYPE PoolType
Definition ob.h:39
uint32_t ValidAccessRights
Definition ob.h:41
uint32_t TotalNumberOfObjects
Definition ob.h:50
uint32_t TotalNumberOfHandles
Definition ob.h:51
DOUBLY_LINKED_LIST TypeList
Definition ob.h:48
char Name[32]
Definition ob.h:49
OBJECT_TYPE_INITIALIZER TypeInfo
Definition ob.h:52