From 6078193fec082309e8f63fc1d4315271d464efe5 Mon Sep 17 00:00:00 2001 From: ergo720 <45463469+ergo720@users.noreply.github.com> Date: Mon, 27 Dec 2021 13:51:44 +0100 Subject: [PATCH] Fixed a bug in ObOpenObjectByName --- src/core/kernel/exports/EmuKrnlNt.cpp | 4 +--- src/core/kernel/exports/EmuKrnlOb.cpp | 7 +++++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/core/kernel/exports/EmuKrnlNt.cpp b/src/core/kernel/exports/EmuKrnlNt.cpp index 5d2ca5319..0fc39687f 100644 --- a/src/core/kernel/exports/EmuKrnlNt.cpp +++ b/src/core/kernel/exports/EmuKrnlNt.cpp @@ -917,9 +917,7 @@ XBSYSAPI EXPORTNUM(201) xbox::ntstatus_xt NTAPI xbox::NtOpenDirectoryObject { LOG_FORWARD("ObOpenObjectByName"); - xbox::ntstatus_xt status = ObOpenObjectByName(ObjectAttributes, &ObDirectoryObjectType, NULL, DirectoryHandle); - RegisterXboxHandle(*DirectoryHandle, NULL); // we don't need to create a native handle for a directory object - return status; + return ObOpenObjectByName(ObjectAttributes, &ObDirectoryObjectType, NULL, DirectoryHandle); } // ****************************************************************** diff --git a/src/core/kernel/exports/EmuKrnlOb.cpp b/src/core/kernel/exports/EmuKrnlOb.cpp index 9d5f33637..159d1fbe6 100644 --- a/src/core/kernel/exports/EmuKrnlOb.cpp +++ b/src/core/kernel/exports/EmuKrnlOb.cpp @@ -929,12 +929,15 @@ XBSYSAPI EXPORTNUM(243) xbox::ntstatus_xt NTAPI xbox::ObOpenObjectByName ntstatus_xt result = X_STATUS_OBJECT_PATH_NOT_FOUND; - if (const auto &nativeHandle = GetNativeHandle(Handle)) { - // This was a handle created by Ob + if (ObjectType == &ObDirectoryObjectType) { + // Directory objects are currently handled by Ob PVOID Object; result = ObpReferenceObjectByName(ObjectAttributes->RootDirectory, ObjectAttributes->ObjectName, ObjectAttributes->Attributes, ObjectType, ParseContext, &Object); *Handle = ObpGetHandleByObjectThenDereferenceInline(Object, result); + if (X_NT_SUCCESS(result)) { + RegisterXboxHandle(*Handle, NULL); // we don't need to create a native handle for a directory object + } } else if (ObjectType == &ObSymbolicLinkObjectType) { // Use this place for any interface implementation since