1 #ifndef _INCLUDE_DDK_OBTYPES_H
2 #define _INCLUDE_DDK_OBTYPES_H
5 #include <ddk/setypes.h> /* for SECURITY_SUBJECT_CONTEXT */
8 struct _DIRECTORY_OBJECT;
9 struct _OBJECT_ATTRIBUTES;
11 typedef struct _ACCESS_STATE
14 BOOLEAN SecurityEvaluated;
15 BOOLEAN GenerateAudit;
16 BOOLEAN GenerateOnClose;
17 BOOLEAN PrivilegesAllocated;
19 ACCESS_MASK RemainingDesiredAccess;
20 ACCESS_MASK PreviouslyGrantedAccess;
21 ACCESS_MASK OriginalDesiredAccess;
22 SECURITY_SUBJECT_CONTEXT SubjectSecurityContext;
23 PSECURITY_DESCRIPTOR SecurityDescriptor;
27 INITIAL_PRIVILEGE_SET InitialPrivilegeSet;
28 PRIVILEGE_SET PrivilegeSet;
31 BOOLEAN AuditPrivileges;
32 UNICODE_STRING ObjectName;
33 UNICODE_STRING ObjectTypeName;
34 } ACCESS_STATE, *PACCESS_STATE;
36 typedef struct _OBJECT_HANDLE_INFORMATION {
37 ULONG HandleAttributes;
38 ACCESS_MASK GrantedAccess;
39 } OBJECT_HANDLE_INFORMATION, *POBJECT_HANDLE_INFORMATION;
41 typedef struct _OBJECT_TYPE
44 * PURPOSE: Tag to be used when allocating objects of this type
49 * PURPOSE: Name of the type
51 UNICODE_STRING TypeName;
54 * PURPOSE: Total number of objects of this type
59 * PURPOSE: Total number of handles of this type
64 * PURPOSE: Maximum objects of this type
69 * PURPOSE: Maximum handles of this type
74 * PURPOSE: Paged pool charge
76 ULONG PagedPoolCharge;
79 * PURPOSE: Nonpaged pool charge
81 ULONG NonpagedPoolCharge;
84 * PURPOSE: Mapping of generic access rights
86 PGENERIC_MAPPING Mapping;
89 * PURPOSE: Dumps the object
92 VOID STDCALL_FUNC (*Dump)(VOID);
95 * PURPOSE: Opens the object
98 VOID STDCALL_FUNC (*Open)(VOID);
101 * PURPOSE: Called to close an object if OkayToClose returns true
103 VOID STDCALL_FUNC (*Close)(PVOID ObjectBody,
107 * PURPOSE: Called to delete an object when the last reference is removed
109 VOID STDCALL_FUNC (*Delete)(PVOID ObjectBody);
112 * PURPOSE: Called when an open attempts to open a file apparently
113 * residing within the object
115 * STATUS_SUCCESS NextObject was found
116 * STATUS_UNSUCCESSFUL NextObject not found
117 * STATUS_REPARSE Path changed, restart parsing the path
119 NTSTATUS STDCALL_FUNC (*Parse)(PVOID ParsedObject,
121 PUNICODE_STRING FullPath,
127 NTSTATUS STDCALL_FUNC (*Security)(PVOID Object,
134 VOID STDCALL_FUNC (*QueryName)(VOID);
137 * PURPOSE: Called when a process asks to close the object
139 VOID STDCALL_FUNC (*OkayToClose)(VOID);
141 NTSTATUS STDCALL_FUNC (*Create)(PVOID ObjectBody,
144 struct _OBJECT_ATTRIBUTES* ObjectAttributes);
146 VOID STDCALL_FUNC (*DuplicationNotify)(PEPROCESS DuplicateTo,
147 PEPROCESS DuplicateFrom,
149 } OBJECT_TYPE, *POBJECT_TYPE;
152 typedef struct _OBJECT_HEADER
154 * PURPOSE: Header for every object managed by the object manager
161 BOOLEAN CloseInProcess;
163 struct _DIRECTORY_OBJECT* Parent;
164 POBJECT_TYPE ObjectType;
167 * PURPOSE: Object type
168 * NOTE: This overlaps the first member of the object body
173 * PURPOSE: Object size
174 * NOTE: This overlaps the second member of the object body
179 } OBJECT_HEADER, *POBJECT_HEADER;
181 typedef struct _OBJECT_ATTRIBUTES
184 HANDLE RootDirectory;
185 PUNICODE_STRING ObjectName;
187 SECURITY_DESCRIPTOR *SecurityDescriptor;
188 SECURITY_QUALITY_OF_SERVICE *SecurityQualityOfService;
189 } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
191 typedef struct _HANDLE_TABLE
195 } HANDLE_TABLE, *PHANDLE_TABLE;
197 extern POBJECT_TYPE ObDirectoryType;
200 #define OBJECT_TYPE_0 0
201 #define OBJECT_TYPE_1 1
202 #define OBJECT_TYPE_DIRECTORY 2
203 #define OBJECT_TYPE_SYMBOLICLINK 3
204 #define OBJECT_TYPE_TOKEN 4
205 #define OBJECT_TYPE_PROCESS 5
206 #define OBJECT_TYPE_THREAD 6
207 #define OBJECT_TYPE_EVENT 7
208 #define OBJECT_TYPE_8 8
209 #define OBJECT_TYPE_MUTANT 9
210 #define OBJECT_TYPE_SEMAPHORE 10
211 #define OBJECT_TYPE_TIMER 11
212 #define OBJECT_TYPE_12 12
213 #define OBJECT_TYPE_WINDOWSTATION 13
214 #define OBJECT_TYPE_DESKTOP 14
215 #define OBJECT_TYPE_SECTION 15
216 #define OBJECT_TYPE_KEY 16
217 #define OBJECT_TYPE_PORT 17
218 #define OBJECT_TYPE_18 18
219 #define OBJECT_TYPE_19 19
220 #define OBJECT_TYPE_20 20
221 #define OBJECT_TYPE_21 21
222 #define OBJECT_TYPE_IOCOMPLETION 22
223 #define OBJECT_TYPE_FILE 23
226 #endif /* ndef _INCLUDE_DDK_OBTYPES_H */