no message
[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 #include <ddk/types.h>
13
14 struct _EPROCESS;
15
16 typedef struct
17 {
18 CSHORT Type;
19 CSHORT Size;
20 } COMMON_BODY_HEADER, *PCOMMON_BODY_HEADER;
21
22 typedef PVOID POBJECT;
23
24 typedef struct _DIRECTORY_OBJECT
25 {
26 CSHORT Type;
27 CSHORT Size;
28
29 /*
30 * PURPOSE: Head of the list of our subdirectories
31 */
32 LIST_ENTRY head;
33 KSPIN_LOCK Lock;
34 } DIRECTORY_OBJECT, *PDIRECTORY_OBJECT;
35
36
37 typedef struct _TYPE_OBJECT
38 {
39 CSHORT Type;
40 CSHORT Size;
41
42 /* pointer to object type data */
43 POBJECT_TYPE ObjectType;
44 } TYPE_OBJECT, *PTYPE_OBJECT;
45
46
47 /*
48 * Enumeration of object types
49 */
50 enum
51 {
52 OBJTYP_INVALID,
53 OBJTYP_TYPE,
54 OBJTYP_DIRECTORY,
55 OBJTYP_SYMLNK,
56 OBJTYP_DEVICE,
57 OBJTYP_THREAD,
58 OBJTYP_FILE,
59 OBJTYP_PROCESS,
60 OBJTYP_SECTION,
61 OBJTYP_MAX,
62 };
63
64
65 #define OBJECT_ALLOC_SIZE(type) (type->NonpagedPoolCharge+sizeof(OBJECT_HEADER)-sizeof(COMMON_BODY_HEADER))
66
67
68 extern PDIRECTORY_OBJECT NameSpaceRoot;
69 extern POBJECT_TYPE ObSymbolicLinkType;
70
71
72 POBJECT_HEADER BODY_TO_HEADER(PVOID body);
73 PVOID HEADER_TO_BODY(POBJECT_HEADER obj);
74
75 VOID ObpAddEntryDirectory(PDIRECTORY_OBJECT Parent,
76 POBJECT_HEADER Header,
77 PWSTR Name);
78 VOID ObpRemoveEntryDirectory(POBJECT_HEADER Header);
79
80 VOID
81 ObInitSymbolicLinkImplementation(VOID);
82
83
84 NTSTATUS ObCreateHandle(struct _EPROCESS* Process,
85 PVOID ObjectBody,
86 ACCESS_MASK GrantedAccess,
87 BOOLEAN Inherit,
88 PHANDLE Handle);
89 VOID ObCreateHandleTable(struct _EPROCESS* Parent,
90 BOOLEAN Inherit,
91 struct _EPROCESS* Process);
92 NTSTATUS ObFindObject(POBJECT_ATTRIBUTES ObjectAttributes,
93 PVOID* ReturnedObject,
94 PUNICODE_STRING RemainingPath,
95 POBJECT_TYPE ObjectType);
96 VOID ObCloseAllHandles(struct _EPROCESS* Process);
97 VOID ObDeleteHandleTable(struct _EPROCESS* Process);
98 PVOID ObDeleteHandle(struct _EPROCESS* Process,
99 HANDLE Handle);
100
101 NTSTATUS
102 ObpCreateTypeObject(POBJECT_TYPE ObjectType);
103
104 ULONG
105 ObGetObjectHandleCount(PVOID Object);
106 NTSTATUS
107 ObDuplicateObject(PEPROCESS SourceProcess,
108 PEPROCESS TargetProcess,
109 HANDLE SourceHandle,
110 PHANDLE TargetHandle,
111 ACCESS_MASK DesiredAccess,
112 BOOLEAN InheritHandle,
113 ULONG Options);
114
115 #endif /* __INCLUDE_INTERNAL_OBJMGR_H */