From a2e623180a37f1c7418c55f5632d03034ffa526d Mon Sep 17 00:00:00 2001 From: Fisherman166 Date: Mon, 25 May 2020 16:11:51 -0700 Subject: [PATCH] Implement ExAcquireReadWriteLockExclusive. --- import/OpenXDK/include/xboxkrnl/ex.h | 2 +- src/core/kernel/exports/EmuKrnlEx.cpp | 22 +++++++++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/import/OpenXDK/include/xboxkrnl/ex.h b/import/OpenXDK/include/xboxkrnl/ex.h index 2be00ad40..ec4bd3dc3 100644 --- a/import/OpenXDK/include/xboxkrnl/ex.h +++ b/import/OpenXDK/include/xboxkrnl/ex.h @@ -12,7 +12,7 @@ #ifndef XBOXKRNL_EX_H #define XBOXKRNL_EX_H -XBSYSAPI EXPORTNUM(12) NTSTATUS NTAPI ExAcquireReadWriteLockExclusive +XBSYSAPI EXPORTNUM(12) VOID NTAPI ExAcquireReadWriteLockExclusive ( IN PERWLOCK ReadWriteLock ); diff --git a/src/core/kernel/exports/EmuKrnlEx.cpp b/src/core/kernel/exports/EmuKrnlEx.cpp index 46315a2bf..ed6092efe 100644 --- a/src/core/kernel/exports/EmuKrnlEx.cpp +++ b/src/core/kernel/exports/EmuKrnlEx.cpp @@ -144,17 +144,29 @@ static bool eeprom_data_is_valid(xboxkrnl::XC_VALUE_INDEX index) // * 0x000C - ExAcquireReadWriteLockExclusive() // ****************************************************************** // Source:APILogger - Uncertain -XBSYSAPI EXPORTNUM(12) xboxkrnl::NTSTATUS NTAPI xboxkrnl::ExAcquireReadWriteLockExclusive +XBSYSAPI EXPORTNUM(12) xboxkrnl::VOID NTAPI xboxkrnl::ExAcquireReadWriteLockExclusive ( IN PERWLOCK ReadWriteLock ) { LOG_FUNC_ONE_ARG(ReadWriteLock); - // KeWaitForSingleObject - LOG_UNIMPLEMENTED(); - - RETURN(S_OK); + bool interrupt_mode = DisableInterrupts(); + ReadWriteLock->LockCount++; + if (ReadWriteLock->LockCount != 0) { + ReadWriteLock->WritersWaitingCount++; + RestoreInterruptMode(interrupt_mode); + KeWaitForSingleObject( + &ReadWriteLock->WriterEvent, + Executive, + 0, + 0, + 0 + ); + } + else { + RestoreInterruptMode(interrupt_mode); + } } // ******************************************************************