Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenobtypes.h
Go to the documentation of this file.
00001 /*++ NDK Version: 0098 00002 00003 Copyright (c) Alex Ionescu. All rights reserved. 00004 00005 Header Name: 00006 00007 obtypes.h 00008 00009 Abstract: 00010 00011 Type definitions for the Object Manager 00012 00013 Author: 00014 00015 Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 00016 00017 --*/ 00018 00019 #ifndef _OBTYPES_H 00020 #define _OBTYPES_H 00021 00022 // 00023 // Dependencies 00024 // 00025 #include <umtypes.h> 00026 #ifndef NTOS_MODE_USER 00027 #include <extypes.h> 00028 #endif 00029 00030 #ifdef NTOS_MODE_USER 00031 // 00032 // Definitions for Object Creation 00033 // 00034 #define OBJ_INHERIT 0x00000002L 00035 #define OBJ_PERMANENT 0x00000010L 00036 #define OBJ_EXCLUSIVE 0x00000020L 00037 #define OBJ_CASE_INSENSITIVE 0x00000040L 00038 #define OBJ_OPENIF 0x00000080L 00039 #define OBJ_OPENLINK 0x00000100L 00040 #define OBJ_KERNEL_HANDLE 0x00000200L 00041 #define OBJ_FORCE_ACCESS_CHECK 0x00000400L 00042 #define OBJ_VALID_ATTRIBUTES 0x000007F2L 00043 00044 #define InitializeObjectAttributes(p,n,a,r,s) { \ 00045 (p)->Length = sizeof(OBJECT_ATTRIBUTES); \ 00046 (p)->RootDirectory = (r); \ 00047 (p)->Attributes = (a); \ 00048 (p)->ObjectName = (n); \ 00049 (p)->SecurityDescriptor = (s); \ 00050 (p)->SecurityQualityOfService = NULL; \ 00051 } 00052 00053 // 00054 // Number of custom-defined bits that can be attached to a handle 00055 // 00056 #define OBJ_HANDLE_TAGBITS 0x3 00057 00058 // 00059 // Directory Object Access Rights 00060 // 00061 #define DIRECTORY_QUERY 0x0001 00062 #define DIRECTORY_TRAVERSE 0x0002 00063 #define DIRECTORY_CREATE_OBJECT 0x0004 00064 #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008 00065 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF) 00066 00067 // 00068 // Slash separator used in the OB Namespace (and Registry) 00069 // 00070 #define OBJ_NAME_PATH_SEPARATOR L'\\' 00071 00072 // 00073 // Object Information Classes for NtQueryInformationObject 00074 // 00075 typedef enum _OBJECT_INFORMATION_CLASS 00076 { 00077 ObjectBasicInformation, 00078 ObjectNameInformation, 00079 ObjectTypeInformation, 00080 ObjectTypesInformation, 00081 ObjectHandleFlagInformation, 00082 ObjectSessionInformation, 00083 MaxObjectInfoClass 00084 } OBJECT_INFORMATION_CLASS; 00085 00086 #else 00087 00088 // 00089 // Object Flags 00090 // 00091 #define OB_FLAG_CREATE_INFO 0x01 00092 #define OB_FLAG_KERNEL_MODE 0x02 00093 #define OB_FLAG_CREATOR_INFO 0x04 00094 #define OB_FLAG_EXCLUSIVE 0x08 00095 #define OB_FLAG_PERMANENT 0x10 00096 #define OB_FLAG_SECURITY 0x20 00097 #define OB_FLAG_SINGLE_PROCESS 0x40 00098 #define OB_FLAG_DEFER_DELETE 0x80 00099 00100 #define OBJECT_TO_OBJECT_HEADER(o) \ 00101 CONTAINING_RECORD((o), OBJECT_HEADER, Body) 00102 00103 #define OBJECT_HEADER_TO_NAME_INFO(h) \ 00104 ((POBJECT_HEADER_NAME_INFO)(!(h)->NameInfoOffset ? \ 00105 NULL: ((PCHAR)(h) - (h)->NameInfoOffset))) 00106 00107 #define OBJECT_HEADER_TO_HANDLE_INFO(h) \ 00108 ((POBJECT_HEADER_HANDLE_INFO)(!(h)->HandleInfoOffset ? \ 00109 NULL: ((PCHAR)(h) - (h)->HandleInfoOffset))) 00110 00111 #define OBJECT_HEADER_TO_QUOTA_INFO(h) \ 00112 ((POBJECT_HEADER_QUOTA_INFO)(!(h)->QuotaInfoOffset ? \ 00113 NULL: ((PCHAR)(h) - (h)->QuotaInfoOffset))) 00114 00115 #define OBJECT_HEADER_TO_CREATOR_INFO(h) \ 00116 ((POBJECT_HEADER_CREATOR_INFO)(!((h)->Flags & \ 00117 OB_FLAG_CREATOR_INFO) ? NULL: ((PCHAR)(h) - \ 00118 sizeof(OBJECT_HEADER_CREATOR_INFO)))) 00119 00120 #define OBJECT_HEADER_TO_EXCLUSIVE_PROCESS(h) \ 00121 ((!((h)->Flags & OB_FLAG_EXCLUSIVE)) ? \ 00122 NULL: (((POBJECT_HEADER_QUOTA_INFO)((PCHAR)(h) - \ 00123 (h)->QuotaInfoOffset))->ExclusiveProcess)) 00124 00125 // 00126 // Reasons for Open Callback 00127 // 00128 typedef enum _OB_OPEN_REASON 00129 { 00130 ObCreateHandle, 00131 ObOpenHandle, 00132 ObDuplicateHandle, 00133 ObInheritHandle, 00134 ObMaxOpenReason 00135 } OB_OPEN_REASON; 00136 00137 #endif 00138 00139 // 00140 // Object Duplication Flags 00141 // 00142 #define DUPLICATE_SAME_ATTRIBUTES 0x00000004 00143 00144 // 00145 // Number of hash entries in an Object Directory 00146 // 00147 #define NUMBER_HASH_BUCKETS 37 00148 00149 // 00150 // Types for DosDeviceDriveType 00151 // 00152 #define DOSDEVICE_DRIVE_UNKNOWN 0 00153 #define DOSDEVICE_DRIVE_CALCULATE 1 00154 #define DOSDEVICE_DRIVE_REMOVABLE 2 00155 #define DOSDEVICE_DRIVE_FIXED 3 00156 #define DOSDEVICE_DRIVE_REMOTE 4 00157 #define DOSDEVICE_DRIVE_CDROM 5 00158 #define DOSDEVICE_DRIVE_RAMDISK 6 00159 00160 // 00161 // Dump Control Structure for Object Debugging 00162 // 00163 typedef struct _OB_DUMP_CONTROL 00164 { 00165 PVOID Stream; 00166 ULONG Detail; 00167 } OB_DUMP_CONTROL, *POB_DUMP_CONTROL; 00168 00169 #ifndef NTOS_MODE_USER 00170 00171 // 00172 // Object Type Callbacks 00173 // 00174 typedef VOID 00175 (NTAPI *OB_DUMP_METHOD)( 00176 IN PVOID Object, 00177 IN POB_DUMP_CONTROL Control OPTIONAL 00178 ); 00179 00180 typedef NTSTATUS 00181 (NTAPI *OB_OPEN_METHOD)( 00182 IN OB_OPEN_REASON Reason, 00183 IN PEPROCESS Process OPTIONAL, 00184 IN PVOID ObjectBody, 00185 IN ACCESS_MASK GrantedAccess, 00186 IN ULONG HandleCount 00187 ); 00188 00189 typedef VOID 00190 (NTAPI *OB_CLOSE_METHOD)( 00191 IN PEPROCESS Process OPTIONAL, 00192 IN PVOID Object, 00193 IN ACCESS_MASK GrantedAccess, 00194 IN ULONG ProcessHandleCount, 00195 IN ULONG SystemHandleCount 00196 ); 00197 00198 typedef VOID 00199 (NTAPI *OB_DELETE_METHOD)( 00200 IN PVOID Object 00201 ); 00202 00203 typedef NTSTATUS 00204 (NTAPI *OB_PARSE_METHOD)( 00205 IN PVOID ParseObject, 00206 IN PVOID ObjectType, 00207 IN OUT PACCESS_STATE AccessState, 00208 IN KPROCESSOR_MODE AccessMode, 00209 IN ULONG Attributes, 00210 IN OUT PUNICODE_STRING CompleteName, 00211 IN OUT PUNICODE_STRING RemainingName, 00212 IN OUT PVOID Context OPTIONAL, 00213 IN PSECURITY_QUALITY_OF_SERVICE SecurityQos OPTIONAL, 00214 OUT PVOID *Object 00215 ); 00216 00217 typedef NTSTATUS 00218 (NTAPI *OB_SECURITY_METHOD)( 00219 IN PVOID Object, 00220 IN SECURITY_OPERATION_CODE OperationType, 00221 IN PSECURITY_INFORMATION SecurityInformation, 00222 IN PSECURITY_DESCRIPTOR SecurityDescriptor, 00223 IN OUT PULONG CapturedLength, 00224 IN OUT PSECURITY_DESCRIPTOR *ObjectSecurityDescriptor, 00225 IN POOL_TYPE PoolType, 00226 IN PGENERIC_MAPPING GenericMapping 00227 ); 00228 00229 typedef NTSTATUS 00230 (NTAPI *OB_QUERYNAME_METHOD)( 00231 IN PVOID Object, 00232 IN BOOLEAN HasObjectName, 00233 OUT POBJECT_NAME_INFORMATION ObjectNameInfo, 00234 IN ULONG Length, 00235 OUT PULONG ReturnLength, 00236 IN KPROCESSOR_MODE AccessMode 00237 ); 00238 00239 typedef BOOLEAN 00240 (NTAPI *OB_OKAYTOCLOSE_METHOD)( 00241 IN PEPROCESS Process OPTIONAL, 00242 IN PVOID Object, 00243 IN HANDLE Handle, 00244 IN KPROCESSOR_MODE AccessMode 00245 ); 00246 00247 #else 00248 00249 // 00250 // Object Information Types for NtQueryInformationObject 00251 // 00252 typedef struct _OBJECT_NAME_INFORMATION 00253 { 00254 UNICODE_STRING Name; 00255 } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION; 00256 00257 #endif 00258 00259 typedef struct _OBJECT_HANDLE_ATTRIBUTE_INFORMATION 00260 { 00261 BOOLEAN Inherit; 00262 BOOLEAN ProtectFromClose; 00263 } OBJECT_HANDLE_ATTRIBUTE_INFORMATION, *POBJECT_HANDLE_ATTRIBUTE_INFORMATION; 00264 00265 typedef struct _OBJECT_DIRECTORY_INFORMATION 00266 { 00267 UNICODE_STRING Name; 00268 UNICODE_STRING TypeName; 00269 } OBJECT_DIRECTORY_INFORMATION, *POBJECT_DIRECTORY_INFORMATION; 00270 00271 // 00272 // Object Type Information 00273 // 00274 typedef struct _OBJECT_TYPE_INFORMATION 00275 { 00276 UNICODE_STRING TypeName; 00277 ULONG TotalNumberOfObjects; 00278 ULONG TotalNumberOfHandles; 00279 ULONG TotalPagedPoolUsage; 00280 ULONG TotalNonPagedPoolUsage; 00281 ULONG TotalNamePoolUsage; 00282 ULONG TotalHandleTableUsage; 00283 ULONG HighWaterNumberOfObjects; 00284 ULONG HighWaterNumberOfHandles; 00285 ULONG HighWaterPagedPoolUsage; 00286 ULONG HighWaterNonPagedPoolUsage; 00287 ULONG HighWaterNamePoolUsage; 00288 ULONG HighWaterHandleTableUsage; 00289 ULONG InvalidAttributes; 00290 GENERIC_MAPPING GenericMapping; 00291 ULONG ValidAccessMask; 00292 BOOLEAN SecurityRequired; 00293 BOOLEAN MaintainHandleCount; 00294 ULONG PoolType; 00295 ULONG DefaultPagedPoolCharge; 00296 ULONG DefaultNonPagedPoolCharge; 00297 } OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION; 00298 00299 typedef struct _OBJECT_ALL_TYPES_INFORMATION 00300 { 00301 ULONG NumberOfTypes; 00302 //OBJECT_TYPE_INFORMATION TypeInformation[1]; 00303 } OBJECT_ALL_TYPES_INFORMATION, *POBJECT_ALL_TYPES_INFORMATION; 00304 00305 #ifdef NTOS_MODE_USER 00306 00307 typedef struct _OBJECT_BASIC_INFORMATION 00308 { 00309 ULONG Attributes; 00310 ACCESS_MASK GrantedAccess; 00311 ULONG HandleCount; 00312 ULONG PointerCount; 00313 ULONG PagedPoolUsage; 00314 ULONG NonPagedPoolUsage; 00315 ULONG Reserved[3]; 00316 ULONG NameInformationLength; 00317 ULONG TypeInformationLength; 00318 ULONG SecurityDescriptorLength; 00319 LARGE_INTEGER CreateTime; 00320 } OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION; 00321 00322 #else 00323 00324 typedef struct _OBJECT_CREATE_INFORMATION 00325 { 00326 ULONG Attributes; 00327 HANDLE RootDirectory; 00328 PVOID ParseContext; 00329 KPROCESSOR_MODE ProbeMode; 00330 ULONG PagedPoolCharge; 00331 ULONG NonPagedPoolCharge; 00332 ULONG SecurityDescriptorCharge; 00333 PSECURITY_DESCRIPTOR SecurityDescriptor; 00334 PSECURITY_QUALITY_OF_SERVICE SecurityQos; 00335 SECURITY_QUALITY_OF_SERVICE SecurityQualityOfService; 00336 } OBJECT_CREATE_INFORMATION, *POBJECT_CREATE_INFORMATION; 00337 00338 // 00339 // Object Type Initialize for ObCreateObjectType 00340 // 00341 typedef struct _OBJECT_TYPE_INITIALIZER 00342 { 00343 USHORT Length; 00344 BOOLEAN UseDefaultObject; 00345 BOOLEAN CaseInsensitive; 00346 ULONG InvalidAttributes; 00347 GENERIC_MAPPING GenericMapping; 00348 ULONG ValidAccessMask; 00349 BOOLEAN SecurityRequired; 00350 BOOLEAN MaintainHandleCount; 00351 BOOLEAN MaintainTypeList; 00352 POOL_TYPE PoolType; 00353 ULONG DefaultPagedPoolCharge; 00354 ULONG DefaultNonPagedPoolCharge; 00355 OB_DUMP_METHOD DumpProcedure; 00356 OB_OPEN_METHOD OpenProcedure; 00357 OB_CLOSE_METHOD CloseProcedure; 00358 OB_DELETE_METHOD DeleteProcedure; 00359 OB_PARSE_METHOD ParseProcedure; 00360 OB_SECURITY_METHOD SecurityProcedure; 00361 OB_QUERYNAME_METHOD QueryNameProcedure; 00362 OB_OKAYTOCLOSE_METHOD OkayToCloseProcedure; 00363 } OBJECT_TYPE_INITIALIZER, *POBJECT_TYPE_INITIALIZER; 00364 00365 // 00366 // Object Type Object 00367 // 00368 typedef struct _OBJECT_TYPE 00369 { 00370 ERESOURCE Mutex; 00371 LIST_ENTRY TypeList; 00372 UNICODE_STRING Name; 00373 PVOID DefaultObject; 00374 ULONG Index; 00375 ULONG TotalNumberOfObjects; 00376 ULONG TotalNumberOfHandles; 00377 ULONG HighWaterNumberOfObjects; 00378 ULONG HighWaterNumberOfHandles; 00379 OBJECT_TYPE_INITIALIZER TypeInfo; 00380 ULONG Key; 00381 ERESOURCE ObjectLocks[4]; 00382 } OBJECT_TYPE; 00383 00384 // 00385 // Object Directory Structures 00386 // 00387 typedef struct _OBJECT_DIRECTORY_ENTRY 00388 { 00389 struct _OBJECT_DIRECTORY_ENTRY *ChainLink; 00390 PVOID Object; 00391 #if (NTDDI_VERSION >= NTDDI_WS03) 00392 ULONG HashValue; 00393 #endif 00394 } OBJECT_DIRECTORY_ENTRY, *POBJECT_DIRECTORY_ENTRY; 00395 00396 typedef struct _OBJECT_DIRECTORY 00397 { 00398 struct _OBJECT_DIRECTORY_ENTRY *HashBuckets[NUMBER_HASH_BUCKETS]; 00399 #if (NTDDI_VERSION < NTDDI_WINXP) 00400 ERESOURCE Lock; 00401 #else 00402 EX_PUSH_LOCK Lock; 00403 #endif 00404 #if (NTDDI_VERSION < NTDDI_WINXP) 00405 BOOLEAN CurrentEntryValid; 00406 #else 00407 struct _DEVICE_MAP *DeviceMap; 00408 #endif 00409 ULONG SessionId; 00410 #if (NTDDI_VERSION == NTDDI_WINXP) 00411 USHORT Reserved; 00412 USHORT SymbolicLinkUsageCount; 00413 #endif 00414 } OBJECT_DIRECTORY, *POBJECT_DIRECTORY; 00415 00416 // 00417 // Object Header Addon Information 00418 // 00419 typedef struct _OBJECT_HEADER_NAME_INFO 00420 { 00421 POBJECT_DIRECTORY Directory; 00422 UNICODE_STRING Name; 00423 ULONG QueryReferences; 00424 ULONG Reserved2; 00425 ULONG DbgReferenceCount; 00426 } OBJECT_HEADER_NAME_INFO, *POBJECT_HEADER_NAME_INFO; 00427 00428 typedef struct _OBJECT_HANDLE_COUNT_ENTRY 00429 { 00430 struct _EPROCESS *Process; 00431 ULONG HandleCount; 00432 } OBJECT_HANDLE_COUNT_ENTRY, *POBJECT_HANDLE_COUNT_ENTRY; 00433 00434 typedef struct _OBJECT_HANDLE_COUNT_DATABASE 00435 { 00436 ULONG CountEntries; 00437 OBJECT_HANDLE_COUNT_ENTRY HandleCountEntries[1]; 00438 } OBJECT_HANDLE_COUNT_DATABASE, *POBJECT_HANDLE_COUNT_DATABASE; 00439 00440 typedef struct _OBJECT_HEADER_HANDLE_INFO 00441 { 00442 union 00443 { 00444 POBJECT_HANDLE_COUNT_DATABASE HandleCountDatabase; 00445 OBJECT_HANDLE_COUNT_ENTRY SingleEntry; 00446 }; 00447 } OBJECT_HEADER_HANDLE_INFO, *POBJECT_HEADER_HANDLE_INFO; 00448 00449 typedef struct _OBJECT_HEADER_CREATOR_INFO 00450 { 00451 LIST_ENTRY TypeList; 00452 PVOID CreatorUniqueProcess; 00453 USHORT CreatorBackTraceIndex; 00454 USHORT Reserved; 00455 } OBJECT_HEADER_CREATOR_INFO, *POBJECT_HEADER_CREATOR_INFO; 00456 00457 typedef struct _OBJECT_HEADER_QUOTA_INFO 00458 { 00459 ULONG PagedPoolCharge; 00460 ULONG NonPagedPoolCharge; 00461 ULONG SecurityDescriptorCharge; 00462 PEPROCESS ExclusiveProcess; 00463 } OBJECT_HEADER_QUOTA_INFO, *POBJECT_HEADER_QUOTA_INFO; 00464 00465 // 00466 // Object Header 00467 // 00468 typedef struct _OBJECT_HEADER 00469 { 00470 LONG PointerCount; 00471 union 00472 { 00473 LONG HandleCount; 00474 volatile PVOID NextToFree; 00475 }; 00476 POBJECT_TYPE Type; 00477 UCHAR NameInfoOffset; 00478 UCHAR HandleInfoOffset; 00479 UCHAR QuotaInfoOffset; 00480 UCHAR Flags; 00481 union 00482 { 00483 POBJECT_CREATE_INFORMATION ObjectCreateInfo; 00484 PVOID QuotaBlockCharged; 00485 }; 00486 PSECURITY_DESCRIPTOR SecurityDescriptor; 00487 QUAD Body; 00488 } OBJECT_HEADER, *POBJECT_HEADER; 00489 00490 // 00491 // Object Lookup Context 00492 // 00493 typedef struct _OBP_LOOKUP_CONTEXT 00494 { 00495 POBJECT_DIRECTORY Directory; 00496 PVOID Object; 00497 ULONG HashValue; 00498 USHORT HashIndex; 00499 BOOLEAN DirectoryLocked; 00500 ULONG LockStateSignature; 00501 } OBP_LOOKUP_CONTEXT, *POBP_LOOKUP_CONTEXT; 00502 00503 // 00504 // Device Map 00505 // 00506 typedef struct _DEVICE_MAP 00507 { 00508 POBJECT_DIRECTORY DosDevicesDirectory; 00509 POBJECT_DIRECTORY GlobalDosDevicesDirectory; 00510 ULONG ReferenceCount; 00511 ULONG DriveMap; 00512 UCHAR DriveType[32]; 00513 } DEVICE_MAP, *PDEVICE_MAP; 00514 00515 // 00516 // Symbolic Link Object 00517 // 00518 typedef struct _OBJECT_SYMBOLIC_LINK 00519 { 00520 LARGE_INTEGER CreationTime; 00521 UNICODE_STRING LinkTarget; 00522 UNICODE_STRING LinkTargetRemaining; 00523 PVOID LinkTargetObject; 00524 ULONG DosDeviceDriveIndex; 00525 } OBJECT_SYMBOLIC_LINK, *POBJECT_SYMBOLIC_LINK; 00526 00527 // 00528 // Kernel Exports 00529 // 00530 extern POBJECT_TYPE NTSYSAPI ObDirectoryType; 00531 extern PDEVICE_MAP NTSYSAPI ObSystemDeviceMap; 00532 00533 #endif // !NTOS_MODE_USER 00534 00535 #endif // _OBTYPES_H Generated on Sat May 26 2012 04:29:39 for ReactOS by
1.7.6.1
|