convert DefaultSetInfoBufferCheck and DefaultQueryInfoBufferCheck to inlined functions
[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
55 extern PDIRECTORY_OBJECT NameSpaceRoot;
56 extern POBJECT_TYPE ObSymbolicLinkType;
57 extern PHANDLE_TABLE ObpKernelHandleTable;
58
59 VOID
60 NTAPI
61 ObpAddEntryDirectory(
62 PDIRECTORY_OBJECT Parent,
63 POBJECT_HEADER Header,
64 PWSTR Name
65 );
66
67 VOID
68 NTAPI
69 ObpRemoveEntryDirectory(POBJECT_HEADER Header);
70
71 VOID
72 NTAPI
73 ObInitSymbolicLinkImplementation(VOID);
74
75 NTSTATUS
76 NTAPI
77 ObpCreateHandle(
78 struct _EPROCESS* Process,
79 PVOID ObjectBody,
80 ACCESS_MASK GrantedAccess,
81 BOOLEAN Inherit,
82 PHANDLE Handle
83 );
84
85 VOID
86 NTAPI
87 ObCreateHandleTable(
88 struct _EPROCESS* Parent,
89 BOOLEAN Inherit,
90 struct _EPROCESS* Process
91 );
92
93 NTSTATUS
94 NTAPI
95 ObFindObject(
96 POBJECT_CREATE_INFORMATION ObjectCreateInfo,
97 PUNICODE_STRING ObjectName,
98 PVOID* ReturnedObject,
99 PUNICODE_STRING RemainingPath,
100 POBJECT_TYPE ObjectType
101 );
102
103 NTSTATUS
104 NTAPI
105 ObpQueryHandleAttributes(
106 HANDLE Handle,
107 POBJECT_HANDLE_ATTRIBUTE_INFORMATION HandleInfo
108 );
109
110 NTSTATUS
111 NTAPI
112 ObpSetHandleAttributes(
113 HANDLE Handle,
114 POBJECT_HANDLE_ATTRIBUTE_INFORMATION HandleInfo
115 );
116
117 NTSTATUS
118 STDCALL
119 ObpCreateTypeObject(
120 struct _OBJECT_TYPE_INITIALIZER *ObjectTypeInitializer,
121 PUNICODE_STRING TypeName,
122 POBJECT_TYPE *ObjectType
123 );
124
125 ULONG
126 NTAPI
127 ObGetObjectHandleCount(PVOID Object);
128
129 NTSTATUS
130 NTAPI
131 ObDuplicateObject(
132 PEPROCESS SourceProcess,
133 PEPROCESS TargetProcess,
134 HANDLE SourceHandle,
135 PHANDLE TargetHandle,
136 ACCESS_MASK DesiredAccess,
137 BOOLEAN InheritHandle,
138 ULONG Options
139 );
140
141 ULONG
142 NTAPI
143 ObpGetHandleCountByHandleTable(PHANDLE_TABLE HandleTable);
144
145 VOID
146 STDCALL
147 ObQueryDeviceMapInformation(
148 PEPROCESS Process,
149 PPROCESS_DEVICEMAP_INFORMATION DeviceMapInfo
150 );
151
152 VOID
153 FASTCALL
154 ObpSetPermanentObject(
155 IN PVOID ObjectBody,
156 IN BOOLEAN Permanent
157 );
158
159 VOID
160 STDCALL
161 ObKillProcess(PEPROCESS Process);
162
163 /* Security descriptor cache functions */
164
165 NTSTATUS
166 NTAPI
167 ObpInitSdCache(VOID);
168
169 NTSTATUS
170 NTAPI
171 ObpAddSecurityDescriptor(
172 IN PSECURITY_DESCRIPTOR SourceSD,
173 OUT PSECURITY_DESCRIPTOR *DestinationSD
174 );
175
176 NTSTATUS
177 NTAPI
178 ObpRemoveSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor);
179
180 VOID
181 NTAPI
182 ObpReferenceCachedSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor);
183
184 VOID
185 NTAPI
186 ObpDereferenceCachedSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor);
187
188 VOID
189 FASTCALL
190 ObInitializeFastReference(
191 IN PEX_FAST_REF FastRef,
192 PVOID Object
193 );
194
195 PVOID
196 FASTCALL
197 ObFastReplaceObject(
198 IN PEX_FAST_REF FastRef,
199 PVOID Object
200 );
201
202 PVOID
203 FASTCALL
204 ObFastReferenceObject(IN PEX_FAST_REF FastRef);
205
206 VOID
207 FASTCALL
208 ObFastDereferenceObject(
209 IN PEX_FAST_REF FastRef,
210 PVOID Object
211 );
212
213 /* Secure object information functions */
214
215 NTSTATUS
216 STDCALL
217 ObpCaptureObjectName(
218 IN PUNICODE_STRING CapturedName,
219 IN PUNICODE_STRING ObjectName,
220 IN KPROCESSOR_MODE AccessMode
221 );
222
223 NTSTATUS
224 STDCALL
225 ObpCaptureObjectAttributes(
226 IN POBJECT_ATTRIBUTES ObjectAttributes,
227 IN KPROCESSOR_MODE AccessMode,
228 IN POBJECT_TYPE ObjectType,
229 IN POBJECT_CREATE_INFORMATION ObjectCreateInfo,
230 OUT PUNICODE_STRING ObjectName
231 );
232
233 VOID
234 STDCALL
235 ObpReleaseCapturedAttributes(IN POBJECT_CREATE_INFORMATION ObjectCreateInfo);
236
237 /* object information classes */
238
239
240
241 #endif /* __INCLUDE_INTERNAL_OBJMGR_H */