2 * PROJECT: ReactOS Native Headers
3 * FILE: include/ndk/obtypes.h
4 * PURPOSE: Defintions for Object Manager Types not defined in DDK/IFS
5 * PROGRAMMER: Alex Ionescu (alex@relsoft.net)
12 /* DEPENDENCIES **************************************************************/
14 /* CONSTANTS *****************************************************************/
17 /* Definitions for Object Creation */
18 #define OBJ_INHERIT 2L
19 #define OBJ_PERMANENT 16L
20 #define OBJ_EXCLUSIVE 32L
21 #define OBJ_CASE_INSENSITIVE 64L
22 #define OBJ_OPENIF 128L
23 #define OBJ_OPENLINK 256L
24 #define OBJ_VALID_ATTRIBUTES 498L
25 #define InitializeObjectAttributes(p,n,a,r,s) { \
26 (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
27 (p)->RootDirectory = (r); \
28 (p)->Attributes = (a); \
29 (p)->ObjectName = (n); \
30 (p)->SecurityDescriptor = (s); \
31 (p)->SecurityQualityOfService = NULL; \
34 /* Directory Object Access Rights */
35 #define DIRECTORY_QUERY 0x0001
36 #define DIRECTORY_TRAVERSE 0x0002
37 #define DIRECTORY_CREATE_OBJECT 0x0004
38 #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
39 #define DIRECTORY_ALL_ACCESS STANDARD_RIGHTS_REQUIRED | 0xF
42 /* Duplication Flags */
43 #define DUPLICATE_SAME_ATTRIBUTES 0x00000004
45 /* Values for DosDeviceDriveType */
46 #define DOSDEVICE_DRIVE_UNKNOWN 0
47 #define DOSDEVICE_DRIVE_CALCULATE 1
48 #define DOSDEVICE_DRIVE_REMOVABLE 2
49 #define DOSDEVICE_DRIVE_FIXED 3
50 #define DOSDEVICE_DRIVE_REMOTE 4
51 #define DOSDEVICE_DRIVE_CDROM 5
52 #define DOSDEVICE_DRIVE_RAMDISK 6
54 #ifndef NTOS_MODE_USER
56 #define OB_FLAG_CREATE_INFO 0x01
57 #define OB_FLAG_KERNEL_MODE 0x02
58 #define OB_FLAG_CREATOR_INFO 0x04
59 #define OB_FLAG_EXCLUSIVE 0x08
60 #define OB_FLAG_PERMANENT 0x10
61 #define OB_FLAG_SECURITY 0x20
62 #define OB_FLAG_SINGLE_PROCESS 0x40
64 /* ENUMERATIONS **************************************************************/
66 typedef enum _OB_OPEN_REASON
76 typedef enum _OBJECT_INFORMATION_CLASS
78 ObjectBasicInformation
,
79 ObjectNameInformation
,
80 ObjectTypeInformation
,
81 ObjectAllTypesInformation
,
82 ObjectHandleInformation
83 } OBJECT_INFORMATION_CLASS
;
85 /* FUNCTION TYPES ************************************************************/
87 #ifndef NTOS_MODE_USER
88 /* Object Callbacks FIXME: Update these soon */
90 (NTAPI
*OB_OPEN_METHOD
)(
91 OB_OPEN_REASON Reason
,
95 ACCESS_MASK GrantedAccess
99 (NTAPI
*OB_PARSE_METHOD
)(
102 PUNICODE_STRING FullPath
,
108 (NTAPI
*OB_DELETE_METHOD
)(
113 (NTAPI
*OB_CLOSE_METHOD
)(
119 (NTAPI
*OB_DUMP_METHOD
)(VOID
);
122 (NTAPI
*OB_OKAYTOCLOSE_METHOD
)(VOID
);
125 (NTAPI
*OB_QUERYNAME_METHOD
)(
127 POBJECT_NAME_INFORMATION ObjectNameInfo
,
133 (NTAPI
*OB_FIND_METHOD
)(
140 (NTAPI
*OB_SECURITY_METHOD
)(
142 SECURITY_OPERATION_CODE OperationType
,
143 SECURITY_INFORMATION SecurityInformation
,
144 PSECURITY_DESCRIPTOR NewSecurityDescriptor
,
146 PSECURITY_DESCRIPTOR
*OldSecurityDescriptor
,
148 PGENERIC_MAPPING GenericMapping
151 /* FIXME: TEMPORARY HACK */
153 (NTAPI
*OB_CREATE_METHOD
)(
157 struct _OBJECT_ATTRIBUTES
* ObjectAttributes
161 /* TYPES *********************************************************************/
163 #ifdef NTOS_MODE_USER
164 typedef struct _OBJECT_NAME_INFORMATION
167 } OBJECT_NAME_INFORMATION
, *POBJECT_NAME_INFORMATION
;
170 typedef struct _OBJECT_HANDLE_ATTRIBUTE_INFORMATION
173 BOOLEAN ProtectFromClose
;
174 } OBJECT_HANDLE_ATTRIBUTE_INFORMATION
, *POBJECT_HANDLE_ATTRIBUTE_INFORMATION
;
176 typedef struct _OBJECT_DIRECTORY_INFORMATION
178 UNICODE_STRING ObjectName
;
179 UNICODE_STRING ObjectTypeName
;
180 } OBJECT_DIRECTORY_INFORMATION
, *POBJECT_DIRECTORY_INFORMATION
;
182 #ifndef NTOS_MODE_USER
183 typedef struct _OBJECT_BASIC_INFORMATION
186 ACCESS_MASK GrantedAccess
;
189 ULONG PagedPoolUsage
;
190 ULONG NonPagedPoolUsage
;
192 ULONG NameInformationLength
;
193 ULONG TypeInformationLength
;
194 ULONG SecurityDescriptorLength
;
195 LARGE_INTEGER CreateTime
;
196 } OBJECT_BASIC_INFORMATION
, *POBJECT_BASIC_INFORMATION
;
198 typedef struct _OBJECT_HEADER_NAME_INFO
200 struct _DIRECTORY_OBJECT
*Directory
;
202 ULONG QueryReferences
;
204 ULONG DbgReferenceCount
;
205 } OBJECT_HEADER_NAME_INFO
, *POBJECT_HEADER_NAME_INFO
;
207 typedef struct _OBJECT_CREATE_INFORMATION
210 HANDLE RootDirectory
;
212 KPROCESSOR_MODE ProbeMode
;
213 ULONG PagedPoolCharge
;
214 ULONG NonPagedPoolCharge
;
215 ULONG SecurityDescriptorCharge
;
216 PSECURITY_DESCRIPTOR SecurityDescriptor
;
217 PSECURITY_QUALITY_OF_SERVICE SecurityQos
;
218 SECURITY_QUALITY_OF_SERVICE SecurityQualityOfService
;
219 } OBJECT_CREATE_INFORMATION
, *POBJECT_CREATE_INFORMATION
;
221 typedef struct _OBJECT_TYPE_INITIALIZER
224 UCHAR UseDefaultObject
;
225 UCHAR CaseInsensitive
;
226 ULONG InvalidAttributes
;
227 GENERIC_MAPPING GenericMapping
;
228 ULONG ValidAccessMask
;
229 UCHAR SecurityRequired
;
230 UCHAR MaintainHandleCount
;
231 UCHAR MaintainTypeList
;
233 ULONG DefaultPagedPoolCharge
;
234 ULONG DefaultNonPagedPoolCharge
;
235 OB_DUMP_METHOD DumpProcedure
;
236 OB_OPEN_METHOD OpenProcedure
;
237 OB_CLOSE_METHOD CloseProcedure
;
238 OB_DELETE_METHOD DeleteProcedure
;
239 OB_PARSE_METHOD ParseProcedure
;
240 OB_SECURITY_METHOD SecurityProcedure
;
241 OB_QUERYNAME_METHOD QueryNameProcedure
;
242 OB_OKAYTOCLOSE_METHOD OkayToCloseProcedure
;
243 } OBJECT_TYPE_INITIALIZER
, *POBJECT_TYPE_INITIALIZER
;
245 typedef struct _OBJECT_TYPE
252 ULONG TotalNumberOfObjects
;
253 ULONG TotalNumberOfHandles
;
254 ULONG HighWaterNumberOfObjects
;
255 ULONG HighWaterNumberOfHandles
;
256 OBJECT_TYPE_INITIALIZER TypeInfo
;
258 ERESOURCE ObjectLocks
[4];
261 typedef struct _OBJECT_HANDLE_COUNT_ENTRY
263 struct _EPROCESS
*Process
;
265 } OBJECT_HANDLE_COUNT_ENTRY
, *POBJECT_HANDLE_COUNT_ENTRY
;
267 typedef struct _OBJECT_HANDLE_COUNT_DATABASE
270 POBJECT_HANDLE_COUNT_ENTRY HandleCountEntries
[1];
271 } OBJECT_HANDLE_COUNT_DATABASE
, *POBJECT_HANDLE_COUNT_DATABASE
;
273 typedef struct _OBJECT_HEADER_HANDLE_INFO
277 POBJECT_HANDLE_COUNT_DATABASE HandleCountDatabase
;
278 OBJECT_HANDLE_COUNT_ENTRY SingleEntry
;
280 } OBJECT_HEADER_HANDLE_INFO
, *POBJECT_HEADER_HANDLE_INFO
;
282 typedef struct _OBJECT_HEADER_CREATOR_INFO
285 PVOID CreatorUniqueProcess
;
286 USHORT CreatorBackTraceIndex
;
288 } OBJECT_HEADER_CREATOR_INFO
, *POBJECT_HEADER_CREATOR_INFO
;
290 typedef struct _OBJECT_HEADER
292 LIST_ENTRY Entry
; /* FIXME: REMOVE THIS SOON */
300 UCHAR NameInfoOffset
;
301 UCHAR HandleInfoOffset
;
302 UCHAR QuotaInfoOffset
;
306 POBJECT_CREATE_INFORMATION ObjectCreateInfo
;
307 PVOID QuotaBlockCharged
;
309 PSECURITY_DESCRIPTOR SecurityDescriptor
;
311 } OBJECT_HEADER
, *POBJECT_HEADER
;
314 * FIXME: These will eventually become centerfold in the compliant Ob Manager
315 * For now, they are only here so Device Map is properly defined before the header
318 typedef struct _OBJECT_DIRECTORY_ENTRY
320 struct _OBJECT_DIRECTORY_ENTRY
*ChainLink
;
323 } OBJECT_DIRECTORY_ENTRY
, *POBJECT_DIRECTORY_ENTRY
;
325 #define NUMBER_HASH_BUCKETS 37
326 typedef struct _OBJECT_DIRECTORY
328 struct _OBJECT_DIRECTORY_ENTRY
*HashBuckets
[NUMBER_HASH_BUCKETS
];
329 struct _EX_PUSH_LOCK
*Lock
;
330 struct _DEVICE_MAP
*DeviceMap
;
332 } OBJECT_DIRECTORY
, *POBJECT_DIRECTORY
;
334 typedef struct _DEVICE_MAP
336 POBJECT_DIRECTORY DosDevicesDirectory
;
337 POBJECT_DIRECTORY GlobalDosDevicesDirectory
;
338 ULONG ReferenceCount
;
341 } DEVICE_MAP
, *PDEVICE_MAP
;
343 /* EXPORTED DATA *************************************************************/
345 extern POBJECT_TYPE NTSYSAPI ObDirectoryType
;
346 extern PDEVICE_MAP NTSYSAPI ObSystemDeviceMap
;