From: Etaash Mathamsetty <etaash.mathamsetty@gmail.com> --- dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 2 ++ dlls/ntoskrnl.exe/sync.c | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec index cea2538c719..70999698499 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec +++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec @@ -60,6 +60,8 @@ @ stdcall KeLeaveGuardedRegion() @ stdcall -arch=!i386 KeReleaseInStackQueuedSpinLock(ptr) @ stdcall -fastcall KeReleaseInStackQueuedSpinLockFromDpcLevel(ptr) +@ stdcall KeReleaseGuardedMutexUnsafe(ptr) +@ stdcall KeReleaseGuardedMutex(ptr) @ stub KeSetTimeUpdateNotifyRoutine @ stub KefAcquireSpinLockAtDpcLevel @ stub KefReleaseSpinLockFromDpcLevel diff --git a/dlls/ntoskrnl.exe/sync.c b/dlls/ntoskrnl.exe/sync.c index 773c241a17e..ea97c0deead 100644 --- a/dlls/ntoskrnl.exe/sync.c +++ b/dlls/ntoskrnl.exe/sync.c @@ -461,6 +461,29 @@ void WINAPI KeAcquireGuardedMutex(PKGUARDED_MUTEX mutex) KeAcquireGuardedMutexUnsafe(mutex); } +/*********************************************************************** + * KeReleaseGuardedMutexUnsafe (NTOSKRNL.EXE.@) + */ +void WINAPI KeReleaseGuardedMutexUnsafe(PKGUARDED_MUTEX mutex) +{ + LONG count; + + TRACE("mutex %p.\n", mutex); + + count = InterlockedIncrement( &mutex->Count ); + if (count < 1) + KeSetEvent( &mutex->Event, IO_NO_INCREMENT, FALSE ); +} + +/*********************************************************************** + * KeReleaseGuardedMutex (NTOSKRNL.EXE.@) + */ +void WINAPI KeReleaseGuardedMutex(PKGUARDED_MUTEX mutex) +{ + KeReleaseGuardedMutexUnsafe(mutex); + /* FIXME: Leave Guarded Region */ +} + static void CALLBACK ke_timer_complete_proc(PTP_CALLBACK_INSTANCE instance, void *timer_, PTP_TIMER tp_timer) { KTIMER *timer = timer_; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/2044