kernel
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, along with which pool type is it for allocations, and valid access rights for a handle 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
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
79
80typedef uint32_t ACCESS_MASK;
81
82void ObInitialize(void);
83
85 IN char* TypeName,
86 IN POBJECT_TYPE_INITIALIZER ObjectTypeInitializer,
87 OUT POBJECT_TYPE* ObjectType
88);
89
90
91// TODO SIDS FOR AccessMode FOR PRIVILEGE MODE
92// IF ITS KERNEL MODE - WE SKIP ACCESS CHECK
93// IF ITS USER MODE - WE CHECK SID FOR THE OBJECT TYPE, LIKE IS THIS SID ALLOWED TO OPEN THE OBJECT IN ObOpenObjectByPointer?
94// sorry caps :)
97 IN POBJECT_TYPE ObjectType,
98 IN uint32_t ObjectSize,
99 OUT void** ObjectCreated
100 //_In_Opt char* Name - When files arrive, i'll uncomment this.
101);
102
105 IN void* Object,
106 IN ACCESS_MASK DesiredAccess,
107 OUT PHANDLE ReturnedHandle
108);
109
112 IN void* Object,
113 IN ACCESS_MASK DesiredAccess,
114 OUT PHANDLE ReturnedHandle,
115 IN PHANDLE_TABLE ObjectTable
116);
117
118bool
120 IN void* Object
121);
122
125 IN void* Object,
126 IN POBJECT_TYPE DesiredType
127);
128
131 IN HANDLE Handle,
132 IN uint32_t DesiredAccess,
133 IN POBJECT_TYPE DesiredType,
134 OUT void** Object,
135 _Out_Opt PHANDLE_TABLE_ENTRY HandleInformation
136);
137
140 IN void* Object,
141 IN POBJECT_TYPE ObjectType,
142 IN ACCESS_MASK DesiredAccess,
143 OUT PHANDLE Handle
144);
145
147 IN void* Object
148);
149
150void ObDeleteObject(
151 IN POBJECT_HEADER Header
152);
153
154#endif
#define _Out_Opt
Definition annotations.h:11
#define IN
Definition annotations.h:8
#define OUT
Definition annotations.h:9
uint32_t ACCESS_MASK
Definition core.h:59
int32_t * PHANDLE
Definition core.h:58
int32_t HANDLE
Definition core.h:58
struct _DOUBLY_LINKED_LIST DOUBLY_LINKED_LIST
struct _HANDLE_TABLE_ENTRY * PHANDLE_TABLE_ENTRY
struct _HANDLE_TABLE * PHANDLE_TABLE
typedef __attribute__
Definition fat32.h:64
enum _POOL_TYPE POOL_TYPE
POBJECT_TYPE MmSectionType
Definition mminit.c:27
int32_t MTSTATUS
Definition mtstatus.h:12
MTSTATUS ObCreateHandleForObject(IN void *Object, IN ACCESS_MASK DesiredAccess, OUT PHANDLE ReturnedHandle)
Definition ob.c:403
void ObInitialize(void)
Definition ob.c:34
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:277
struct _OBJECT_HEADER * POBJECT_HEADER
Definition ob.h:64
MTSTATUS ObReferenceObjectByPointer(IN void *Object, IN POBJECT_TYPE DesiredType)
Definition ob.c:205
MTSTATUS ObCreateHandleForObjectEx(IN void *Object, IN ACCESS_MASK DesiredAccess, OUT PHANDLE ReturnedHandle, IN PHANDLE_TABLE ObjectTable)
Definition ob.c:440
void ObDereferenceObject(IN void *Object)
Definition ob.c:554
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:62
bool ObReferenceObject(IN void *Object)
Definition ob.c:163
struct _OBJECT_TYPE OBJECT_TYPE
void ObDeleteObject(IN POBJECT_HEADER Header)
Definition ob.c:529
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:118
MTSTATUS ObOpenObjectByPointer(IN void *Object, IN POBJECT_TYPE ObjectType, IN ACCESS_MASK DesiredAccess, OUT PHANDLE Handle)
Definition ob.c:252
POBJECT_TYPE PsThreadType
Definition psmgr.c:31
POBJECT_TYPE PsProcessType
Definition psmgr.c:30
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