From 7ed9893a77209e86e4e472fc9e4ca6dd72eff7dd Mon Sep 17 00:00:00 2001 From: PatrickvL Date: Mon, 6 Feb 2017 14:12:25 +0100 Subject: [PATCH] Kernel : Corrected and implemented ObReferenceObjectByPointer --- import/OpenXDK/include/xboxkrnl/ob.h | 3 +-- src/CxbxKrnl/EmuKrnlOb.cpp | 13 ++++++++----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/import/OpenXDK/include/xboxkrnl/ob.h b/import/OpenXDK/include/xboxkrnl/ob.h index 17a19faad..1e72dde29 100644 --- a/import/OpenXDK/include/xboxkrnl/ob.h +++ b/import/OpenXDK/include/xboxkrnl/ob.h @@ -101,8 +101,7 @@ XBSYSAPI EXPORTNUM(247) NTSTATUS NTAPI ObReferenceObjectByName XBSYSAPI EXPORTNUM(248) NTSTATUS NTAPI ObReferenceObjectByPointer ( IN PVOID Object, - IN POBJECT_TYPE ObjectType, - OUT PHANDLE Handle + IN POBJECT_TYPE ObjectType ); // ****************************************************************** diff --git a/src/CxbxKrnl/EmuKrnlOb.cpp b/src/CxbxKrnl/EmuKrnlOb.cpp index 66466ff89..b172d092b 100644 --- a/src/CxbxKrnl/EmuKrnlOb.cpp +++ b/src/CxbxKrnl/EmuKrnlOb.cpp @@ -271,19 +271,22 @@ XBSYSAPI EXPORTNUM(247) xboxkrnl::NTSTATUS NTAPI xboxkrnl::ObReferenceObjectByNa XBSYSAPI EXPORTNUM(248) xboxkrnl::NTSTATUS NTAPI xboxkrnl::ObReferenceObjectByPointer ( IN PVOID Object, - IN POBJECT_TYPE ObjectType, - OUT PHANDLE Handle + IN POBJECT_TYPE ObjectType ) { LOG_FUNC_BEGIN LOG_FUNC_ARG(Object) LOG_FUNC_ARG(ObjectType) - LOG_FUNC_ARG_OUT(Handle) LOG_FUNC_END; - LOG_UNIMPLEMENTED(); + POBJECT_HEADER ObjectHeader = OBJECT_TO_OBJECT_HEADER(Object); + NTSTATUS result = STATUS_SUCCESS; + if (ObjectType == ObjectHeader->Type) + InterlockedIncrement(&ObjectHeader->PointerCount); // Same as ObfReferenceObject + else + result = STATUS_OBJECT_TYPE_MISMATCH; - RETURN(S_OK); + RETURN(result); } // ******************************************************************