ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

ob.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.