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 typedef struct _ROS_OBJECT_HEADER
45 UCHAR HandleInfoOffset
;
46 UCHAR QuotaInfoOffset
;
50 POBJECT_CREATE_INFORMATION ObjectCreateInfo
;
51 PVOID QuotaBlockCharged
;
53 PSECURITY_DESCRIPTOR SecurityDescriptor
;
55 } ROS_OBJECT_HEADER
, *PROS_OBJECT_HEADER
;
57 #define BODY_TO_HEADER(objbdy) \
58 CONTAINING_RECORD((objbdy), ROS_OBJECT_HEADER, Body)
60 #define HEADER_TO_OBJECT_NAME(objhdr) ((POBJECT_HEADER_NAME_INFO) \
61 (!(objhdr)->NameInfoOffset ? NULL: ((PCHAR)(objhdr) - (objhdr)->NameInfoOffset)))
63 #define HEADER_TO_HANDLE_INFO(objhdr) ((POBJECT_HEADER_HANDLE_INFO) \
64 (!(objhdr)->HandleInfoOffset ? NULL: ((PCHAR)(objhdr) - (objhdr)->HandleInfoOffset)))
66 #define HEADER_TO_CREATOR_INFO(objhdr) ((POBJECT_HEADER_CREATOR_INFO) \
67 (!((objhdr)->Flags & OB_FLAG_CREATOR_INFO) ? NULL: ((PCHAR)(objhdr) - sizeof(OBJECT_HEADER_CREATOR_INFO))))
69 #define OBJECT_ALLOC_SIZE(ObjectSize) ((ObjectSize)+sizeof(ROS_OBJECT_HEADER))
71 #define KERNEL_HANDLE_FLAG (1 << ((sizeof(HANDLE) * 8) - 1))
72 #define ObIsKernelHandle(Handle, ProcessorMode) \
73 (((ULONG_PTR)(Handle) & KERNEL_HANDLE_FLAG) && \
74 ((ProcessorMode) == KernelMode))
75 #define ObKernelHandleToHandle(Handle) \
76 (HANDLE)((ULONG_PTR)(Handle) & ~KERNEL_HANDLE_FLAG)
77 #define ObMarkHandleAsKernelHandle(Handle) \
78 (HANDLE)((ULONG_PTR)(Handle) | KERNEL_HANDLE_FLAG)
80 extern PDIRECTORY_OBJECT NameSpaceRoot
;
81 extern POBJECT_TYPE ObSymbolicLinkType
;
82 extern PHANDLE_TABLE ObpKernelHandleTable
;
85 (NTAPI
*OB_ROS_CREATE_METHOD
)(
89 struct _OBJECT_ATTRIBUTES
* ObjectAttributes
93 (NTAPI
*OB_ROS_FIND_METHOD
)(
100 (NTAPI
*OB_ROS_PARSE_METHOD
)(
103 PUNICODE_STRING FullPath
,
110 ObpAddEntryDirectory(
111 PDIRECTORY_OBJECT Parent
,
112 PROS_OBJECT_HEADER Header
,
118 ObpRemoveEntryDirectory(PROS_OBJECT_HEADER Header
);
122 ObInitSymbolicLinkImplementation(VOID
);
128 ACCESS_MASK GrantedAccess
,
129 ULONG HandleAttributes
,
136 struct _EPROCESS
* Parent
,
138 struct _EPROCESS
* Process
144 POBJECT_CREATE_INFORMATION ObjectCreateInfo
,
145 PUNICODE_STRING ObjectName
,
146 PVOID
* ReturnedObject
,
147 PUNICODE_STRING RemainingPath
,
148 POBJECT_TYPE ObjectType
153 ObpQueryHandleAttributes(
155 POBJECT_HANDLE_ATTRIBUTE_INFORMATION HandleInfo
160 ObpSetHandleAttributes(
162 POBJECT_HANDLE_ATTRIBUTE_INFORMATION HandleInfo
168 struct _OBJECT_TYPE_INITIALIZER
*ObjectTypeInitializer
,
169 PUNICODE_STRING TypeName
,
170 POBJECT_TYPE
*ObjectType
175 ObGetObjectHandleCount(PVOID Object
);
180 PEPROCESS SourceProcess
,
181 PEPROCESS TargetProcess
,
183 PHANDLE TargetHandle
,
184 ACCESS_MASK DesiredAccess
,
185 ULONG HandleAttributes
,
191 ObpGetHandleCountByHandleTable(PHANDLE_TABLE HandleTable
);
195 ObQueryDeviceMapInformation(
197 PPROCESS_DEVICEMAP_INFORMATION DeviceMapInfo
202 ObpSetPermanentObject(
209 ObKillProcess(PEPROCESS Process
);
211 /* Security descriptor cache functions */
215 ObpInitSdCache(VOID
);
219 ObpAddSecurityDescriptor(
220 IN PSECURITY_DESCRIPTOR SourceSD
,
221 OUT PSECURITY_DESCRIPTOR
*DestinationSD
226 ObpRemoveSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
230 ObpReferenceCachedSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
234 ObpDereferenceCachedSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
238 ObInitializeFastReference(
239 IN PEX_FAST_REF FastRef
,
246 IN PEX_FAST_REF FastRef
,
252 ObFastReferenceObject(IN PEX_FAST_REF FastRef
);
256 ObFastDereferenceObject(
257 IN PEX_FAST_REF FastRef
,
261 /* Secure object information functions */
265 ObpCaptureObjectName(
266 IN PUNICODE_STRING CapturedName
,
267 IN PUNICODE_STRING ObjectName
,
268 IN KPROCESSOR_MODE AccessMode
273 ObpCaptureObjectAttributes(
274 IN POBJECT_ATTRIBUTES ObjectAttributes
,
275 IN KPROCESSOR_MODE AccessMode
,
276 IN POBJECT_TYPE ObjectType
,
277 IN POBJECT_CREATE_INFORMATION ObjectCreateInfo
,
278 OUT PUNICODE_STRING ObjectName
283 ObpReleaseCapturedAttributes(IN POBJECT_CREATE_INFORMATION ObjectCreateInfo
);
285 /* object information classes */
289 #endif /* __INCLUDE_INTERNAL_OBJMGR_H */