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 8a67ebdf4c8..4b84f3e304b 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec +++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec @@ -58,6 +58,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 2c227974cd7..8ff198efc49 100644 --- a/dlls/ntoskrnl.exe/sync.c +++ b/dlls/ntoskrnl.exe/sync.c @@ -462,6 +462,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_;