2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * FILE: include/internal/objmgr.h
5 * PURPOSE: Object manager definitions
6 * PROGRAMMER: David Welch (welch@mcmail.com)
9 #ifndef __INCLUDE_INTERNAL_OBJMGR_H
10 #define __INCLUDE_INTERNAL_OBJMGR_H
14 typedef struct _DIRECTORY_OBJECT
20 * PURPOSE: Head of the list of our subdirectories
24 } DIRECTORY_OBJECT
, *PDIRECTORY_OBJECT
;
26 typedef struct _SYMLINK_OBJECT
30 UNICODE_STRING TargetName
;
31 LARGE_INTEGER CreateTime
;
32 } SYMLINK_OBJECT
, *PSYMLINK_OBJECT
;
34 #define BODY_TO_HEADER(objbdy) \
35 CONTAINING_RECORD((objbdy), OBJECT_HEADER, Body)
37 #define HEADER_TO_OBJECT_NAME(objhdr) ((POBJECT_HEADER_NAME_INFO) \
38 (!(objhdr)->NameInfoOffset ? NULL: ((PCHAR)(objhdr) - (objhdr)->NameInfoOffset)))
40 #define HEADER_TO_HANDLE_INFO(objhdr) ((POBJECT_HEADER_HANDLE_INFO) \
41 (!(objhdr)->HandleInfoOffset ? NULL: ((PCHAR)(objhdr) - (objhdr)->HandleInfoOffset)))
43 #define HEADER_TO_CREATOR_INFO(objhdr) ((POBJECT_HEADER_CREATOR_INFO) \
44 (!((objhdr)->Flags & OB_FLAG_CREATOR_INFO) ? NULL: ((PCHAR)(objhdr) - sizeof(OBJECT_HEADER_CREATOR_INFO))))
46 #define OBJECT_ALLOC_SIZE(ObjectSize) ((ObjectSize)+sizeof(OBJECT_HEADER))
48 #define KERNEL_HANDLE_FLAG (1 << ((sizeof(HANDLE) * 8) - 1))
49 #define ObIsKernelHandle(Handle, ProcessorMode) \
50 (((ULONG_PTR)(Handle) & KERNEL_HANDLE_FLAG) && \
51 ((ProcessorMode) == KernelMode))
52 #define ObKernelHandleToHandle(Handle) \
53 (HANDLE)((ULONG_PTR)(Handle) & ~KERNEL_HANDLE_FLAG)
55 extern PDIRECTORY_OBJECT NameSpaceRoot
;
56 extern POBJECT_TYPE ObSymbolicLinkType
;
57 extern PHANDLE_TABLE ObpKernelHandleTable
;
62 PDIRECTORY_OBJECT Parent
,
63 POBJECT_HEADER Header
,
69 ObpRemoveEntryDirectory(POBJECT_HEADER Header
);
73 ObInitSymbolicLinkImplementation(VOID
);
78 struct _EPROCESS
* Process
,
80 ACCESS_MASK GrantedAccess
,
88 struct _EPROCESS
* Parent
,
90 struct _EPROCESS
* Process
96 POBJECT_CREATE_INFORMATION ObjectCreateInfo
,
97 PUNICODE_STRING ObjectName
,
98 PVOID
* ReturnedObject
,
99 PUNICODE_STRING RemainingPath
,
100 POBJECT_TYPE ObjectType
105 ObpQueryHandleAttributes(
107 POBJECT_HANDLE_ATTRIBUTE_INFORMATION HandleInfo
112 ObpSetHandleAttributes(
114 POBJECT_HANDLE_ATTRIBUTE_INFORMATION HandleInfo
120 struct _OBJECT_TYPE_INITIALIZER
*ObjectTypeInitializer
,
121 PUNICODE_STRING TypeName
,
122 POBJECT_TYPE
*ObjectType
127 ObGetObjectHandleCount(PVOID Object
);
132 PEPROCESS SourceProcess
,
133 PEPROCESS TargetProcess
,
135 PHANDLE TargetHandle
,
136 ACCESS_MASK DesiredAccess
,
137 BOOLEAN InheritHandle
,
143 ObpGetHandleCountByHandleTable(PHANDLE_TABLE HandleTable
);
147 ObQueryDeviceMapInformation(
149 PPROCESS_DEVICEMAP_INFORMATION DeviceMapInfo
154 ObpSetPermanentObject(
161 ObKillProcess(PEPROCESS Process
);
163 /* Security descriptor cache functions */
167 ObpInitSdCache(VOID
);
171 ObpAddSecurityDescriptor(
172 IN PSECURITY_DESCRIPTOR SourceSD
,
173 OUT PSECURITY_DESCRIPTOR
*DestinationSD
178 ObpRemoveSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
182 ObpReferenceCachedSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
186 ObpDereferenceCachedSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
190 ObInitializeFastReference(
191 IN PEX_FAST_REF FastRef
,
198 IN PEX_FAST_REF FastRef
,
204 ObFastReferenceObject(IN PEX_FAST_REF FastRef
);
208 ObFastDereferenceObject(
209 IN PEX_FAST_REF FastRef
,
213 /* Secure object information functions */
217 ObpCaptureObjectName(
218 IN PUNICODE_STRING CapturedName
,
219 IN PUNICODE_STRING ObjectName
,
220 IN KPROCESSOR_MODE AccessMode
225 ObpCaptureObjectAttributes(
226 IN POBJECT_ATTRIBUTES ObjectAttributes
,
227 IN KPROCESSOR_MODE AccessMode
,
228 IN POBJECT_TYPE ObjectType
,
229 IN POBJECT_CREATE_INFORMATION ObjectCreateInfo
,
230 OUT PUNICODE_STRING ObjectName
235 ObpReleaseCapturedAttributes(IN POBJECT_CREATE_INFORMATION ObjectCreateInfo
);
237 /* object information classes */
241 #endif /* __INCLUDE_INTERNAL_OBJMGR_H */