Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenob.h
Go to the documentation of this file.
00001 /* 00002 * PROJECT: ReactOS Kernel 00003 * LICENSE: GPL - See COPYING in the top level directory 00004 * FILE: ntoskrnl/include/ob.h 00005 * PURPOSE: Internal header for the Object Manager 00006 * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org) 00007 */ 00008 00009 // 00010 // Define this if you want debugging support 00011 // 00012 #define _OB_DEBUG_ 0x00 00013 00014 // 00015 // These define the Debug Masks Supported 00016 // 00017 #define OB_HANDLE_DEBUG 0x01 00018 #define OB_NAMESPACE_DEBUG 0x02 00019 #define OB_SECURITY_DEBUG 0x04 00020 #define OB_REFERENCE_DEBUG 0x08 00021 #define OB_CALLBACK_DEBUG 0x10 00022 00023 // 00024 // Debug/Tracing support 00025 // 00026 #if _OB_DEBUG_ 00027 #ifdef NEW_DEBUG_SYSTEM_IMPLEMENTED // enable when Debug Filters are implemented 00028 #define OBTRACE DbgPrintEx 00029 #else 00030 #define OBTRACE(x, ...) \ 00031 if (x & ObpTraceLevel) DbgPrint(__VA_ARGS__) 00032 #endif 00033 #else 00034 #define OBTRACE(x, fmt, ...) DPRINT(fmt, ##__VA_ARGS__) 00035 #endif 00036 00037 // 00038 // Mask to detect GENERIC_XXX access masks being used 00039 // 00040 #define GENERIC_ACCESS \ 00041 (GENERIC_READ | \ 00042 GENERIC_WRITE | \ 00043 GENERIC_EXECUTE | \ 00044 GENERIC_ALL) 00045 00046 // 00047 // Handle Bit Flags 00048 // 00049 #define OBJ_PROTECT_CLOSE 0x01 00050 //#define OBJ_INHERIT 0x02 00051 #define OBJ_AUDIT_OBJECT_CLOSE 0x04 00052 #define OBJ_HANDLE_ATTRIBUTES (OBJ_PROTECT_CLOSE |\ 00053 OBJ_INHERIT | \ 00054 OBJ_AUDIT_OBJECT_CLOSE) 00055 00056 // 00057 // Identifies a Kernel Handle 00058 // 00059 #ifdef _WIN64 00060 #define KERNEL_HANDLE_FLAG 0xFFFFFFFF80000000ULL 00061 #else 00062 #define KERNEL_HANDLE_FLAG 0x80000000 00063 #endif 00064 #define ObIsKernelHandle(Handle, ProcessorMode) \ 00065 (((ULONG_PTR)(Handle) & KERNEL_HANDLE_FLAG) && \ 00066 ((ProcessorMode) == KernelMode)) 00067 00068 // 00069 // Converts to and from a Kernel Handle to a normal handle 00070 // 00071 #define ObKernelHandleToHandle(Handle) \ 00072 (HANDLE)((ULONG_PTR)(Handle) & ~KERNEL_HANDLE_FLAG) 00073 #define ObMarkHandleAsKernelHandle(Handle) \ 00074 (HANDLE)((ULONG_PTR)(Handle) | KERNEL_HANDLE_FLAG) 00075 00076 // 00077 // Converts from an EXHANDLE object to a POBJECT_HEADER 00078 // 00079 #define ObpGetHandleObject(x) \ 00080 ((POBJECT_HEADER)((ULONG_PTR)x->Object & ~OBJ_HANDLE_ATTRIBUTES)) 00081 00082 // 00083 // Recovers the security descriptor from a cached security descriptor header 00084 // 00085 #define ObpGetHeaderForSd(x) \ 00086 CONTAINING_RECORD((x), SECURITY_DESCRIPTOR_HEADER, SecurityDescriptor) 00087 00088 // 00089 // Recovers the security descriptor from a cached security descriptor list entry 00090 // 00091 #define ObpGetHeaderForEntry(x) \ 00092 CONTAINING_RECORD((x), SECURITY_DESCRIPTOR_HEADER, Link) 00093 00094 // 00095 // Context Structures for Ex*Handle Callbacks 00096 // 00097 typedef struct _OBP_SET_HANDLE_ATTRIBUTES_CONTEXT 00098 { 00099 KPROCESSOR_MODE PreviousMode; 00100 OBJECT_HANDLE_ATTRIBUTE_INFORMATION Information; 00101 } OBP_SET_HANDLE_ATTRIBUTES_CONTEXT, *POBP_SET_HANDLE_ATTRIBUTES_CONTEXT; 00102 00103 typedef struct _OBP_CLOSE_HANDLE_CONTEXT 00104 { 00105 PHANDLE_TABLE HandleTable; 00106 KPROCESSOR_MODE AccessMode; 00107 } OBP_CLOSE_HANDLE_CONTEXT, *POBP_CLOSE_HANDLE_CONTEXT; 00108 00109 typedef struct _OBP_FIND_HANDLE_DATA 00110 { 00111 POBJECT_HEADER ObjectHeader; 00112 POBJECT_TYPE ObjectType; 00113 POBJECT_HANDLE_INFORMATION HandleInformation; 00114 } OBP_FIND_HANDLE_DATA, *POBP_FIND_HANDLE_DATA; 00115 00116 // 00117 // Cached Security Descriptor Header 00118 // 00119 typedef struct _SECURITY_DESCRIPTOR_HEADER 00120 { 00121 LIST_ENTRY Link; 00122 ULONG RefCount; 00123 ULONG FullHash; 00124 QUAD SecurityDescriptor; 00125 } SECURITY_DESCRIPTOR_HEADER, *PSECURITY_DESCRIPTOR_HEADER; 00126 00127 // 00128 // Cached Security Descriptor List 00129 // 00130 typedef struct _OB_SD_CACHE_LIST 00131 { 00132 EX_PUSH_LOCK PushLock; 00133 LIST_ENTRY Head; 00134 } OB_SD_CACHE_LIST, *POB_SD_CACHE_LIST; 00135 00136 // 00137 // Structure for quick-compare of a DOS Device path 00138 // 00139 typedef union 00140 { 00141 WCHAR Name[sizeof(ULARGE_INTEGER) / sizeof(WCHAR)]; 00142 ULARGE_INTEGER Alignment; 00143 } ALIGNEDNAME; 00144 00145 // 00146 // Private Temporary Buffer for Lookup Routines 00147 // 00148 #define TAG_OB_TEMP_STORAGE 'tSbO' 00149 typedef struct _OB_TEMP_BUFFER 00150 { 00151 ACCESS_STATE LocalAccessState; 00152 OBJECT_CREATE_INFORMATION ObjectCreateInfo; 00153 OBP_LOOKUP_CONTEXT LookupContext; 00154 AUX_ACCESS_DATA AuxData; 00155 } OB_TEMP_BUFFER, *POB_TEMP_BUFFER; 00156 00157 // 00158 // Startup and Shutdown Functions 00159 // 00160 BOOLEAN 00161 NTAPI 00162 ObInitSystem( 00163 VOID 00164 ); 00165 00166 VOID 00167 NTAPI 00168 ObShutdownSystem( 00169 VOID 00170 ); 00171 00172 // 00173 // Directory Namespace Functions 00174 // 00175 BOOLEAN 00176 NTAPI 00177 ObpDeleteEntryDirectory( 00178 IN POBP_LOOKUP_CONTEXT Context 00179 ); 00180 00181 BOOLEAN 00182 NTAPI 00183 ObpInsertEntryDirectory( 00184 IN POBJECT_DIRECTORY Parent, 00185 IN POBP_LOOKUP_CONTEXT Context, 00186 IN POBJECT_HEADER ObjectHeader 00187 ); 00188 00189 PVOID 00190 NTAPI 00191 ObpLookupEntryDirectory( 00192 IN POBJECT_DIRECTORY Directory, 00193 IN PUNICODE_STRING Name, 00194 IN ULONG Attributes, 00195 IN UCHAR SearchShadow, 00196 IN POBP_LOOKUP_CONTEXT Context 00197 ); 00198 00199 // 00200 // Symbolic Link Functions 00201 // 00202 VOID 00203 NTAPI 00204 ObpDeleteSymbolicLink( 00205 IN PVOID ObjectBody 00206 ); 00207 00208 NTSTATUS 00209 NTAPI 00210 ObpParseSymbolicLink( 00211 IN PVOID ParsedObject, 00212 IN PVOID ObjectType, 00213 IN OUT PACCESS_STATE AccessState, 00214 IN KPROCESSOR_MODE AccessMode, 00215 IN ULONG Attributes, 00216 IN OUT PUNICODE_STRING FullPath, 00217 IN OUT PUNICODE_STRING RemainingName, 00218 IN OUT PVOID Context OPTIONAL, 00219 IN PSECURITY_QUALITY_OF_SERVICE SecurityQos OPTIONAL, 00220 OUT PVOID *NextObject 00221 ); 00222 00223 VOID 00224 NTAPI 00225 ObpCreateSymbolicLinkName( 00226 IN POBJECT_SYMBOLIC_LINK SymbolicLink 00227 ); 00228 00229 VOID 00230 NTAPI 00231 ObpDeleteSymbolicLinkName( 00232 IN POBJECT_SYMBOLIC_LINK SymbolicLink 00233 ); 00234 00235 // 00236 // Process/Handle Table Init/Rundown 00237 // 00238 NTSTATUS 00239 NTAPI 00240 ObInitProcess( 00241 IN PEPROCESS Parent OPTIONAL, 00242 IN PEPROCESS Process 00243 ); 00244 00245 PHANDLE_TABLE 00246 NTAPI 00247 ObReferenceProcessHandleTable( 00248 IN PEPROCESS Process 00249 ); 00250 00251 VOID 00252 NTAPI 00253 ObDereferenceProcessHandleTable( 00254 IN PEPROCESS Process 00255 ); 00256 00257 VOID 00258 NTAPI 00259 ObKillProcess( 00260 IN PEPROCESS Process 00261 ); 00262 00263 // 00264 // Object Lookup Functions 00265 // 00266 NTSTATUS 00267 NTAPI 00268 ObpLookupObjectName( 00269 IN HANDLE RootHandle, 00270 IN PUNICODE_STRING ObjectName, 00271 IN ULONG Attributes, 00272 IN POBJECT_TYPE ObjectType, 00273 IN KPROCESSOR_MODE AccessMode, 00274 IN OUT PVOID ParseContext, 00275 IN PSECURITY_QUALITY_OF_SERVICE SecurityQos, 00276 IN PVOID InsertObject, 00277 IN PACCESS_STATE AccessState, 00278 IN POBP_LOOKUP_CONTEXT LookupContext, 00279 OUT PVOID *FoundObject 00280 ); 00281 00282 // 00283 // Object Attribute Functions 00284 // 00285 BOOLEAN 00286 NTAPI 00287 ObpSetHandleAttributes( 00288 IN OUT PHANDLE_TABLE_ENTRY HandleTableEntry, 00289 IN ULONG_PTR Context 00290 ); 00291 00292 VOID 00293 NTAPI 00294 ObQueryDeviceMapInformation( 00295 IN PEPROCESS Process, 00296 OUT PPROCESS_DEVICEMAP_INFORMATION DeviceMapInfo 00297 ); 00298 00299 // 00300 // Object Lifetime Functions 00301 // 00302 VOID 00303 NTAPI 00304 ObpDeleteObject( 00305 IN PVOID Object, 00306 IN BOOLEAN CalledFromWorkerThread 00307 ); 00308 00309 LONG 00310 FASTCALL 00311 ObDereferenceObjectEx( 00312 IN PVOID Object, 00313 IN LONG Count 00314 ); 00315 00316 LONG 00317 FASTCALL 00318 ObReferenceObjectEx( 00319 IN PVOID Object, 00320 IN LONG Count 00321 ); 00322 00323 BOOLEAN 00324 FASTCALL 00325 ObReferenceObjectSafe( 00326 IN PVOID Object 00327 ); 00328 00329 VOID 00330 NTAPI 00331 ObpReapObject( 00332 IN PVOID Unused 00333 ); 00334 00335 VOID 00336 FASTCALL 00337 ObpSetPermanentObject( 00338 IN PVOID ObjectBody, 00339 IN BOOLEAN Permanent 00340 ); 00341 00342 VOID 00343 NTAPI 00344 ObpDeleteNameCheck( 00345 IN PVOID Object 00346 ); 00347 00348 VOID 00349 NTAPI 00350 ObClearProcessHandleTable( 00351 IN PEPROCESS Process 00352 ); 00353 00354 NTSTATUS 00355 NTAPI 00356 ObDuplicateObject( 00357 IN PEPROCESS SourceProcess, 00358 IN HANDLE SourceHandle, 00359 IN PEPROCESS TargetProcess OPTIONAL, 00360 IN PHANDLE TargetHandle OPTIONAL, 00361 IN ACCESS_MASK DesiredAccess, 00362 IN ULONG HandleAttributes, 00363 IN ULONG Options, 00364 IN KPROCESSOR_MODE PreviousMode 00365 ); 00366 00367 VOID 00368 NTAPI 00369 ObFreeObjectCreateInfoBuffer( 00370 IN POBJECT_CREATE_INFORMATION ObjectCreateInfo 00371 ); 00372 00373 VOID 00374 NTAPI 00375 ObpFreeObjectNameBuffer( 00376 IN PUNICODE_STRING Name 00377 ); 00378 00379 VOID 00380 NTAPI 00381 ObpDeleteObjectType( 00382 IN PVOID Object 00383 ); 00384 00385 // 00386 // DOS Devices Functions 00387 // 00388 VOID 00389 NTAPI 00390 ObDereferenceDeviceMap( 00391 IN PEPROCESS Process 00392 ); 00393 00394 VOID 00395 FASTCALL 00396 ObfDereferenceDeviceMap( 00397 IN PVOID DeviceMap 00398 ); 00399 00400 VOID 00401 NTAPI 00402 ObInheritDeviceMap( 00403 IN PEPROCESS Parent, 00404 IN PEPROCESS Process 00405 ); 00406 00407 NTSTATUS 00408 NTAPI 00409 ObpCreateDosDevicesDirectory( 00410 VOID 00411 ); 00412 00413 // 00414 // Security descriptor cache functions 00415 // 00416 NTSTATUS 00417 NTAPI 00418 ObpInitSdCache( 00419 VOID 00420 ); 00421 00422 PSECURITY_DESCRIPTOR 00423 NTAPI 00424 ObpReferenceSecurityDescriptor( 00425 IN POBJECT_HEADER ObjectHeader 00426 ); 00427 00428 // 00429 // Object Security Routines 00430 // 00431 BOOLEAN 00432 NTAPI 00433 ObCheckObjectAccess( 00434 IN PVOID Object, 00435 IN OUT PACCESS_STATE AccessState, 00436 IN BOOLEAN LockHeld, 00437 IN KPROCESSOR_MODE AccessMode, 00438 OUT PNTSTATUS ReturnedStatus 00439 ); 00440 00441 BOOLEAN 00442 NTAPI 00443 ObCheckCreateObjectAccess( 00444 IN PVOID Object, 00445 IN ACCESS_MASK CreateAccess, 00446 IN PACCESS_STATE AccessState, 00447 IN PUNICODE_STRING ComponentName, 00448 IN BOOLEAN LockHeld, 00449 IN KPROCESSOR_MODE AccessMode, 00450 OUT PNTSTATUS AccessStatus 00451 ); 00452 00453 BOOLEAN 00454 NTAPI 00455 ObpCheckTraverseAccess( 00456 IN PVOID Object, 00457 IN ACCESS_MASK TraverseAccess, 00458 IN PACCESS_STATE AccessState OPTIONAL, 00459 IN BOOLEAN LockHeld, 00460 IN KPROCESSOR_MODE AccessMode, 00461 OUT PNTSTATUS AccessStatus 00462 ); 00463 00464 BOOLEAN 00465 NTAPI 00466 ObpCheckObjectReference( 00467 IN PVOID Object, 00468 IN OUT PACCESS_STATE AccessState, 00469 IN BOOLEAN LockHeld, 00470 IN KPROCESSOR_MODE AccessMode, 00471 OUT PNTSTATUS AccessStatus 00472 ); 00473 00474 // 00475 // Default Object Security Callback Routines 00476 // 00477 NTSTATUS 00478 NTAPI 00479 ObAssignObjectSecurityDescriptor( 00480 IN PVOID Object, 00481 IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL, 00482 IN POOL_TYPE PoolType 00483 ); 00484 00485 NTSTATUS 00486 NTAPI 00487 ObDeassignSecurity( 00488 IN OUT PSECURITY_DESCRIPTOR *SecurityDescriptor 00489 ); 00490 00491 NTSTATUS 00492 NTAPI 00493 ObQuerySecurityDescriptorInfo( 00494 IN PVOID Object, 00495 IN PSECURITY_INFORMATION SecurityInformation, 00496 OUT PSECURITY_DESCRIPTOR SecurityDescriptor, 00497 IN OUT PULONG Length, 00498 IN PSECURITY_DESCRIPTOR *OutputSecurityDescriptor 00499 ); 00500 00501 NTSTATUS 00502 NTAPI 00503 ObSetSecurityDescriptorInfo( 00504 IN PVOID Object, 00505 IN PSECURITY_INFORMATION SecurityInformation, 00506 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor, 00507 IN OUT PSECURITY_DESCRIPTOR *OutputSecurityDescriptor, 00508 IN POOL_TYPE PoolType, 00509 IN PGENERIC_MAPPING GenericMapping 00510 ); 00511 00512 // 00513 // Executive Fast Referencing Functions 00514 // 00515 VOID 00516 FASTCALL 00517 ObInitializeFastReference( 00518 IN PEX_FAST_REF FastRef, 00519 IN PVOID Object 00520 ); 00521 00522 PVOID 00523 FASTCALL 00524 ObFastReplaceObject( 00525 IN PEX_FAST_REF FastRef, 00526 IN PVOID Object 00527 ); 00528 00529 PVOID 00530 FASTCALL 00531 ObFastReferenceObject( 00532 IN PEX_FAST_REF FastRef 00533 ); 00534 00535 PVOID 00536 FASTCALL 00537 ObFastReferenceObjectLocked( 00538 IN PEX_FAST_REF FastRef 00539 ); 00540 00541 VOID 00542 FASTCALL 00543 ObFastDereferenceObject( 00544 IN PEX_FAST_REF FastRef, 00545 IN PVOID Object 00546 ); 00547 00548 // 00549 // Object Create and Object Name Capture Functions 00550 // 00551 NTSTATUS 00552 NTAPI 00553 ObpCaptureObjectName( 00554 IN PUNICODE_STRING CapturedName, 00555 IN PUNICODE_STRING ObjectName, 00556 IN KPROCESSOR_MODE AccessMode, 00557 IN BOOLEAN AllocateFromLookaside 00558 ); 00559 00560 NTSTATUS 00561 NTAPI 00562 ObpCaptureObjectCreateInformation( 00563 IN POBJECT_ATTRIBUTES ObjectAttributes, 00564 IN KPROCESSOR_MODE AccessMode, 00565 IN KPROCESSOR_MODE CreatorMode, 00566 IN BOOLEAN AllocateFromLookaside, 00567 IN POBJECT_CREATE_INFORMATION ObjectCreateInfo, 00568 OUT PUNICODE_STRING ObjectName 00569 ); 00570 00571 // 00572 // Miscellanea 00573 // 00574 ULONG 00575 NTAPI 00576 ObGetProcessHandleCount( 00577 IN PEPROCESS Process 00578 ); 00579 00580 // 00581 // Global data inside the Object Manager 00582 // 00583 extern ULONG ObpTraceLevel; 00584 extern KEVENT ObpDefaultObject; 00585 extern KGUARDED_MUTEX ObpDeviceMapLock; 00586 extern POBJECT_TYPE ObpTypeObjectType; 00587 extern POBJECT_TYPE ObSymbolicLinkType; 00588 extern POBJECT_TYPE ObpTypeObjectType; 00589 extern POBJECT_DIRECTORY ObpRootDirectoryObject; 00590 extern POBJECT_DIRECTORY ObpTypeDirectoryObject; 00591 extern PHANDLE_TABLE ObpKernelHandleTable; 00592 extern WORK_QUEUE_ITEM ObpReaperWorkItem; 00593 extern volatile PVOID ObpReaperList; 00594 extern GENERAL_LOOKASIDE ObpNameBufferLookasideList, ObpCreateInfoLookasideList; 00595 extern BOOLEAN IoCountOperations; 00596 extern ALIGNEDNAME ObpDosDevicesShortNamePrefix; 00597 extern ALIGNEDNAME ObpDosDevicesShortNameRoot; 00598 extern UNICODE_STRING ObpDosDevicesShortName; 00599 00600 // 00601 // Inlined Functions 00602 // 00603 #include "ob_x.h" Generated on Sun May 27 2012 04:37:15 for ReactOS by
1.7.6.1
|