3 Copyright (c) Alex Ionescu. All rights reserved.
11 Type definitions for the Object Manager
15 Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004
29 // Definitions for Object Creation
31 #define OBJ_INHERIT 0x00000002L
32 #define OBJ_PERMANENT 0x00000010L
33 #define OBJ_EXCLUSIVE 0x00000020L
34 #define OBJ_CASE_INSENSITIVE 0x00000040L
35 #define OBJ_OPENIF 0x00000080L
36 #define OBJ_OPENLINK 0x00000100L
37 #define OBJ_KERNEL_HANDLE 0x00000200L
38 #define OBJ_FORCE_ACCESS_CHECK 0x00000400L
39 #define OBJ_VALID_ATTRIBUTES 0x000007F2L
41 #define InitializeObjectAttributes(p,n,a,r,s) { \
42 (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
43 (p)->RootDirectory = (r); \
44 (p)->Attributes = (a); \
45 (p)->ObjectName = (n); \
46 (p)->SecurityDescriptor = (s); \
47 (p)->SecurityQualityOfService = NULL; \
51 // Directory Object Access Rights
53 #define DIRECTORY_QUERY 0x0001
54 #define DIRECTORY_TRAVERSE 0x0002
55 #define DIRECTORY_CREATE_OBJECT 0x0004
56 #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
57 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
64 #define OB_FLAG_CREATE_INFO 0x01
65 #define OB_FLAG_KERNEL_MODE 0x02
66 #define OB_FLAG_CREATOR_INFO 0x04
67 #define OB_FLAG_EXCLUSIVE 0x08
68 #define OB_FLAG_PERMANENT 0x10
69 #define OB_FLAG_SECURITY 0x20
70 #define OB_FLAG_SINGLE_PROCESS 0x40
73 // Reasons for Open Callback
75 typedef enum _OB_OPEN_REASON
87 // Object Duplication Flags
89 #define DUPLICATE_SAME_ATTRIBUTES 0x00000004
92 // Number of hash entries in an Object Directory
94 #define NUMBER_HASH_BUCKETS 37
97 // Types for DosDeviceDriveType
99 #define DOSDEVICE_DRIVE_UNKNOWN 0
100 #define DOSDEVICE_DRIVE_CALCULATE 1
101 #define DOSDEVICE_DRIVE_REMOVABLE 2
102 #define DOSDEVICE_DRIVE_FIXED 3
103 #define DOSDEVICE_DRIVE_REMOTE 4
104 #define DOSDEVICE_DRIVE_CDROM 5
105 #define DOSDEVICE_DRIVE_RAMDISK 6
108 // Object Information Classes for NtQueryInformationObject
110 typedef enum _OBJECT_INFORMATION_CLASS
112 ObjectBasicInformation
,
113 ObjectNameInformation
,
114 ObjectTypeInformation
,
115 ObjectAllTypesInformation
,
116 ObjectHandleInformation
117 } OBJECT_INFORMATION_CLASS
;
119 /* FUNCTION TYPES ************************************************************/
121 #ifndef NTOS_MODE_USER
124 // FIXME: Object Callbacks
127 (NTAPI
*OB_OPEN_METHOD
)(
128 OB_OPEN_REASON Reason
,
132 ACCESS_MASK GrantedAccess
136 (NTAPI
*OB_PARSE_METHOD
)(
139 PUNICODE_STRING FullPath
,
145 (NTAPI
*OB_DELETE_METHOD
)(
150 (NTAPI
*OB_CLOSE_METHOD
)(
156 (NTAPI
*OB_DUMP_METHOD
)(
161 (NTAPI
*OB_OKAYTOCLOSE_METHOD
)(
166 (NTAPI
*OB_QUERYNAME_METHOD
)(
168 POBJECT_NAME_INFORMATION ObjectNameInfo
,
174 (NTAPI
*OB_FIND_METHOD
)(
181 (NTAPI
*OB_SECURITY_METHOD
)(
183 SECURITY_OPERATION_CODE OperationType
,
184 SECURITY_INFORMATION SecurityInformation
,
185 PSECURITY_DESCRIPTOR NewSecurityDescriptor
,
187 PSECURITY_DESCRIPTOR
*OldSecurityDescriptor
,
189 PGENERIC_MAPPING GenericMapping
193 (NTAPI
*OB_CREATE_METHOD
)(
197 struct _OBJECT_ATTRIBUTES
* ObjectAttributes
203 // Object Information Types for NtQueryInformationObject
205 typedef struct _OBJECT_NAME_INFORMATION
208 } OBJECT_NAME_INFORMATION
, *POBJECT_NAME_INFORMATION
;
212 typedef struct _OBJECT_HANDLE_ATTRIBUTE_INFORMATION
215 BOOLEAN ProtectFromClose
;
216 } OBJECT_HANDLE_ATTRIBUTE_INFORMATION
, *POBJECT_HANDLE_ATTRIBUTE_INFORMATION
;
218 typedef struct _OBJECT_DIRECTORY_INFORMATION
220 UNICODE_STRING ObjectName
;
221 UNICODE_STRING ObjectTypeName
;
222 } OBJECT_DIRECTORY_INFORMATION
, *POBJECT_DIRECTORY_INFORMATION
;
224 #ifndef NTOS_MODE_USER
226 typedef struct _OBJECT_BASIC_INFORMATION
229 ACCESS_MASK GrantedAccess
;
232 ULONG PagedPoolUsage
;
233 ULONG NonPagedPoolUsage
;
235 ULONG NameInformationLength
;
236 ULONG TypeInformationLength
;
237 ULONG SecurityDescriptorLength
;
238 LARGE_INTEGER CreateTime
;
239 } OBJECT_BASIC_INFORMATION
, *POBJECT_BASIC_INFORMATION
;
241 typedef struct _OBJECT_CREATE_INFORMATION
244 HANDLE RootDirectory
;
246 KPROCESSOR_MODE ProbeMode
;
247 ULONG PagedPoolCharge
;
248 ULONG NonPagedPoolCharge
;
249 ULONG SecurityDescriptorCharge
;
250 PSECURITY_DESCRIPTOR SecurityDescriptor
;
251 PSECURITY_QUALITY_OF_SERVICE SecurityQos
;
252 SECURITY_QUALITY_OF_SERVICE SecurityQualityOfService
;
253 } OBJECT_CREATE_INFORMATION
, *POBJECT_CREATE_INFORMATION
;
256 // Object Type Initialize for ObCreateObjectType
258 typedef struct _OBJECT_TYPE_INITIALIZER
261 UCHAR UseDefaultObject
;
262 UCHAR CaseInsensitive
;
263 ULONG InvalidAttributes
;
264 GENERIC_MAPPING GenericMapping
;
265 ULONG ValidAccessMask
;
266 UCHAR SecurityRequired
;
267 UCHAR MaintainHandleCount
;
268 UCHAR MaintainTypeList
;
270 ULONG DefaultPagedPoolCharge
;
271 ULONG DefaultNonPagedPoolCharge
;
272 OB_DUMP_METHOD DumpProcedure
;
273 OB_OPEN_METHOD OpenProcedure
;
274 OB_CLOSE_METHOD CloseProcedure
;
275 OB_DELETE_METHOD DeleteProcedure
;
276 OB_PARSE_METHOD ParseProcedure
;
277 OB_SECURITY_METHOD SecurityProcedure
;
278 OB_QUERYNAME_METHOD QueryNameProcedure
;
279 OB_OKAYTOCLOSE_METHOD OkayToCloseProcedure
;
280 } OBJECT_TYPE_INITIALIZER
, *POBJECT_TYPE_INITIALIZER
;
283 // Object Type Object
285 typedef struct _OBJECT_TYPE
292 ULONG TotalNumberOfObjects
;
293 ULONG TotalNumberOfHandles
;
294 ULONG HighWaterNumberOfObjects
;
295 ULONG HighWaterNumberOfHandles
;
296 OBJECT_TYPE_INITIALIZER TypeInfo
;
298 ERESOURCE ObjectLocks
[4];
302 // Object Header Addon Information
304 typedef struct _OBJECT_HEADER_NAME_INFO
306 struct _DIRECTORY_OBJECT
*Directory
;
308 ULONG QueryReferences
;
310 ULONG DbgReferenceCount
;
311 } OBJECT_HEADER_NAME_INFO
, *POBJECT_HEADER_NAME_INFO
;
313 typedef struct _OBJECT_HANDLE_COUNT_ENTRY
315 struct _EPROCESS
*Process
;
317 } OBJECT_HANDLE_COUNT_ENTRY
, *POBJECT_HANDLE_COUNT_ENTRY
;
319 typedef struct _OBJECT_HANDLE_COUNT_DATABASE
322 POBJECT_HANDLE_COUNT_ENTRY HandleCountEntries
[1];
323 } OBJECT_HANDLE_COUNT_DATABASE
, *POBJECT_HANDLE_COUNT_DATABASE
;
325 typedef struct _OBJECT_HEADER_HANDLE_INFO
329 POBJECT_HANDLE_COUNT_DATABASE HandleCountDatabase
;
330 OBJECT_HANDLE_COUNT_ENTRY SingleEntry
;
332 } OBJECT_HEADER_HANDLE_INFO
, *POBJECT_HEADER_HANDLE_INFO
;
334 typedef struct _OBJECT_HEADER_CREATOR_INFO
337 PVOID CreatorUniqueProcess
;
338 USHORT CreatorBackTraceIndex
;
340 } OBJECT_HEADER_CREATOR_INFO
, *POBJECT_HEADER_CREATOR_INFO
;
343 // FIXME: Object Header
345 typedef struct _OBJECT_HEADER
355 UCHAR NameInfoOffset
;
356 UCHAR HandleInfoOffset
;
357 UCHAR QuotaInfoOffset
;
361 POBJECT_CREATE_INFORMATION ObjectCreateInfo
;
362 PVOID QuotaBlockCharged
;
364 PSECURITY_DESCRIPTOR SecurityDescriptor
;
366 } OBJECT_HEADER
, *POBJECT_HEADER
;
369 // Object Directory Structures
371 typedef struct _OBJECT_DIRECTORY_ENTRY
373 struct _OBJECT_DIRECTORY_ENTRY
*ChainLink
;
376 } OBJECT_DIRECTORY_ENTRY
, *POBJECT_DIRECTORY_ENTRY
;
378 typedef struct _OBJECT_DIRECTORY
380 struct _OBJECT_DIRECTORY_ENTRY
*HashBuckets
[NUMBER_HASH_BUCKETS
];
381 struct _EX_PUSH_LOCK
*Lock
;
382 struct _DEVICE_MAP
*DeviceMap
;
384 } OBJECT_DIRECTORY
, *POBJECT_DIRECTORY
;
389 typedef struct _DEVICE_MAP
391 POBJECT_DIRECTORY DosDevicesDirectory
;
392 POBJECT_DIRECTORY GlobalDosDevicesDirectory
;
393 ULONG ReferenceCount
;
396 } DEVICE_MAP
, *PDEVICE_MAP
;
401 extern POBJECT_TYPE NTSYSAPI ObDirectoryType
;
402 extern PDEVICE_MAP NTSYSAPI ObSystemDeviceMap
;
404 #endif // !NTOS_MODE_USER