mirror of
https://github.com/reactos/reactos.git
synced 2024-08-13 22:56:37 +00:00
![Joachim Henze](/assets/img/avatar_default.png)
The main motivation to switch to that newer driver is, that our old one simply can not read all isos. Especially complex ones made trouble and were only shown as empty in explorer. It is still possible to build and use the old driver when needed, only thing that needs to be done for that is to revert 0.4.8-dev-164-gec6b3ecbe4
Porting back the state up to 0.4.8-release-100-g8f947b5 implies: Fixing the following JIRA-IDs (or avoid introducing them): CORE-18029 "Mute noisy DPRINT 'SectionObject has ImageSection'" CORE-17405 "Fix a macro-copy-paste and shrink the binary size" CORE-15659 "Unable to build the gcc Release version in Windows using RosBE 2.1.6 (module cdfs fails)" CORE-14315 "CDFS_NEW assertion during first stage setup due to new CcPerformReadAhead" CORE-14128 "Avast! Free Antivirus 7.0 hangs the system when trying to detect a newly created virus" CORE-14067 "CDFS_NEW assertions and exceptions" CORE-14003 "Shutting down LiveCD asserts since introduction of MS PL CDFS_NEW" CORE-13184 "Restore ability to install from disk-image" by picking the following commits: 0.4.8-release-100-g8f947b5322
[NTOSKRNL] Mute noisy DPRINT 'SectionObject has ImageSection' CORE-18029 0.4.8-release-80-geb1ea19588
[CDFS_NEW] == 0.4.15-dev-1456-g889eab7
CORE-17405 0.4.8-release-62-g8c07aad4a8
[CDFS_NEW/XDK] == 0.4.11-dev-39-ga2f9762
+ 0.4.11-dev-40-g6d7ec8c
CORE-14067 0.4.8-release-3-g5d976d04e8
[CDFS_NEW] == 0.4.12-dev-431-gbccad87f3c
+ 0.4.12-dev-432-g3463b2db9f
CORE-15659 0.4.8-RC-3-g51f9494d48
[CDFS_NEW] superseded later by the proper fix 0.4.8-release-62-g8c07aad4a8
CORE-14067 0.4.8-dev-1069-ga5e89014dc
[CDFS_NEW] CORE-14315 0.4.8-dev-475-ga59d4674de
[NTOSKRNL] io/iomgr/device.c (forgotten assert) CORE-14128 0.4.8-dev-221-g9d67a24799
[CDFS_NEW] 0.4.8-dev-220-g67a7e45e35
[CDFS_NEW/DOC] 0.4.8-dev-219-g6a3bbf24e0
[CDFS_NEW] 0.4.8-dev-218-gec26cde4a1
[CDFS_NEW] 0.4.8-dev-217-gbc2378a356
[CDFS_NEW] 0.4.8-dev-216-g5429771b99
[CDFS_NEW] 0.4.8-dev-215-gfd34548263
[CDFS_NEW] Sync with MS-PL driver 0.4.8-dev-164-gec6b3ecbe4
[FILESYSTEMS] switch from CDFS to CDFS_NEW in CMakeLists.txt 0.4.8-dev-160-g2b217e4ecf
[NTOSKRNL] Mute spam CcSetReadAheadGranularity() 0.4.8-dev-159-g64cb138a67
[NTOSKRNL] Mute spam CcPurgeCacheSection() 0.4.8-dev-150-gf723d230a0
[CDFS_NEW] 0.4.8-dev-133-gfaee3753ea
[CDFS_NEW] CORE-14003 0.4.8-dev-132-g1d777ffab5
[NTOSKRNL] iofunc.c CORE-14003 0.4.8-dev-131-gc3d5a3f2bd
[NTOSKRNL] iofunc.c CORE-14003 0.4.8-dev-130-g3b64f7f8fb
[NTOSKRNL] ob/obref.c & co CORE-14003 0.4.8-dev-129-g7eefe70294
[NTOSKRNL] io/iomgr.c & co CORE-14003 0.4.8-dev-127-g5f255827d3
[CDFS_NEW] 0.4.8-dev-126-g1bef48796e
[NTOSKRNL] just a comment, superseded later 0.4.8-dev-125-gcbf0430b56
[CDFS_NEW] 0.4.8-dev-123-gf88fe43abd
[NTOSKRNL] io/iomgr/device.c (forbidden DPRINT) 0.4.8-dev-122-g6c73385625
[CDFS_NEW] CORE-13184 0.4.8-dev-97-g94298313c0
[CDFS_NEW] 0.4.8-dev-95-ge88eeb21af
[CDFS_NEW/NTOSKRNL] CcWaitForCurrentLazyWriterActivity() stub return Success 0.4.8-dev-94-g03d5be6437
[CDFS_NEW] 0.4.8-dev-93-gfa1c60db50
[CDFS_NEW] 0.4.8-dev-92-g8b2fd60829
[CDFS_NEW] 0.4.8-dev-91-ge4da7ecc50
[CDFS_NEW] 0.4.8-dev-90-g7b19676e2b
[CDFS_NEW] 0.4.8-dev-89-g3d4b8783fd
[CDFS_NEW] 0.4.8-dev-88-g818025ecc8
[CDFS_NEW] 0.4.8-dev-87-g2639dd6736
[CDFS_NEW] 0.4.8-dev-86-g755bdb5d0b
[CDFS_NEW] 0.4.8-dev-85-g3cbcb1bade
[CDFS_NEW] and mute spam in opcode INSTEAD of picking: 0.4.8-dev-165-g2284a457a3
[NTOSKRNL] oplock.c Fixup 0.4.8-dev-163-gd3d5853956
[NTOSKRNL] oplock.c Implement oplock-support 0.4.12-dev-232-gf488102c86
[CDFS] was also left out for now I am aware, that the backport introduces white-space-glitches within CDFS_NEW. I decided to live with them in favor of better sync to master and newer releases.
621 lines
12 KiB
C
621 lines
12 KiB
C
/*
|
|
* PROJECT: ReactOS Kernel
|
|
* LICENSE: GPL - See COPYING in the top level directory
|
|
* FILE: ntoskrnl/include/internal/ob.h
|
|
* PURPOSE: Internal header for the Object Manager
|
|
* PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
|
|
*/
|
|
|
|
//
|
|
// Define this if you want debugging support
|
|
//
|
|
#define _OB_DEBUG_ 0x00
|
|
|
|
//
|
|
// These define the Debug Masks Supported
|
|
//
|
|
#define OB_HANDLE_DEBUG 0x01
|
|
#define OB_NAMESPACE_DEBUG 0x02
|
|
#define OB_SECURITY_DEBUG 0x04
|
|
#define OB_REFERENCE_DEBUG 0x08
|
|
#define OB_CALLBACK_DEBUG 0x10
|
|
|
|
//
|
|
// Debug/Tracing support
|
|
//
|
|
#if _OB_DEBUG_
|
|
#ifdef NEW_DEBUG_SYSTEM_IMPLEMENTED // enable when Debug Filters are implemented
|
|
#define OBTRACE DbgPrintEx
|
|
#else
|
|
#define OBTRACE(x, ...) \
|
|
if (x & ObpTraceLevel) DbgPrint(__VA_ARGS__)
|
|
#endif
|
|
#else
|
|
#define OBTRACE(x, fmt, ...) DPRINT(fmt, ##__VA_ARGS__)
|
|
#endif
|
|
|
|
//
|
|
// Mask to detect GENERIC_XXX access masks being used
|
|
//
|
|
#define GENERIC_ACCESS \
|
|
(GENERIC_READ | \
|
|
GENERIC_WRITE | \
|
|
GENERIC_EXECUTE | \
|
|
GENERIC_ALL)
|
|
|
|
//
|
|
// Handle Bit Flags
|
|
//
|
|
#define OBJ_PROTECT_CLOSE 0x01
|
|
//#define OBJ_INHERIT 0x02
|
|
#define OBJ_AUDIT_OBJECT_CLOSE 0x04
|
|
#define OBJ_HANDLE_ATTRIBUTES (OBJ_PROTECT_CLOSE |\
|
|
OBJ_INHERIT | \
|
|
OBJ_AUDIT_OBJECT_CLOSE)
|
|
|
|
//
|
|
// Identifies a Kernel Handle
|
|
//
|
|
#ifdef _WIN64
|
|
#define KERNEL_HANDLE_FLAG 0xFFFFFFFF80000000ULL
|
|
#else
|
|
#define KERNEL_HANDLE_FLAG 0x80000000
|
|
#endif
|
|
#define ObpIsKernelHandle(Handle, ProcessorMode) \
|
|
((((ULONG_PTR)(Handle) & KERNEL_HANDLE_FLAG) == KERNEL_HANDLE_FLAG) && \
|
|
((ProcessorMode) == KernelMode) && \
|
|
((Handle) != NtCurrentProcess()) && \
|
|
((Handle) != NtCurrentThread()))
|
|
|
|
//
|
|
// Converts to and from a Kernel Handle to a normal handle
|
|
//
|
|
#define ObKernelHandleToHandle(Handle) \
|
|
(HANDLE)((ULONG_PTR)(Handle) & ~KERNEL_HANDLE_FLAG)
|
|
#define ObMarkHandleAsKernelHandle(Handle) \
|
|
(HANDLE)((ULONG_PTR)(Handle) | KERNEL_HANDLE_FLAG)
|
|
|
|
//
|
|
// Converts from an EXHANDLE object to a POBJECT_HEADER
|
|
//
|
|
#define ObpGetHandleObject(x) \
|
|
((POBJECT_HEADER)((ULONG_PTR)x->Object & ~OBJ_HANDLE_ATTRIBUTES))
|
|
|
|
//
|
|
// Recovers the security descriptor from a cached security descriptor header
|
|
//
|
|
#define ObpGetHeaderForSd(x) \
|
|
CONTAINING_RECORD((x), SECURITY_DESCRIPTOR_HEADER, SecurityDescriptor)
|
|
|
|
//
|
|
// Recovers the security descriptor from a cached security descriptor list entry
|
|
//
|
|
#define ObpGetHeaderForEntry(x) \
|
|
CONTAINING_RECORD((x), SECURITY_DESCRIPTOR_HEADER, Link)
|
|
|
|
//
|
|
// Context Structures for Ex*Handle Callbacks
|
|
//
|
|
typedef struct _OBP_SET_HANDLE_ATTRIBUTES_CONTEXT
|
|
{
|
|
KPROCESSOR_MODE PreviousMode;
|
|
OBJECT_HANDLE_ATTRIBUTE_INFORMATION Information;
|
|
} OBP_SET_HANDLE_ATTRIBUTES_CONTEXT, *POBP_SET_HANDLE_ATTRIBUTES_CONTEXT;
|
|
|
|
typedef struct _OBP_CLOSE_HANDLE_CONTEXT
|
|
{
|
|
PHANDLE_TABLE HandleTable;
|
|
KPROCESSOR_MODE AccessMode;
|
|
} OBP_CLOSE_HANDLE_CONTEXT, *POBP_CLOSE_HANDLE_CONTEXT;
|
|
|
|
typedef struct _OBP_FIND_HANDLE_DATA
|
|
{
|
|
POBJECT_HEADER ObjectHeader;
|
|
POBJECT_TYPE ObjectType;
|
|
POBJECT_HANDLE_INFORMATION HandleInformation;
|
|
} OBP_FIND_HANDLE_DATA, *POBP_FIND_HANDLE_DATA;
|
|
|
|
//
|
|
// Cached Security Descriptor Header
|
|
//
|
|
typedef struct _SECURITY_DESCRIPTOR_HEADER
|
|
{
|
|
LIST_ENTRY Link;
|
|
ULONG RefCount;
|
|
ULONG FullHash;
|
|
QUAD SecurityDescriptor;
|
|
} SECURITY_DESCRIPTOR_HEADER, *PSECURITY_DESCRIPTOR_HEADER;
|
|
|
|
//
|
|
// Cached Security Descriptor List
|
|
//
|
|
typedef struct _OB_SD_CACHE_LIST
|
|
{
|
|
EX_PUSH_LOCK PushLock;
|
|
LIST_ENTRY Head;
|
|
} OB_SD_CACHE_LIST, *POB_SD_CACHE_LIST;
|
|
|
|
//
|
|
// Structure for quick-compare of a DOS Device path
|
|
//
|
|
typedef union
|
|
{
|
|
WCHAR Name[sizeof(ULARGE_INTEGER) / sizeof(WCHAR)];
|
|
ULARGE_INTEGER Alignment;
|
|
} ALIGNEDNAME;
|
|
|
|
//
|
|
// Private Temporary Buffer for Lookup Routines
|
|
//
|
|
#define TAG_OB_TEMP_STORAGE 'tSbO'
|
|
typedef struct _OB_TEMP_BUFFER
|
|
{
|
|
ACCESS_STATE LocalAccessState;
|
|
OBJECT_CREATE_INFORMATION ObjectCreateInfo;
|
|
OBP_LOOKUP_CONTEXT LookupContext;
|
|
AUX_ACCESS_DATA AuxData;
|
|
} OB_TEMP_BUFFER, *POB_TEMP_BUFFER;
|
|
|
|
//
|
|
// Startup and Shutdown Functions
|
|
//
|
|
BOOLEAN
|
|
NTAPI
|
|
ObInitSystem(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
NTAPI
|
|
ObShutdownSystem(
|
|
VOID
|
|
);
|
|
|
|
//
|
|
// Directory Namespace Functions
|
|
//
|
|
BOOLEAN
|
|
NTAPI
|
|
ObpDeleteEntryDirectory(
|
|
IN POBP_LOOKUP_CONTEXT Context
|
|
);
|
|
|
|
BOOLEAN
|
|
NTAPI
|
|
ObpInsertEntryDirectory(
|
|
IN POBJECT_DIRECTORY Parent,
|
|
IN POBP_LOOKUP_CONTEXT Context,
|
|
IN POBJECT_HEADER ObjectHeader
|
|
);
|
|
|
|
PVOID
|
|
NTAPI
|
|
ObpLookupEntryDirectory(
|
|
IN POBJECT_DIRECTORY Directory,
|
|
IN PUNICODE_STRING Name,
|
|
IN ULONG Attributes,
|
|
IN UCHAR SearchShadow,
|
|
IN POBP_LOOKUP_CONTEXT Context
|
|
);
|
|
|
|
//
|
|
// Symbolic Link Functions
|
|
//
|
|
VOID
|
|
NTAPI
|
|
ObpDeleteSymbolicLink(
|
|
IN PVOID ObjectBody
|
|
);
|
|
|
|
NTSTATUS
|
|
NTAPI
|
|
ObpParseSymbolicLink(
|
|
IN PVOID ParsedObject,
|
|
IN PVOID ObjectType,
|
|
IN OUT PACCESS_STATE AccessState,
|
|
IN KPROCESSOR_MODE AccessMode,
|
|
IN ULONG Attributes,
|
|
IN OUT PUNICODE_STRING FullPath,
|
|
IN OUT PUNICODE_STRING RemainingName,
|
|
IN OUT PVOID Context OPTIONAL,
|
|
IN PSECURITY_QUALITY_OF_SERVICE SecurityQos OPTIONAL,
|
|
OUT PVOID *NextObject
|
|
);
|
|
|
|
VOID
|
|
NTAPI
|
|
ObpCreateSymbolicLinkName(
|
|
IN POBJECT_SYMBOLIC_LINK SymbolicLink
|
|
);
|
|
|
|
VOID
|
|
NTAPI
|
|
ObpDeleteSymbolicLinkName(
|
|
IN POBJECT_SYMBOLIC_LINK SymbolicLink
|
|
);
|
|
|
|
//
|
|
// Process/Handle Table Init/Rundown
|
|
//
|
|
NTSTATUS
|
|
NTAPI
|
|
ObInitProcess(
|
|
IN PEPROCESS Parent OPTIONAL,
|
|
IN PEPROCESS Process
|
|
);
|
|
|
|
PHANDLE_TABLE
|
|
NTAPI
|
|
ObReferenceProcessHandleTable(
|
|
IN PEPROCESS Process
|
|
);
|
|
|
|
VOID
|
|
NTAPI
|
|
ObDereferenceProcessHandleTable(
|
|
IN PEPROCESS Process
|
|
);
|
|
|
|
VOID
|
|
NTAPI
|
|
ObKillProcess(
|
|
IN PEPROCESS Process
|
|
);
|
|
|
|
//
|
|
// Object Lookup Functions
|
|
//
|
|
NTSTATUS
|
|
NTAPI
|
|
ObpLookupObjectName(
|
|
IN HANDLE RootHandle OPTIONAL,
|
|
IN OUT PUNICODE_STRING ObjectName,
|
|
IN ULONG Attributes,
|
|
IN POBJECT_TYPE ObjectType,
|
|
IN KPROCESSOR_MODE AccessMode,
|
|
IN OUT PVOID ParseContext,
|
|
IN PSECURITY_QUALITY_OF_SERVICE SecurityQos OPTIONAL,
|
|
IN PVOID InsertObject OPTIONAL,
|
|
IN OUT PACCESS_STATE AccessState,
|
|
OUT POBP_LOOKUP_CONTEXT LookupContext,
|
|
OUT PVOID *FoundObject
|
|
);
|
|
|
|
//
|
|
// Object Attribute Functions
|
|
//
|
|
BOOLEAN
|
|
NTAPI
|
|
ObpSetHandleAttributes(
|
|
IN OUT PHANDLE_TABLE_ENTRY HandleTableEntry,
|
|
IN ULONG_PTR Context
|
|
);
|
|
|
|
VOID
|
|
NTAPI
|
|
ObQueryDeviceMapInformation(
|
|
IN PEPROCESS Process,
|
|
OUT PPROCESS_DEVICEMAP_INFORMATION DeviceMapInfo
|
|
);
|
|
|
|
//
|
|
// Object Lifetime Functions
|
|
//
|
|
VOID
|
|
NTAPI
|
|
ObpDeleteObject(
|
|
IN PVOID Object,
|
|
IN BOOLEAN CalledFromWorkerThread
|
|
);
|
|
|
|
LONG
|
|
FASTCALL
|
|
ObDereferenceObjectEx(
|
|
IN PVOID Object,
|
|
IN LONG Count
|
|
);
|
|
|
|
LONG
|
|
FASTCALL
|
|
ObReferenceObjectEx(
|
|
IN PVOID Object,
|
|
IN LONG Count
|
|
);
|
|
|
|
BOOLEAN
|
|
FASTCALL
|
|
ObReferenceObjectSafe(
|
|
IN PVOID Object
|
|
);
|
|
|
|
VOID
|
|
NTAPI
|
|
ObpReapObject(
|
|
IN PVOID Unused
|
|
);
|
|
|
|
VOID
|
|
FASTCALL
|
|
ObpSetPermanentObject(
|
|
IN PVOID ObjectBody,
|
|
IN BOOLEAN Permanent
|
|
);
|
|
|
|
VOID
|
|
NTAPI
|
|
ObpDeleteNameCheck(
|
|
IN PVOID Object
|
|
);
|
|
|
|
VOID
|
|
NTAPI
|
|
ObClearProcessHandleTable(
|
|
IN PEPROCESS Process
|
|
);
|
|
|
|
NTSTATUS
|
|
NTAPI
|
|
ObDuplicateObject(
|
|
IN PEPROCESS SourceProcess,
|
|
IN HANDLE SourceHandle,
|
|
IN PEPROCESS TargetProcess OPTIONAL,
|
|
IN PHANDLE TargetHandle OPTIONAL,
|
|
IN ACCESS_MASK DesiredAccess,
|
|
IN ULONG HandleAttributes,
|
|
IN ULONG Options,
|
|
IN KPROCESSOR_MODE PreviousMode
|
|
);
|
|
|
|
VOID
|
|
NTAPI
|
|
ObFreeObjectCreateInfoBuffer(
|
|
IN POBJECT_CREATE_INFORMATION ObjectCreateInfo
|
|
);
|
|
|
|
VOID
|
|
NTAPI
|
|
ObpFreeObjectNameBuffer(
|
|
IN PUNICODE_STRING Name
|
|
);
|
|
|
|
VOID
|
|
NTAPI
|
|
ObpDeleteObjectType(
|
|
IN PVOID Object
|
|
);
|
|
|
|
NTSTATUS
|
|
NTAPI
|
|
ObReferenceFileObjectForWrite(
|
|
IN HANDLE Handle,
|
|
IN KPROCESSOR_MODE AccessMode,
|
|
OUT PFILE_OBJECT *FileObject,
|
|
OUT POBJECT_HANDLE_INFORMATION HandleInformation
|
|
);
|
|
|
|
//
|
|
// DOS Devices Functions
|
|
//
|
|
NTSTATUS
|
|
NTAPI
|
|
ObpCreateDeviceMap(
|
|
IN HANDLE DirectoryHandle
|
|
);
|
|
|
|
VOID
|
|
NTAPI
|
|
ObDereferenceDeviceMap(
|
|
IN PEPROCESS Process
|
|
);
|
|
|
|
VOID
|
|
FASTCALL
|
|
ObfDereferenceDeviceMap(
|
|
IN PDEVICE_MAP DeviceMap
|
|
);
|
|
|
|
VOID
|
|
NTAPI
|
|
ObInheritDeviceMap(
|
|
IN PEPROCESS Parent,
|
|
IN PEPROCESS Process
|
|
);
|
|
|
|
NTSTATUS
|
|
NTAPI
|
|
ObpCreateDosDevicesDirectory(
|
|
VOID
|
|
);
|
|
|
|
//
|
|
// Security descriptor cache functions
|
|
//
|
|
NTSTATUS
|
|
NTAPI
|
|
ObpInitSdCache(
|
|
VOID
|
|
);
|
|
|
|
PSECURITY_DESCRIPTOR
|
|
NTAPI
|
|
ObpReferenceSecurityDescriptor(
|
|
IN POBJECT_HEADER ObjectHeader
|
|
);
|
|
|
|
//
|
|
// Object Security Routines
|
|
//
|
|
BOOLEAN
|
|
NTAPI
|
|
ObCheckObjectAccess(
|
|
IN PVOID Object,
|
|
IN OUT PACCESS_STATE AccessState,
|
|
IN BOOLEAN LockHeld,
|
|
IN KPROCESSOR_MODE AccessMode,
|
|
OUT PNTSTATUS ReturnedStatus
|
|
);
|
|
|
|
BOOLEAN
|
|
NTAPI
|
|
ObCheckCreateObjectAccess(
|
|
IN PVOID Object,
|
|
IN ACCESS_MASK CreateAccess,
|
|
IN PACCESS_STATE AccessState,
|
|
IN PUNICODE_STRING ComponentName,
|
|
IN BOOLEAN LockHeld,
|
|
IN KPROCESSOR_MODE AccessMode,
|
|
OUT PNTSTATUS AccessStatus
|
|
);
|
|
|
|
BOOLEAN
|
|
NTAPI
|
|
ObpCheckTraverseAccess(
|
|
IN PVOID Object,
|
|
IN ACCESS_MASK TraverseAccess,
|
|
IN PACCESS_STATE AccessState OPTIONAL,
|
|
IN BOOLEAN LockHeld,
|
|
IN KPROCESSOR_MODE AccessMode,
|
|
OUT PNTSTATUS AccessStatus
|
|
);
|
|
|
|
BOOLEAN
|
|
NTAPI
|
|
ObpCheckObjectReference(
|
|
IN PVOID Object,
|
|
IN OUT PACCESS_STATE AccessState,
|
|
IN BOOLEAN LockHeld,
|
|
IN KPROCESSOR_MODE AccessMode,
|
|
OUT PNTSTATUS AccessStatus
|
|
);
|
|
|
|
//
|
|
// Default Object Security Callback Routines
|
|
//
|
|
NTSTATUS
|
|
NTAPI
|
|
ObAssignObjectSecurityDescriptor(
|
|
IN PVOID Object,
|
|
IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL,
|
|
IN POOL_TYPE PoolType
|
|
);
|
|
|
|
NTSTATUS
|
|
NTAPI
|
|
ObDeassignSecurity(
|
|
IN OUT PSECURITY_DESCRIPTOR *SecurityDescriptor
|
|
);
|
|
|
|
NTSTATUS
|
|
NTAPI
|
|
ObQuerySecurityDescriptorInfo(
|
|
IN PVOID Object,
|
|
IN PSECURITY_INFORMATION SecurityInformation,
|
|
OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
|
|
IN OUT PULONG Length,
|
|
IN PSECURITY_DESCRIPTOR *OutputSecurityDescriptor
|
|
);
|
|
|
|
NTSTATUS
|
|
NTAPI
|
|
ObSetSecurityDescriptorInfo(
|
|
IN PVOID Object,
|
|
IN PSECURITY_INFORMATION SecurityInformation,
|
|
IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
|
|
IN OUT PSECURITY_DESCRIPTOR *OutputSecurityDescriptor,
|
|
IN POOL_TYPE PoolType,
|
|
IN PGENERIC_MAPPING GenericMapping
|
|
);
|
|
|
|
//
|
|
// Executive Fast Referencing Functions
|
|
//
|
|
VOID
|
|
FASTCALL
|
|
ObInitializeFastReference(
|
|
IN PEX_FAST_REF FastRef,
|
|
IN PVOID Object
|
|
);
|
|
|
|
PVOID
|
|
FASTCALL
|
|
ObFastReplaceObject(
|
|
IN PEX_FAST_REF FastRef,
|
|
IN PVOID Object
|
|
);
|
|
|
|
PVOID
|
|
FASTCALL
|
|
ObFastReferenceObject(
|
|
IN PEX_FAST_REF FastRef
|
|
);
|
|
|
|
PVOID
|
|
FASTCALL
|
|
ObFastReferenceObjectLocked(
|
|
IN PEX_FAST_REF FastRef
|
|
);
|
|
|
|
VOID
|
|
FASTCALL
|
|
ObFastDereferenceObject(
|
|
IN PEX_FAST_REF FastRef,
|
|
IN PVOID Object
|
|
);
|
|
|
|
//
|
|
// Object Create and Object Name Capture Functions
|
|
//
|
|
NTSTATUS
|
|
NTAPI
|
|
ObpCaptureObjectName(
|
|
IN PUNICODE_STRING CapturedName,
|
|
IN PUNICODE_STRING ObjectName,
|
|
IN KPROCESSOR_MODE AccessMode,
|
|
IN BOOLEAN AllocateFromLookaside
|
|
);
|
|
|
|
NTSTATUS
|
|
NTAPI
|
|
ObpCaptureObjectCreateInformation(
|
|
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
|
IN KPROCESSOR_MODE AccessMode,
|
|
IN KPROCESSOR_MODE CreatorMode,
|
|
IN BOOLEAN AllocateFromLookaside,
|
|
IN POBJECT_CREATE_INFORMATION ObjectCreateInfo,
|
|
OUT PUNICODE_STRING ObjectName
|
|
);
|
|
|
|
//
|
|
// Miscellanea
|
|
//
|
|
ULONG
|
|
NTAPI
|
|
ObGetProcessHandleCount(
|
|
IN PEPROCESS Process
|
|
);
|
|
|
|
//
|
|
// Global data inside the Object Manager
|
|
//
|
|
extern ULONG ObpTraceLevel;
|
|
extern KEVENT ObpDefaultObject;
|
|
extern KGUARDED_MUTEX ObpDeviceMapLock;
|
|
extern POBJECT_TYPE ObpTypeObjectType;
|
|
extern POBJECT_TYPE ObSymbolicLinkType;
|
|
extern POBJECT_TYPE ObpTypeObjectType;
|
|
extern POBJECT_DIRECTORY ObpRootDirectoryObject;
|
|
extern POBJECT_DIRECTORY ObpTypeDirectoryObject;
|
|
extern PHANDLE_TABLE ObpKernelHandleTable;
|
|
extern WORK_QUEUE_ITEM ObpReaperWorkItem;
|
|
extern volatile PVOID ObpReaperList;
|
|
extern GENERAL_LOOKASIDE ObpNameBufferLookasideList, ObpCreateInfoLookasideList;
|
|
extern BOOLEAN IoCountOperations;
|
|
extern ALIGNEDNAME ObpDosDevicesShortNamePrefix;
|
|
extern ALIGNEDNAME ObpDosDevicesShortNameRoot;
|
|
extern UNICODE_STRING ObpDosDevicesShortName;
|
|
|
|
//
|
|
// Inlined Functions
|
|
//
|
|
#include "ob_x.h"
|