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)
54 #define ObMarkHandleAsKernelHandle(Handle) \
55 (HANDLE)((ULONG_PTR)(Handle) | KERNEL_HANDLE_FLAG)
57 extern PDIRECTORY_OBJECT NameSpaceRoot
;
58 extern POBJECT_TYPE ObSymbolicLinkType
;
59 extern PHANDLE_TABLE ObpKernelHandleTable
;
64 PDIRECTORY_OBJECT Parent
,
65 POBJECT_HEADER Header
,
71 ObpRemoveEntryDirectory(POBJECT_HEADER Header
);
75 ObInitSymbolicLinkImplementation(VOID
);
81 ACCESS_MASK GrantedAccess
,
82 ULONG HandleAttributes
,
89 struct _EPROCESS
* Parent
,
91 struct _EPROCESS
* Process
97 POBJECT_CREATE_INFORMATION ObjectCreateInfo
,
98 PUNICODE_STRING ObjectName
,
99 PVOID
* ReturnedObject
,
100 PUNICODE_STRING RemainingPath
,
101 POBJECT_TYPE ObjectType
106 ObpQueryHandleAttributes(
108 POBJECT_HANDLE_ATTRIBUTE_INFORMATION HandleInfo
113 ObpSetHandleAttributes(
115 POBJECT_HANDLE_ATTRIBUTE_INFORMATION HandleInfo
121 struct _OBJECT_TYPE_INITIALIZER
*ObjectTypeInitializer
,
122 PUNICODE_STRING TypeName
,
123 POBJECT_TYPE
*ObjectType
128 ObGetObjectHandleCount(PVOID Object
);
133 PEPROCESS SourceProcess
,
134 PEPROCESS TargetProcess
,
136 PHANDLE TargetHandle
,
137 ACCESS_MASK DesiredAccess
,
138 ULONG HandleAttributes
,
144 ObpGetHandleCountByHandleTable(PHANDLE_TABLE HandleTable
);
148 ObQueryDeviceMapInformation(
150 PPROCESS_DEVICEMAP_INFORMATION DeviceMapInfo
155 ObpSetPermanentObject(
162 ObKillProcess(PEPROCESS Process
);
164 /* Security descriptor cache functions */
168 ObpInitSdCache(VOID
);
172 ObpAddSecurityDescriptor(
173 IN PSECURITY_DESCRIPTOR SourceSD
,
174 OUT PSECURITY_DESCRIPTOR
*DestinationSD
179 ObpRemoveSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
183 ObpReferenceCachedSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
187 ObpDereferenceCachedSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
191 ObInitializeFastReference(
192 IN PEX_FAST_REF FastRef
,
199 IN PEX_FAST_REF FastRef
,
205 ObFastReferenceObject(IN PEX_FAST_REF FastRef
);
209 ObFastDereferenceObject(
210 IN PEX_FAST_REF FastRef
,
214 /* Secure object information functions */
218 ObpCaptureObjectName(
219 IN PUNICODE_STRING CapturedName
,
220 IN PUNICODE_STRING ObjectName
,
221 IN KPROCESSOR_MODE AccessMode
226 ObpCaptureObjectAttributes(
227 IN POBJECT_ATTRIBUTES ObjectAttributes
,
228 IN KPROCESSOR_MODE AccessMode
,
229 IN POBJECT_TYPE ObjectType
,
230 IN POBJECT_CREATE_INFORMATION ObjectCreateInfo
,
231 OUT PUNICODE_STRING ObjectName
236 ObpReleaseCapturedAttributes(IN POBJECT_CREATE_INFORMATION ObjectCreateInfo
);
238 /* object information classes */
242 #endif /* __INCLUDE_INTERNAL_OBJMGR_H */