1) Updated KUSER_SHARED_DATA to NT5+ exported documented defintiion, which meant...
[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 #define NTOS_MODE_KERNEL
13 #include <ntos.h>
14
15 #define TAG_OBJECT_TYPE TAG('O', 'b', 'j', 'T')
16
17 struct _EPROCESS;
18
19 typedef struct
20 {
21 CSHORT Type;
22 CSHORT Size;
23 } COMMON_BODY_HEADER, *PCOMMON_BODY_HEADER;
24
25 typedef PVOID POBJECT;
26
27 typedef struct _DIRECTORY_OBJECT
28 {
29 CSHORT Type;
30 CSHORT Size;
31
32 /*
33 * PURPOSE: Head of the list of our subdirectories
34 */
35 LIST_ENTRY head;
36 KSPIN_LOCK Lock;
37 } DIRECTORY_OBJECT, *PDIRECTORY_OBJECT;
38
39 typedef struct _SYMLINK_OBJECT
40 {
41 CSHORT Type;
42 CSHORT Size;
43 UNICODE_STRING TargetName;
44 LARGE_INTEGER CreateTime;
45 } SYMLINK_OBJECT, *PSYMLINK_OBJECT;
46
47
48 typedef struct _TYPE_OBJECT
49 {
50 CSHORT Type;
51 CSHORT Size;
52
53 /* pointer to object type data */
54 POBJECT_TYPE ObjectType;
55 } TYPE_OBJECT, *PTYPE_OBJECT;
56
57
58 /*
59 * Enumeration of object types
60 */
61 enum
62 {
63 OBJTYP_INVALID,
64 OBJTYP_TYPE,
65 OBJTYP_DIRECTORY,
66 OBJTYP_SYMLNK,
67 OBJTYP_DEVICE,
68 OBJTYP_THREAD,
69 OBJTYP_FILE,
70 OBJTYP_PROCESS,
71 OBJTYP_SECTION,
72 OBJTYP_MAX,
73 };
74
75
76 #define OBJECT_ALLOC_SIZE(ObjectSize) ((ObjectSize)+sizeof(OBJECT_HEADER)-sizeof(COMMON_BODY_HEADER))
77
78
79 extern PDIRECTORY_OBJECT NameSpaceRoot;
80 extern POBJECT_TYPE ObSymbolicLinkType;
81
82
83 POBJECT_HEADER BODY_TO_HEADER(PVOID body);
84 PVOID HEADER_TO_BODY(POBJECT_HEADER obj);
85
86 VOID ObpAddEntryDirectory(PDIRECTORY_OBJECT Parent,
87 POBJECT_HEADER Header,
88 PWSTR Name);
89 VOID ObpRemoveEntryDirectory(POBJECT_HEADER Header);
90
91 VOID
92 ObInitSymbolicLinkImplementation(VOID);
93
94
95 NTSTATUS ObCreateHandle(struct _EPROCESS* Process,
96 PVOID ObjectBody,
97 ACCESS_MASK GrantedAccess,
98 BOOLEAN Inherit,
99 PHANDLE Handle);
100 VOID ObCreateHandleTable(struct _EPROCESS* Parent,
101 BOOLEAN Inherit,
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);
109
110 NTSTATUS
111 ObDeleteHandle(PEPROCESS Process,
112 HANDLE Handle,
113 PVOID *ObjectBody);
114
115 NTSTATUS
116 ObpQueryHandleAttributes(HANDLE Handle,
117 POBJECT_HANDLE_ATTRIBUTE_INFORMATION HandleInfo);
118
119 NTSTATUS
120 ObpSetHandleAttributes(HANDLE Handle,
121 POBJECT_HANDLE_ATTRIBUTE_INFORMATION HandleInfo);
122
123 NTSTATUS
124 ObpCreateTypeObject(POBJECT_TYPE ObjectType);
125
126 ULONG
127 ObGetObjectHandleCount(PVOID Object);
128 NTSTATUS
129 ObDuplicateObject(PEPROCESS SourceProcess,
130 PEPROCESS TargetProcess,
131 HANDLE SourceHandle,
132 PHANDLE TargetHandle,
133 ACCESS_MASK DesiredAccess,
134 BOOLEAN InheritHandle,
135 ULONG Options);
136
137 ULONG
138 ObpGetHandleCountByHandleTable(PHANDLE_TABLE HandleTable);
139
140 VOID
141 STDCALL
142 ObQueryDeviceMapInformation(PEPROCESS Process, PPROCESS_DEVICEMAP_INFORMATION DeviceMapInfo);
143
144 /* Security descriptor cache functions */
145
146 NTSTATUS
147 ObpInitSdCache(VOID);
148
149 NTSTATUS
150 ObpAddSecurityDescriptor(IN PSECURITY_DESCRIPTOR SourceSD,
151 OUT PSECURITY_DESCRIPTOR *DestinationSD);
152
153 NTSTATUS
154 ObpRemoveSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor);
155
156 VOID
157 ObpReferenceCachedSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor);
158
159 VOID
160 ObpDereferenceCachedSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor);
161
162
163 #endif /* __INCLUDE_INTERNAL_OBJMGR_H */