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
12 #define NTOS_MODE_KERNEL
15 #define TAG_OBJECT_TYPE TAG('O', 'b', 'j', 'T')
23 } COMMON_BODY_HEADER
, *PCOMMON_BODY_HEADER
;
25 typedef PVOID POBJECT
;
27 typedef struct _DIRECTORY_OBJECT
33 * PURPOSE: Head of the list of our subdirectories
37 } DIRECTORY_OBJECT
, *PDIRECTORY_OBJECT
;
39 typedef struct _SYMLINK_OBJECT
43 UNICODE_STRING TargetName
;
44 LARGE_INTEGER CreateTime
;
45 } SYMLINK_OBJECT
, *PSYMLINK_OBJECT
;
48 typedef struct _TYPE_OBJECT
53 /* pointer to object type data */
54 POBJECT_TYPE ObjectType
;
55 } TYPE_OBJECT
, *PTYPE_OBJECT
;
59 * Enumeration of object types
76 #define OBJECT_ALLOC_SIZE(ObjectSize) ((ObjectSize)+sizeof(OBJECT_HEADER)-sizeof(COMMON_BODY_HEADER))
79 extern PDIRECTORY_OBJECT NameSpaceRoot
;
80 extern POBJECT_TYPE ObSymbolicLinkType
;
83 POBJECT_HEADER
BODY_TO_HEADER(PVOID body
);
84 PVOID
HEADER_TO_BODY(POBJECT_HEADER obj
);
86 VOID
ObpAddEntryDirectory(PDIRECTORY_OBJECT Parent
,
87 POBJECT_HEADER Header
,
89 VOID
ObpRemoveEntryDirectory(POBJECT_HEADER Header
);
92 ObInitSymbolicLinkImplementation(VOID
);
95 NTSTATUS
ObCreateHandle(struct _EPROCESS
* Process
,
97 ACCESS_MASK GrantedAccess
,
100 VOID
ObCreateHandleTable(struct _EPROCESS
* Parent
,
102 struct _EPROCESS
* Process
);
103 NTSTATUS
ObFindObject(POBJECT_ATTRIBUTES ObjectAttributes
,
104 PVOID
* ReturnedObject
,
105 PUNICODE_STRING RemainingPath
,
106 POBJECT_TYPE ObjectType
);
107 VOID
ObCloseAllHandles(struct _EPROCESS
* Process
);
108 VOID
ObDeleteHandleTable(struct _EPROCESS
* Process
);
111 ObDeleteHandle(PEPROCESS Process
,
116 ObpQueryHandleAttributes(HANDLE Handle
,
117 POBJECT_HANDLE_ATTRIBUTE_INFORMATION HandleInfo
);
120 ObpSetHandleAttributes(HANDLE Handle
,
121 POBJECT_HANDLE_ATTRIBUTE_INFORMATION HandleInfo
);
124 ObpCreateTypeObject(POBJECT_TYPE ObjectType
);
127 ObGetObjectHandleCount(PVOID Object
);
129 ObDuplicateObject(PEPROCESS SourceProcess
,
130 PEPROCESS TargetProcess
,
132 PHANDLE TargetHandle
,
133 ACCESS_MASK DesiredAccess
,
134 BOOLEAN InheritHandle
,
138 ObpGetHandleCountByHandleTable(PHANDLE_TABLE HandleTable
);
142 ObQueryDeviceMapInformation(PEPROCESS Process
, PPROCESS_DEVICEMAP_INFORMATION DeviceMapInfo
);
144 /* Security descriptor cache functions */
147 ObpInitSdCache(VOID
);
150 ObpAddSecurityDescriptor(IN PSECURITY_DESCRIPTOR SourceSD
,
151 OUT PSECURITY_DESCRIPTOR
*DestinationSD
);
154 ObpRemoveSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
157 ObpReferenceCachedSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
160 ObpDereferenceCachedSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
163 #endif /* __INCLUDE_INTERNAL_OBJMGR_H */