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 2447d01458d..8a67ebdf4c8 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec +++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec @@ -50,6 +50,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 d9b5726b920..2c227974cd7 100644 --- a/dlls/ntoskrnl.exe/sync.c +++ b/dlls/ntoskrnl.exe/sync.c @@ -439,6 +439,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_;