update for HEAD-2003050101
[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 #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 */