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