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 4426e5066e0..cea2538c719 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec +++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec @@ -52,6 +52,8 @@ @ stdcall -fastcall IofCompleteRequest(ptr long) @ stdcall -arch=!i386 KeAcquireInStackQueuedSpinLock(ptr ptr) @ stdcall -fastcall KeAcquireInStackQueuedSpinLockAtDpcLevel(ptr ptr) +@ stdcall KeAcquireGuardedMutexUnsafe(ptr) +@ stdcall KeAcquireGuardedMutex(ptr) @ stdcall KeEnterGuardedRegion() @ stdcall KeExpandKernelStackAndCallout(ptr ptr long) @ stdcall KeExpandKernelStackAndCalloutEx(ptr ptr long long ptr) diff --git a/dlls/ntoskrnl.exe/sync.c b/dlls/ntoskrnl.exe/sync.c index 2183df351b2..773c241a17e 100644 --- a/dlls/ntoskrnl.exe/sync.c +++ b/dlls/ntoskrnl.exe/sync.c @@ -438,6 +438,29 @@ void WINAPI KeInitializeGuardedMutex(PKGUARDED_MUTEX mutex) KeInitializeEvent(&mutex->Event, SynchronizationEvent, FALSE); } +/*********************************************************************** + * KeAcquireGuardedMutexUnsafe (NTOSKRNL.EXE.@) + */ +void WINAPI 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 ); +} + +/*********************************************************************** + * KeAcquireGuardedMutex (NTOSKRNL.EXE.@) + */ +void WINAPI KeAcquireGuardedMutex(PKGUARDED_MUTEX mutex) +{ + /* FIXME: Enter Guarded Region */ + KeAcquireGuardedMutexUnsafe(mutex); +} + 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