50 if (ObjectNameInfo !=
NULL)
52 NameDirectory = ObjectNameInfo->
Directory;
86 if (DeviceMap !=
NULL)
115 TargetPath = LocalTarget;
118 if (LocalTarget.
Length != 0)
130 while (LocalTarget.
Length != 0);
139 if (TargetPath.
Length == 0)
157 if (DirectoryObject == NameDirectory)
164 DirectoryLocked =
FALSE;
174 if (DirectoryObject == NameDirectory)
209 goto ReparseTargetPath;
223 if (ObjectNameInfo !=
NULL)
248 if (DeviceMap !=
NULL)
297 DPRINT1(
"Device Type %lu for %wZ is not known or unhandled\n",
305 if (DeviceMap !=
NULL)
345 if (ObjectNameInfo ==
NULL)
360 if (UpperDrive >=
L'A' && UpperDrive <=
L'Z')
466 *NextObject = ParsedObject;
506 if (LengthUsed > 0xFFF0)
510 if (FullPath->MaximumLength > LengthUsed)
565 FullPath->Buffer = NewTargetPath;
567 FullPath->Length = LengthUsed;
581 TempLength = TargetPath->
Length;
591 if ((TargetPath->
Buffer[TempLength /
sizeof(
WCHAR) - 1] ==
604 if (LengthUsed > 0xFFF0)
608 if (FullPath->MaximumLength <= LengthUsed)
621 NewTargetPath = FullPath->Buffer;
638 if (NewTargetPath != FullPath->Buffer)
ExFreePool(FullPath->Buffer);
641 FullPath->Length = (
USHORT)LengthUsed;
643 FullPath->Buffer = NewTargetPath;
729 DbgPrint(
"OB: Invalid symbolic link target - %wZ\n",
730 &CapturedLinkTarget);
767 CapturedLinkTarget.
Buffer,
950 (
PVOID*)&SymlinkObject,
_In_ PVOID _In_ ULONG _Out_ PVOID _In_ ULONG _Inout_ PULONG _In_ KPROCESSOR_MODE PreviousMode
#define ObpDirectoryObjectType
#define OBJ_NAME_PATH_SEPARATOR
_Inout_ PFCB _Inout_ PUNICODE_STRING RemainingName
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
#define STATUS_OBJECT_TYPE_MISMATCH
#define NT_SUCCESS(StatCode)
static const WCHAR SymbolicLink[]
#define ExAllocatePoolWithTag(hernya, size, tag)
#define KeQuerySystemTime(t)
#define ExGetPreviousMode
VOID NTAPI ProbeForRead(IN CONST VOID *Address, IN SIZE_T Length, IN ULONG Alignment)
VOID NTAPI ProbeForWrite(IN PVOID Address, IN SIZE_T Length, IN ULONG Alignment)
VOID FASTCALL KeReleaseGuardedMutex(IN OUT PKGUARDED_MUTEX GuardedMutex)
VOID FASTCALL KeAcquireGuardedMutex(IN PKGUARDED_MUTEX GuardedMutex)
LONG NTAPI ExSystemExceptionFilter(VOID)
#define EXCEPTION_EXECUTE_HANDLER
POBJECT_TYPE IoDeviceObjectType
struct _OBJECT_SYMBOLIC_LINK * POBJECT_SYMBOLIC_LINK
#define DOSDEVICE_DRIVE_UNKNOWN
#define DOSDEVICE_DRIVE_RAMDISK
#define OBJECT_HEADER_TO_NAME_INFO(h)
#define DOSDEVICE_DRIVE_FIXED
#define DOSDEVICE_DRIVE_CALCULATE
#define DOSDEVICE_DRIVE_REMOTE
#define OBJECT_TO_OBJECT_HEADER(o)
#define DOSDEVICE_DRIVE_CDROM
#define DOSDEVICE_DRIVE_REMOVABLE
WCHAR NTAPI RtlUpcaseUnicodeChar(_In_ WCHAR Source)
#define SYMBOLIC_LINK_QUERY
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define FILE_REMOVABLE_MEDIA
__GNU_EXTENSION typedef unsigned __int64 * PULONGLONG
#define STATUS_REPARSE_OBJECT
#define STATUS_NAME_TOO_LONG
ALIGNEDNAME ObpDosDevicesShortNamePrefix
UNICODE_STRING ObpDosDevicesShortName
PVOID NTAPI ObpLookupEntryDirectory(IN POBJECT_DIRECTORY Directory, IN PUNICODE_STRING Name, IN ULONG Attributes, IN BOOLEAN SearchShadow, IN POBP_LOOKUP_CONTEXT Context)
KGUARDED_MUTEX ObpDeviceMapLock
POBJECT_DIRECTORY ObpRootDirectoryObject
ULONG ObpLUIDDeviceMapsEnabled
FORCEINLINE VOID ObpAcquireObjectLock(IN POBJECT_HEADER ObjectHeader)
FORCEINLINE VOID ObpInitializeLookupContext(IN POBP_LOOKUP_CONTEXT Context)
Initializes a new object directory lookup context. Used for lookup operations (insertions/deletions) ...
FORCEINLINE VOID ObpReleaseObjectLock(IN POBJECT_HEADER ObjectHeader)
FORCEINLINE VOID ObpDereferenceNameInfo(IN POBJECT_HEADER_NAME_INFO HeaderNameInfo)
FORCEINLINE VOID ObpReleaseLookupContext(IN POBP_LOOKUP_CONTEXT Context)
Releases an initialized object directory lookup context. Unlocks it if necessary, and dereferences th...
FORCEINLINE POBJECT_HEADER_NAME_INFO ObpReferenceNameInfo(IN POBJECT_HEADER ObjectHeader)
NTSTATUS NTAPI ObInsertObject(IN PVOID Object, IN PACCESS_STATE AccessState OPTIONAL, IN ACCESS_MASK DesiredAccess, IN ULONG ObjectPointerBias, OUT PVOID *NewObject OPTIONAL, OUT PHANDLE Handle)
NTSTATUS NTAPI ObOpenObjectByName(IN POBJECT_ATTRIBUTES ObjectAttributes, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, IN PACCESS_STATE PassedAccessState, IN ACCESS_MASK DesiredAccess, IN OUT PVOID ParseContext, OUT PHANDLE Handle)
PDEVICE_MAP ObSystemDeviceMap
NTSTATUS NTAPI ObCreateObject(IN KPROCESSOR_MODE ProbeMode OPTIONAL, IN POBJECT_TYPE Type, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN KPROCESSOR_MODE AccessMode, IN OUT PVOID ParseContext OPTIONAL, IN ULONG ObjectSize, IN ULONG PagedPoolCharge OPTIONAL, IN ULONG NonPagedPoolCharge OPTIONAL, OUT PVOID *Object)
VOID NTAPI ObpDeleteSymbolicLink(PVOID ObjectBody)
POBJECT_TYPE ObpSymbolicLinkObjectType
NTSTATUS NTAPI NtQuerySymbolicLinkObject(IN HANDLE LinkHandle, OUT PUNICODE_STRING LinkTarget, OUT PULONG ResultLength OPTIONAL)
VOID ObpProcessDosDeviceSymbolicLink(IN POBJECT_SYMBOLIC_LINK SymbolicLink, IN BOOLEAN DeleteLink)
VOID NTAPI ObpDeleteSymbolicLinkName(IN POBJECT_SYMBOLIC_LINK SymbolicLink)
NTSTATUS NTAPI NtCreateSymbolicLinkObject(OUT PHANDLE LinkHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, IN PUNICODE_STRING LinkTarget)
VOID NTAPI ObpCreateSymbolicLinkName(IN POBJECT_SYMBOLIC_LINK SymbolicLink)
NTSTATUS NTAPI NtOpenSymbolicLinkObject(OUT PHANDLE LinkHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
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)
NTSTATUS NTAPI ObReferenceObjectByHandle(IN HANDLE Handle, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, OUT PVOID *Object, OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL)
NTSTATUS NTAPI ObReferenceObjectByPointer(IN PVOID Object, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode)
#define FILE_DEVICE_FILE_SYSTEM
#define FILE_DEVICE_DISK_FILE_SYSTEM
#define FILE_DEVICE_CD_ROM
#define FILE_DEVICE_CD_ROM_FILE_SYSTEM
#define FILE_DEVICE_NETWORK_FILE_SYSTEM
#define FILE_DEVICE_NETWORK
#define FILE_DEVICE_VIRTUAL_DISK
#define _SEH2_GetExceptionCode()
#define _SEH2_EXCEPT(...)
#define _SEH2_YIELD(__stmt)
#define ProbeForWriteUnicodeString(Ptr)
#define ProbeForWriteHandle(Ptr)
#define ProbeForWriteUlong(Ptr)
#define ProbeForReadUnicodeString(Ptr)
#define STATUS_BUFFER_TOO_SMALL
PULONG MinorVersion OPTIONAL
POBJECT_DIRECTORY DosDevicesDirectory
struct _DEVICE_MAP * DeviceMap
UNICODE_STRING LinkTargetRemaining
UNICODE_STRING LinkTarget
#define TAG_SYMLINK_TARGET
#define RtlCopyMemory(Destination, Source, Length)
#define RtlMoveMemory(Destination, Source, Length)
#define STATUS_INVALID_PARAMETER
#define STATUS_INSUFFICIENT_RESOURCES
#define ALIGN_DOWN(size, type)
_Must_inspect_result_ _In_ WDFCOLLECTION _In_ WDFOBJECT Object
_Must_inspect_result_ _In_ WDFDMAENABLER _In_ _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG _Out_ PULONG ResultLength
_Must_inspect_result_ _In_ WDFDEVICE _In_ ULONG _In_ ACCESS_MASK DesiredAccess
_In_ WDFDMATRANSACTION _In_ size_t MaximumLength
_In_ PEPROCESS _In_ KPROCESSOR_MODE AccessMode
#define ObDereferenceObject
#define PsGetCurrentProcess
_In_opt_ PVOID _In_opt_ PUNICODE_STRING _In_ PSECURITY_DESCRIPTOR _In_ PACCESS_STATE AccessState
_Inout_ PUNICODE_STRING LinkTarget