Initial revision
[reactos.git] / reactos / include / internal / objmgr.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 typedef struct
15 {
16 CSHORT Type;
17 CSHORT Size;
18 } COMMON_BODY_HEADER, *PCOMMON_BODY_HEADER;
19
20 typedef struct _DIRECTORY_OBJECT
21 {
22 CSHORT Type;
23 CSHORT Size;
24
25 /*
26 * PURPOSE: Head of the list of our subdirectories
27 */
28 LIST_ENTRY head;
29 } DIRECTORY_OBJECT, *PDIRECTORY_OBJECT;
30
31
32 /*
33 * Enumeration of object types
34 */
35 enum
36 {
37 OBJTYP_INVALID,
38 OBJTYP_TYPE,
39 OBJTYP_DIRECTORY,
40 OBJTYP_SYMLNK,
41 OBJTYP_DEVICE,
42 OBJTYP_THREAD,
43 OBJTYP_MAX,
44 };
45
46 BOOL ObjAddObjectToNameSpace(const char* path, POBJECT_HEADER Object);
47
48 VOID ObRegisterType(CSHORT id, OBJECT_TYPE* type);
49
50 VOID ObInitializeObjectHeader(CSHORT id, LPCSTR name, POBJECT_HEADER obj);
51
52 /*
53 * FUNCTION: Get the size of an object
54 * ARGUMENTS:
55 * Type = Object type
56 * RETURNS: The size in bytes
57 */
58 ULONG ObSizeOf(CSHORT Type);
59 HANDLE ObAddHandle(PVOID obj);
60
61 PVOID ObGetObjectByHandle(HANDLE h);
62 PVOID ObLookupObject(PDIRECTORY_OBJECT root, const char* _string);
63 PVOID ObGenericCreateObject(PHANDLE Handle,
64 ACCESS_MASK DesiredAccess,
65 POBJECT_ATTRIBUTES ObjectAttributes,
66 CSHORT Type);
67
68 /*
69 * FUNCTION: Creates an entry within a directory
70 * ARGUMENTS:
71 * parent = Parent directory
72 * object = Header of the object to add
73 */
74 VOID ObCreateEntry(PDIRECTORY_OBJECT parent, POBJECT_HEADER object);
75
76 extern inline POBJECT_HEADER BODY_TO_HEADER(PVOID body)
77 {
78 PCOMMON_BODY_HEADER chdr = (PCOMMON_BODY_HEADER)body;
79 return(CONTAINING_RECORD((&(chdr->Type)),OBJECT_HEADER,Type));
80 }
81
82 extern inline PVOID HEADER_TO_BODY(POBJECT_HEADER obj)
83 {
84 return(((void *)obj)+sizeof(OBJECT_HEADER)-sizeof(COMMON_BODY_HEADER));
85 }
86
87 #define OBJECT_ALLOC_SIZE(type) (ObSizeOf(type)+sizeof(OBJECT_HEADER)-sizeof(COMMON_BODY_HEADER))
88
89 #endif /* __INCLUDE_INTERNAL_OBJMGR_H */