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
75 /* FUNCTION TYPES ************************************************************/
77 /* Object Callbacks FIXME: Update these soon */
79 (NTAPI
*OB_OPEN_METHOD
)(
80 OB_OPEN_REASON Reason
,
84 ACCESS_MASK GrantedAccess
88 (NTAPI
*OB_PARSE_METHOD
)(
91 PUNICODE_STRING FullPath
,
97 (NTAPI
*OB_DELETE_METHOD
)(
102 (NTAPI
*OB_CLOSE_METHOD
)(
108 (NTAPI
*OB_DUMP_METHOD
)(VOID
);
111 (NTAPI
*OB_OKAYTOCLOSE_METHOD
)(VOID
);
114 (NTAPI
*OB_QUERYNAME_METHOD
)(
116 POBJECT_NAME_INFORMATION ObjectNameInfo
,
122 (NTAPI
*OB_FIND_METHOD
)(
129 (NTAPI
*OB_SECURITY_METHOD
)(
131 SECURITY_OPERATION_CODE OperationType
,
132 SECURITY_INFORMATION SecurityInformation
,
133 PSECURITY_DESCRIPTOR NewSecurityDescriptor
,
135 PSECURITY_DESCRIPTOR
*OldSecurityDescriptor
,
137 PGENERIC_MAPPING GenericMapping
140 /* FIXME: TEMPORARY HACK */
142 (NTAPI
*OB_CREATE_METHOD
)(
146 struct _OBJECT_ATTRIBUTES
* ObjectAttributes
150 /* TYPES *********************************************************************/
152 #ifdef NTOS_MODE_USER
153 typedef struct _OBJECT_NAME_INFORMATION
156 } OBJECT_NAME_INFORMATION
, *POBJECT_NAME_INFORMATION
;
159 #ifndef NTOS_MODE_USER
160 typedef struct _OBJECT_BASIC_INFORMATION
163 ACCESS_MASK GrantedAccess
;
166 ULONG PagedPoolUsage
;
167 ULONG NonPagedPoolUsage
;
169 ULONG NameInformationLength
;
170 ULONG TypeInformationLength
;
171 ULONG SecurityDescriptorLength
;
172 LARGE_INTEGER CreateTime
;
173 } OBJECT_BASIC_INFORMATION
, *POBJECT_BASIC_INFORMATION
;
175 typedef struct _OBJECT_HEADER_NAME_INFO
177 struct _DIRECTORY_OBJECT
*Directory
;
179 ULONG QueryReferences
;
181 ULONG DbgReferenceCount
;
182 } OBJECT_HEADER_NAME_INFO
, *POBJECT_HEADER_NAME_INFO
;
184 typedef struct _OBJECT_CREATE_INFORMATION
187 HANDLE RootDirectory
;
189 KPROCESSOR_MODE ProbeMode
;
190 ULONG PagedPoolCharge
;
191 ULONG NonPagedPoolCharge
;
192 ULONG SecurityDescriptorCharge
;
193 PSECURITY_DESCRIPTOR SecurityDescriptor
;
194 PSECURITY_QUALITY_OF_SERVICE SecurityQos
;
195 SECURITY_QUALITY_OF_SERVICE SecurityQualityOfService
;
196 } OBJECT_CREATE_INFORMATION
, *POBJECT_CREATE_INFORMATION
;
198 typedef struct _OBJECT_TYPE_INITIALIZER
201 UCHAR UseDefaultObject
;
202 UCHAR CaseInsensitive
;
203 ULONG InvalidAttributes
;
204 GENERIC_MAPPING GenericMapping
;
205 ULONG ValidAccessMask
;
206 UCHAR SecurityRequired
;
207 UCHAR MaintainHandleCount
;
208 UCHAR MaintainTypeList
;
210 ULONG DefaultPagedPoolCharge
;
211 ULONG DefaultNonPagedPoolCharge
;
212 OB_DUMP_METHOD DumpProcedure
;
213 OB_OPEN_METHOD OpenProcedure
;
214 OB_CLOSE_METHOD CloseProcedure
;
215 OB_DELETE_METHOD DeleteProcedure
;
216 OB_PARSE_METHOD ParseProcedure
;
217 OB_SECURITY_METHOD SecurityProcedure
;
218 OB_QUERYNAME_METHOD QueryNameProcedure
;
219 OB_OKAYTOCLOSE_METHOD OkayToCloseProcedure
;
220 } OBJECT_TYPE_INITIALIZER
, *POBJECT_TYPE_INITIALIZER
;
222 typedef struct _OBJECT_TYPE
229 ULONG TotalNumberOfObjects
;
230 ULONG TotalNumberOfHandles
;
231 ULONG HighWaterNumberOfObjects
;
232 ULONG HighWaterNumberOfHandles
;
233 OBJECT_TYPE_INITIALIZER TypeInfo
;
235 ERESOURCE ObjectLocks
[4];
238 typedef struct _OBJECT_HANDLE_COUNT_ENTRY
240 struct _EPROCESS
*Process
;
242 } OBJECT_HANDLE_COUNT_ENTRY
, *POBJECT_HANDLE_COUNT_ENTRY
;
244 typedef struct _OBJECT_HANDLE_COUNT_DATABASE
247 POBJECT_HANDLE_COUNT_ENTRY HandleCountEntries
[1];
248 } OBJECT_HANDLE_COUNT_DATABASE
, *POBJECT_HANDLE_COUNT_DATABASE
;
250 typedef struct _OBJECT_HEADER_HANDLE_INFO
254 POBJECT_HANDLE_COUNT_DATABASE HandleCountDatabase
;
255 OBJECT_HANDLE_COUNT_ENTRY SingleEntry
;
257 } OBJECT_HEADER_HANDLE_INFO
, *POBJECT_HEADER_HANDLE_INFO
;
259 typedef struct _OBJECT_HEADER_CREATOR_INFO
262 PVOID CreatorUniqueProcess
;
263 USHORT CreatorBackTraceIndex
;
265 } OBJECT_HEADER_CREATOR_INFO
, *POBJECT_HEADER_CREATOR_INFO
;
267 typedef struct _OBJECT_HEADER
269 LIST_ENTRY Entry
; /* FIXME: REMOVE THIS SOON */
277 UCHAR NameInfoOffset
;
278 UCHAR HandleInfoOffset
;
279 UCHAR QuotaInfoOffset
;
283 POBJECT_CREATE_INFORMATION ObjectCreateInfo
;
284 PVOID QuotaBlockCharged
;
286 PSECURITY_DESCRIPTOR SecurityDescriptor
;
288 } OBJECT_HEADER
, *POBJECT_HEADER
;
291 * FIXME: These will eventually become centerfold in the compliant Ob Manager
292 * For now, they are only here so Device Map is properly defined before the header
295 typedef struct _OBJECT_DIRECTORY_ENTRY
297 struct _OBJECT_DIRECTORY_ENTRY
*ChainLink
;
300 } OBJECT_DIRECTORY_ENTRY
, *POBJECT_DIRECTORY_ENTRY
;
302 #define NUMBER_HASH_BUCKETS 37
303 typedef struct _OBJECT_DIRECTORY
305 struct _OBJECT_DIRECTORY_ENTRY
*HashBuckets
[NUMBER_HASH_BUCKETS
];
306 struct _EX_PUSH_LOCK
*Lock
;
307 struct _DEVICE_MAP
*DeviceMap
;
309 } OBJECT_DIRECTORY
, *POBJECT_DIRECTORY
;
311 typedef struct _DEVICE_MAP
313 POBJECT_DIRECTORY DosDevicesDirectory
;
314 POBJECT_DIRECTORY GlobalDosDevicesDirectory
;
315 ULONG ReferenceCount
;
318 } DEVICE_MAP
, *PDEVICE_MAP
;
320 /* EXPORTED DATA *************************************************************/
322 extern POBJECT_TYPE NTSYSAPI ObDirectoryType
;
323 extern PDEVICE_MAP NTSYSAPI ObSystemDeviceMap
;