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 *****************************************************************/
16 /* Values for DosDeviceDriveType */
17 #define DOSDEVICE_DRIVE_UNKNOWN 0
18 #define DOSDEVICE_DRIVE_CALCULATE 1
19 #define DOSDEVICE_DRIVE_REMOVABLE 2
20 #define DOSDEVICE_DRIVE_FIXED 3
21 #define DOSDEVICE_DRIVE_REMOTE 4
22 #define DOSDEVICE_DRIVE_CDROM 5
23 #define DOSDEVICE_DRIVE_RAMDISK 6
26 #define OB_FLAG_CREATE_INFO 0x01
27 #define OB_FLAG_KERNEL_MODE 0x02
28 #define OB_FLAG_CREATOR_INFO 0x04
29 #define OB_FLAG_EXCLUSIVE 0x08
30 #define OB_FLAG_PERMANENT 0x10
31 #define OB_FLAG_SECURITY 0x20
32 #define OB_FLAG_SINGLE_PROCESS 0x40
34 /* ENUMERATIONS **************************************************************/
36 typedef enum _OB_OPEN_REASON
45 /* FUNCTION TYPES ************************************************************/
47 /* Object Callbacks FIXME: Update these soon */
49 (STDCALL
*OB_OPEN_METHOD
)(
50 OB_OPEN_REASON Reason
,
54 ACCESS_MASK GrantedAccess
58 (STDCALL
*OB_PARSE_METHOD
)(
61 PUNICODE_STRING FullPath
,
67 (STDCALL
*OB_DELETE_METHOD
)(
72 (STDCALL
*OB_CLOSE_METHOD
)(
78 (STDCALL
*OB_DUMP_METHOD
)(VOID
);
81 (STDCALL
*OB_OKAYTOCLOSE_METHOD
)(VOID
);
84 (STDCALL
*OB_QUERYNAME_METHOD
)(
86 POBJECT_NAME_INFORMATION ObjectNameInfo
,
92 (STDCALL
*OB_FIND_METHOD
)(
99 (STDCALL
*OB_SECURITY_METHOD
)(
101 SECURITY_OPERATION_CODE OperationCode
,
102 SECURITY_INFORMATION SecurityInformation
,
103 PSECURITY_DESCRIPTOR SecurityDescriptor
,
107 /* FIXME: TEMPORARY HACK */
109 (STDCALL
*OB_CREATE_METHOD
)(
113 struct _OBJECT_ATTRIBUTES
* ObjectAttributes
116 /* TYPES *********************************************************************/
118 typedef struct _OBJECT_BASIC_INFORMATION
121 ACCESS_MASK GrantedAccess
;
124 ULONG PagedPoolUsage
;
125 ULONG NonPagedPoolUsage
;
127 ULONG NameInformationLength
;
128 ULONG TypeInformationLength
;
129 ULONG SecurityDescriptorLength
;
130 LARGE_INTEGER CreateTime
;
131 } OBJECT_BASIC_INFORMATION
, *POBJECT_BASIC_INFORMATION
;
133 typedef struct _OBJECT_HEADER_NAME_INFO
135 struct _DIRECTORY_OBJECT
*Directory
;
137 ULONG QueryReferences
;
139 ULONG DbgReferenceCount
;
140 } OBJECT_HEADER_NAME_INFO
, *POBJECT_HEADER_NAME_INFO
;
142 typedef struct _OBJECT_CREATE_INFORMATION
145 HANDLE RootDirectory
;
147 KPROCESSOR_MODE ProbeMode
;
148 ULONG PagedPoolCharge
;
149 ULONG NonPagedPoolCharge
;
150 ULONG SecurityDescriptorCharge
;
151 PSECURITY_DESCRIPTOR SecurityDescriptor
;
152 PSECURITY_QUALITY_OF_SERVICE SecurityQos
;
153 SECURITY_QUALITY_OF_SERVICE SecurityQualityOfService
;
154 } OBJECT_CREATE_INFORMATION
, *POBJECT_CREATE_INFORMATION
;
156 typedef struct _OBJECT_TYPE_INITIALIZER
159 UCHAR UseDefaultObject
;
160 UCHAR CaseInsensitive
;
161 ULONG InvalidAttributes
;
162 GENERIC_MAPPING GenericMapping
;
163 ULONG ValidAccessMask
;
164 UCHAR SecurityRequired
;
165 UCHAR MaintainHandleCount
;
166 UCHAR MaintainTypeList
;
168 ULONG DefaultPagedPoolCharge
;
169 ULONG DefaultNonPagedPoolCharge
;
170 OB_DUMP_METHOD DumpProcedure
;
171 OB_OPEN_METHOD OpenProcedure
;
172 OB_CLOSE_METHOD CloseProcedure
;
173 OB_DELETE_METHOD DeleteProcedure
;
174 OB_PARSE_METHOD ParseProcedure
;
175 OB_SECURITY_METHOD SecurityProcedure
;
176 OB_QUERYNAME_METHOD QueryNameProcedure
;
177 OB_OKAYTOCLOSE_METHOD OkayToCloseProcedure
;
178 } OBJECT_TYPE_INITIALIZER
, *POBJECT_TYPE_INITIALIZER
;
180 typedef struct _OBJECT_TYPE
187 ULONG TotalNumberOfObjects
;
188 ULONG TotalNumberOfHandles
;
189 ULONG HighWaterNumberOfObjects
;
190 ULONG HighWaterNumberOfHandles
;
191 OBJECT_TYPE_INITIALIZER TypeInfo
;
193 ERESOURCE ObjectLocks
[4];
196 typedef struct _OBJECT_HANDLE_COUNT_ENTRY
198 struct _EPROCESS
*Process
;
200 } OBJECT_HANDLE_COUNT_ENTRY
, *POBJECT_HANDLE_COUNT_ENTRY
;
202 typedef struct _OBJECT_HANDLE_COUNT_DATABASE
205 POBJECT_HANDLE_COUNT_ENTRY HandleCountEntries
[1];
206 } OBJECT_HANDLE_COUNT_DATABASE
, *POBJECT_HANDLE_COUNT_DATABASE
;
208 typedef struct _OBJECT_HEADER_HANDLE_INFO
212 POBJECT_HANDLE_COUNT_DATABASE HandleCountDatabase
;
213 OBJECT_HANDLE_COUNT_ENTRY SingleEntry
;
215 } OBJECT_HEADER_HANDLE_INFO
, *POBJECT_HEADER_HANDLE_INFO
;
217 typedef struct _OBJECT_HEADER_CREATOR_INFO
220 PVOID CreatorUniqueProcess
;
221 USHORT CreatorBackTraceIndex
;
223 } OBJECT_HEADER_CREATOR_INFO
, *POBJECT_HEADER_CREATOR_INFO
;
229 LONGLONG UseThisFieldToCopy
;
230 float DoNotUseThisField
;
234 typedef struct _OBJECT_HEADER
236 LIST_ENTRY Entry
; /* FIXME: REMOVE THIS SOON */
244 UCHAR NameInfoOffset
;
245 UCHAR HandleInfoOffset
;
246 UCHAR QuotaInfoOffset
;
250 POBJECT_CREATE_INFORMATION ObjectCreateInfo
;
251 PVOID QuotaBlockCharged
;
253 PSECURITY_DESCRIPTOR SecurityDescriptor
;
255 } OBJECT_HEADER
, *POBJECT_HEADER
;
258 * FIXME: These will eventually become centerfold in the compliant Ob Manager
259 * For now, they are only here so Device Map is properly defined before the header
262 typedef struct _OBJECT_DIRECTORY_ENTRY
264 struct _OBJECT_DIRECTORY_ENTRY
*ChainLink
;
267 } OBJECT_DIRECTORY_ENTRY
, *POBJECT_DIRECTORY_ENTRY
;
269 #define NUMBER_HASH_BUCKETS 37
270 typedef struct _OBJECT_DIRECTORY
272 struct _OBJECT_DIRECTORY_ENTRY
*HashBuckets
[NUMBER_HASH_BUCKETS
];
273 struct _EX_PUSH_LOCK
*Lock
;
274 struct _DEVICE_MAP
*DeviceMap
;
276 } OBJECT_DIRECTORY
, *POBJECT_DIRECTORY
;
278 typedef struct _DEVICE_MAP
280 POBJECT_DIRECTORY DosDevicesDirectory
;
281 POBJECT_DIRECTORY GlobalDosDevicesDirectory
;
282 ULONG ReferenceCount
;
285 } DEVICE_MAP
, *PDEVICE_MAP
;
287 /* EXPORTED DATA *************************************************************/
289 extern NTOSAPI POBJECT_TYPE ObDirectoryType
;
290 extern NTOSAPI PDEVICE_MAP ObSystemDeviceMap
;