From: Etaash Mathamsetty <etaash.mathamsetty@gmail.com> --- dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 6 ++++-- dlls/ntoskrnl.exe/sync.c | 33 +++++++++++++++++++++-------- 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec index cea2538c719..60ce0fbb292 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec +++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec @@ -52,14 +52,16 @@ @ stdcall -fastcall IofCompleteRequest(ptr long) @ stdcall -arch=!i386 KeAcquireInStackQueuedSpinLock(ptr ptr) @ stdcall -fastcall KeAcquireInStackQueuedSpinLockAtDpcLevel(ptr ptr) -@ stdcall KeAcquireGuardedMutexUnsafe(ptr) -@ stdcall KeAcquireGuardedMutex(ptr) +@ stdcall -fastcall KeAcquireGuardedMutexUnsafe(ptr) +@ stdcall -fastcall KeAcquireGuardedMutex(ptr) @ stdcall KeEnterGuardedRegion() @ stdcall KeExpandKernelStackAndCallout(ptr ptr long) @ stdcall KeExpandKernelStackAndCalloutEx(ptr ptr long long ptr) @ stdcall KeLeaveGuardedRegion() @ stdcall -arch=!i386 KeReleaseInStackQueuedSpinLock(ptr) @ stdcall -fastcall KeReleaseInStackQueuedSpinLockFromDpcLevel(ptr) +@ stdcall -fastcall KeReleaseGuardedMutexUnsafe(ptr) +@ stdcall -fastcall KeReleaseGuardedMutex(ptr) @ stub KeSetTimeUpdateNotifyRoutine @ stub KefAcquireSpinLockAtDpcLevel @ stub KefReleaseSpinLockFromDpcLevel diff --git a/dlls/ntoskrnl.exe/sync.c b/dlls/ntoskrnl.exe/sync.c index 773c241a17e..009a1085bce 100644 --- a/dlls/ntoskrnl.exe/sync.c +++ b/dlls/ntoskrnl.exe/sync.c @@ -441,26 +441,41 @@ void WINAPI KeInitializeGuardedMutex(PKGUARDED_MUTEX mutex) /*********************************************************************** * KeAcquireGuardedMutexUnsafe (NTOSKRNL.EXE.@) */ -void WINAPI KeAcquireGuardedMutexUnsafe(PKGUARDED_MUTEX mutex) +DEFINE_FASTCALL1_WRAPPER(KeAcquireGuardedMutexUnsafe) +void FASTCALL KeAcquireGuardedMutexUnsafe(PKGUARDED_MUTEX mutex) { - LONG count; - - TRACE("mutex %p.\n", mutex); - - count = InterlockedDecrement( &mutex->Count ); - if (count < 0) - KeWaitForSingleObject( &mutex->Event, Executive, KernelMode, FALSE, NULL ); + ExAcquireFastMutexUnsafe((PFAST_MUTEX)mutex); } /*********************************************************************** * KeAcquireGuardedMutex (NTOSKRNL.EXE.@) */ -void WINAPI KeAcquireGuardedMutex(PKGUARDED_MUTEX mutex) +DEFINE_FASTCALL1_WRAPPER(KeAcquireGuardedMutex) +void FASTCALL KeAcquireGuardedMutex(PKGUARDED_MUTEX mutex) { /* FIXME: Enter Guarded Region */ KeAcquireGuardedMutexUnsafe(mutex); } +/*********************************************************************** + * KeReleaseGuardedMutexUnsafe (NTOSKRNL.EXE.@) + */ +DEFINE_FASTCALL1_WRAPPER(KeReleaseGuardedMutexUnsafe) +void FASTCALL KeReleaseGuardedMutexUnsafe(PKGUARDED_MUTEX mutex) +{ + ExReleaseFastMutexUnsafe((PFAST_MUTEX)mutex); +} + +/*********************************************************************** + * KeReleaseGuardedMutex (NTOSKRNL.EXE.@) + */ +DEFINE_FASTCALL1_WRAPPER(KeReleaseGuardedMutex) +void FASTCALL 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