b24bebfea949cfad519f51946d7ced6cd843209a
[reactos.git] / reactos / ntoskrnl / include / internal / ob.h
1 /*
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)
7 */
8
9 #ifndef __INCLUDE_INTERNAL_OBJMGR_H
10 #define __INCLUDE_INTERNAL_OBJMGR_H
11
12 struct _EPROCESS;
13
14 typedef struct _DIRECTORY_OBJECT
15 {
16 CSHORT Type;
17 CSHORT Size;
18
19 /*
20 * PURPOSE: Head of the list of our subdirectories
21 */
22 LIST_ENTRY head;
23 KSPIN_LOCK Lock;
24 } DIRECTORY_OBJECT, *PDIRECTORY_OBJECT;
25
26 typedef struct _SYMLINK_OBJECT
27 {
28 CSHORT Type;
29 CSHORT Size;
30 UNICODE_STRING TargetName;
31 LARGE_INTEGER CreateTime;
32 } SYMLINK_OBJECT, *PSYMLINK_OBJECT;
33
34 #define BODY_TO_HEADER(objbdy) \
35 CONTAINING_RECORD((objbdy), OBJECT_HEADER, Body)
36
37 #define HEADER_TO_OBJECT_NAME(objhdr) ((POBJECT_HEADER_NAME_INFO) \
38 (!(objhdr)->NameInfoOffset ? NULL: ((PCHAR)(objhdr) - (objhdr)->NameInfoOffset)))
39
40 #define HEADER_TO_HANDLE_INFO(objhdr) ((POBJECT_HEADER_HANDLE_INFO) \
41 (!(objhdr)->HandleInfoOffset ? NULL: ((PCHAR)(objhdr) - (objhdr)->HandleInfoOffset)))
42
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))))
45
46 #define OBJECT_ALLOC_SIZE(ObjectSize) ((ObjectSize)+sizeof(OBJECT_HEADER))
47
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)
56
57 extern PDIRECTORY_OBJECT NameSpaceRoot;
58 extern POBJECT_TYPE ObSymbolicLinkType;
59 extern PHANDLE_TABLE ObpKernelHandleTable;
60
61 VOID
62 NTAPI
63 ObpAddEntryDirectory(
64 PDIRECTORY_OBJECT Parent,
65 POBJECT_HEADER Header,
66 PWSTR Name
67 );
68
69 VOID
70 NTAPI
71 ObpRemoveEntryDirectory(POBJECT_HEADER Header);
72
73 VOID
74 NTAPI
75 ObInitSymbolicLinkImplementation(VOID);
76
77 NTSTATUS
78 NTAPI
79 ObpCreateHandle(
80 PVOID ObjectBody,
81 ACCESS_MASK GrantedAccess,
82 ULONG HandleAttributes,
83 PHANDLE Handle
84 );
85
86 VOID
87 NTAPI
88 ObCreateHandleTable(
89 struct _EPROCESS* Parent,
90 BOOLEAN Inherit,
91 struct _EPROCESS* Process
92 );
93
94 NTSTATUS
95 NTAPI
96 ObFindObject(
97 POBJECT_CREATE_INFORMATION ObjectCreateInfo,
98 PUNICODE_STRING ObjectName,
99 PVOID* ReturnedObject,
100 PUNICODE_STRING RemainingPath,
101 POBJECT_TYPE ObjectType
102 );
103
104 NTSTATUS
105 NTAPI
106 ObpQueryHandleAttributes(
107 HANDLE Handle,
108 POBJECT_HANDLE_ATTRIBUTE_INFORMATION HandleInfo
109 );
110
111 NTSTATUS
112 NTAPI
113 ObpSetHandleAttributes(
114 HANDLE Handle,
115 POBJECT_HANDLE_ATTRIBUTE_INFORMATION HandleInfo
116 );
117
118 NTSTATUS
119 STDCALL
120 ObpCreateTypeObject(
121 struct _OBJECT_TYPE_INITIALIZER *ObjectTypeInitializer,
122 PUNICODE_STRING TypeName,
123 POBJECT_TYPE *ObjectType
124 );
125
126 ULONG
127 NTAPI
128 ObGetObjectHandleCount(PVOID Object);
129
130 NTSTATUS
131 NTAPI
132 ObDuplicateObject(
133 PEPROCESS SourceProcess,
134 PEPROCESS TargetProcess,
135 HANDLE SourceHandle,
136 PHANDLE TargetHandle,
137 ACCESS_MASK DesiredAccess,
138 ULONG HandleAttributes,
139 ULONG Options
140 );
141
142 ULONG
143 NTAPI
144 ObpGetHandleCountByHandleTable(PHANDLE_TABLE HandleTable);
145
146 VOID
147 STDCALL
148 ObQueryDeviceMapInformation(
149 PEPROCESS Process,
150 PPROCESS_DEVICEMAP_INFORMATION DeviceMapInfo
151 );
152
153 VOID
154 FASTCALL
155 ObpSetPermanentObject(
156 IN PVOID ObjectBody,
157 IN BOOLEAN Permanent
158 );
159
160 VOID
161 STDCALL
162 ObKillProcess(PEPROCESS Process);
163
164 /* Security descriptor cache functions */
165
166 NTSTATUS
167 NTAPI
168 ObpInitSdCache(VOID);
169
170 NTSTATUS
171 NTAPI
172 ObpAddSecurityDescriptor(
173 IN PSECURITY_DESCRIPTOR SourceSD,
174 OUT PSECURITY_DESCRIPTOR *DestinationSD
175 );
176
177 NTSTATUS
178 NTAPI
179 ObpRemoveSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor);
180
181 VOID
182 NTAPI
183 ObpReferenceCachedSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor);
184
185 VOID
186 NTAPI
187 ObpDereferenceCachedSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor);
188
189 VOID
190 FASTCALL
191 ObInitializeFastReference(
192 IN PEX_FAST_REF FastRef,
193 PVOID Object
194 );
195
196 PVOID
197 FASTCALL
198 ObFastReplaceObject(
199 IN PEX_FAST_REF FastRef,
200 PVOID Object
201 );
202
203 PVOID
204 FASTCALL
205 ObFastReferenceObject(IN PEX_FAST_REF FastRef);
206
207 VOID
208 FASTCALL
209 ObFastDereferenceObject(
210 IN PEX_FAST_REF FastRef,
211 PVOID Object
212 );
213
214 /* Secure object information functions */
215
216 NTSTATUS
217 STDCALL
218 ObpCaptureObjectName(
219 IN PUNICODE_STRING CapturedName,
220 IN PUNICODE_STRING ObjectName,
221 IN KPROCESSOR_MODE AccessMode
222 );
223
224 NTSTATUS
225 STDCALL
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
232 );
233
234 VOID
235 STDCALL
236 ObpReleaseCapturedAttributes(IN POBJECT_CREATE_INFORMATION ObjectCreateInfo);
237
238 /* object information classes */
239
240
241
242 #endif /* __INCLUDE_INTERNAL_OBJMGR_H */