- NDK 0.98, now with versionned headers. Too many changes to list, see the TinyKRNL...
[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 typedef struct _ROS_OBJECT_HEADER
35 {
36 LIST_ENTRY Entry;
37 LONG PointerCount;
38 union
39 {
40 LONG HandleCount;
41 PVOID NextToFree;
42 };
43 POBJECT_TYPE Type;
44 UCHAR NameInfoOffset;
45 UCHAR HandleInfoOffset;
46 UCHAR QuotaInfoOffset;
47 UCHAR Flags;
48 union
49 {
50 POBJECT_CREATE_INFORMATION ObjectCreateInfo;
51 PVOID QuotaBlockCharged;
52 };
53 PSECURITY_DESCRIPTOR SecurityDescriptor;
54 QUAD Body;
55 } ROS_OBJECT_HEADER, *PROS_OBJECT_HEADER;
56
57 #define BODY_TO_HEADER(objbdy) \
58 CONTAINING_RECORD((objbdy), ROS_OBJECT_HEADER, Body)
59
60 #define HEADER_TO_OBJECT_NAME(objhdr) ((POBJECT_HEADER_NAME_INFO) \
61 (!(objhdr)->NameInfoOffset ? NULL: ((PCHAR)(objhdr) - (objhdr)->NameInfoOffset)))
62
63 #define HEADER_TO_HANDLE_INFO(objhdr) ((POBJECT_HEADER_HANDLE_INFO) \
64 (!(objhdr)->HandleInfoOffset ? NULL: ((PCHAR)(objhdr) - (objhdr)->HandleInfoOffset)))
65
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))))
68
69 #define OBJECT_ALLOC_SIZE(ObjectSize) ((ObjectSize)+sizeof(ROS_OBJECT_HEADER))
70
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)
79
80 extern PDIRECTORY_OBJECT NameSpaceRoot;
81 extern POBJECT_TYPE ObSymbolicLinkType;
82 extern PHANDLE_TABLE ObpKernelHandleTable;
83
84 typedef NTSTATUS
85 (NTAPI *OB_ROS_CREATE_METHOD)(
86 PVOID ObjectBody,
87 PVOID Parent,
88 PWSTR RemainingPath,
89 struct _OBJECT_ATTRIBUTES* ObjectAttributes
90 );
91
92 typedef PVOID
93 (NTAPI *OB_ROS_FIND_METHOD)(
94 PVOID WinStaObject,
95 PWSTR Name,
96 ULONG Attributes
97 );
98
99 typedef NTSTATUS
100 (NTAPI *OB_ROS_PARSE_METHOD)(
101 PVOID Object,
102 PVOID *NextObject,
103 PUNICODE_STRING FullPath,
104 PWSTR *Path,
105 ULONG Attributes
106 );
107
108 VOID
109 NTAPI
110 ObpAddEntryDirectory(
111 PDIRECTORY_OBJECT Parent,
112 PROS_OBJECT_HEADER Header,
113 PWSTR Name
114 );
115
116 VOID
117 NTAPI
118 ObpRemoveEntryDirectory(PROS_OBJECT_HEADER Header);
119
120 VOID
121 NTAPI
122 ObInitSymbolicLinkImplementation(VOID);
123
124 NTSTATUS
125 NTAPI
126 ObpCreateHandle(
127 PVOID ObjectBody,
128 ACCESS_MASK GrantedAccess,
129 ULONG HandleAttributes,
130 PHANDLE Handle
131 );
132
133 VOID
134 NTAPI
135 ObCreateHandleTable(
136 struct _EPROCESS* Parent,
137 BOOLEAN Inherit,
138 struct _EPROCESS* Process
139 );
140
141 NTSTATUS
142 NTAPI
143 ObFindObject(
144 POBJECT_CREATE_INFORMATION ObjectCreateInfo,
145 PUNICODE_STRING ObjectName,
146 PVOID* ReturnedObject,
147 PUNICODE_STRING RemainingPath,
148 POBJECT_TYPE ObjectType
149 );
150
151 NTSTATUS
152 NTAPI
153 ObpQueryHandleAttributes(
154 HANDLE Handle,
155 POBJECT_HANDLE_ATTRIBUTE_INFORMATION HandleInfo
156 );
157
158 NTSTATUS
159 NTAPI
160 ObpSetHandleAttributes(
161 HANDLE Handle,
162 POBJECT_HANDLE_ATTRIBUTE_INFORMATION HandleInfo
163 );
164
165 NTSTATUS
166 STDCALL
167 ObpCreateTypeObject(
168 struct _OBJECT_TYPE_INITIALIZER *ObjectTypeInitializer,
169 PUNICODE_STRING TypeName,
170 POBJECT_TYPE *ObjectType
171 );
172
173 ULONG
174 NTAPI
175 ObGetObjectHandleCount(PVOID Object);
176
177 NTSTATUS
178 NTAPI
179 ObDuplicateObject(
180 PEPROCESS SourceProcess,
181 PEPROCESS TargetProcess,
182 HANDLE SourceHandle,
183 PHANDLE TargetHandle,
184 ACCESS_MASK DesiredAccess,
185 ULONG HandleAttributes,
186 ULONG Options
187 );
188
189 ULONG
190 NTAPI
191 ObpGetHandleCountByHandleTable(PHANDLE_TABLE HandleTable);
192
193 VOID
194 STDCALL
195 ObQueryDeviceMapInformation(
196 PEPROCESS Process,
197 PPROCESS_DEVICEMAP_INFORMATION DeviceMapInfo
198 );
199
200 VOID
201 FASTCALL
202 ObpSetPermanentObject(
203 IN PVOID ObjectBody,
204 IN BOOLEAN Permanent
205 );
206
207 VOID
208 STDCALL
209 ObKillProcess(PEPROCESS Process);
210
211 /* Security descriptor cache functions */
212
213 NTSTATUS
214 NTAPI
215 ObpInitSdCache(VOID);
216
217 NTSTATUS
218 NTAPI
219 ObpAddSecurityDescriptor(
220 IN PSECURITY_DESCRIPTOR SourceSD,
221 OUT PSECURITY_DESCRIPTOR *DestinationSD
222 );
223
224 NTSTATUS
225 NTAPI
226 ObpRemoveSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor);
227
228 VOID
229 NTAPI
230 ObpReferenceCachedSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor);
231
232 VOID
233 NTAPI
234 ObpDereferenceCachedSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor);
235
236 VOID
237 FASTCALL
238 ObInitializeFastReference(
239 IN PEX_FAST_REF FastRef,
240 PVOID Object
241 );
242
243 PVOID
244 FASTCALL
245 ObFastReplaceObject(
246 IN PEX_FAST_REF FastRef,
247 PVOID Object
248 );
249
250 PVOID
251 FASTCALL
252 ObFastReferenceObject(IN PEX_FAST_REF FastRef);
253
254 VOID
255 FASTCALL
256 ObFastDereferenceObject(
257 IN PEX_FAST_REF FastRef,
258 PVOID Object
259 );
260
261 /* Secure object information functions */
262
263 NTSTATUS
264 STDCALL
265 ObpCaptureObjectName(
266 IN PUNICODE_STRING CapturedName,
267 IN PUNICODE_STRING ObjectName,
268 IN KPROCESSOR_MODE AccessMode
269 );
270
271 NTSTATUS
272 STDCALL
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
279 );
280
281 VOID
282 STDCALL
283 ObpReleaseCapturedAttributes(IN POBJECT_CREATE_INFORMATION ObjectCreateInfo);
284
285 /* object information classes */
286
287
288
289 #endif /* __INCLUDE_INTERNAL_OBJMGR_H */