From c212987dc56b565d9a5cc767c3ec240728a6dc4c Mon Sep 17 00:00:00 2001 From: Etaash Mathamsetty Date: Sun, 30 Oct 2022 11:22:57 -0400 Subject: [PATCH] ntoskrnl.exe: Implement KeInitializeGuardedMutex. --- dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 1 + dlls/ntoskrnl.exe/sync.c | 12 ++++++++++++ include/ddk/wdm.h | 17 +++++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec index 8f8edcac7a0..d3910c380df 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec +++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec @@ -577,6 +577,7 @@ @ stub KeInitializeInterrupt @ stub KeInitializeMutant @ stdcall KeInitializeMutex(ptr long) +@ stdcall KeInitializeGuardedMutex(ptr) @ stub KeInitializeQueue @ stdcall KeInitializeSemaphore(ptr long long) @ stdcall KeInitializeSpinLock(ptr) NTOSKRNL_KeInitializeSpinLock diff --git a/dlls/ntoskrnl.exe/sync.c b/dlls/ntoskrnl.exe/sync.c index ada468c73dc..d9b5726b920 100644 --- a/dlls/ntoskrnl.exe/sync.c +++ b/dlls/ntoskrnl.exe/sync.c @@ -427,6 +427,18 @@ LONG WINAPI KeReleaseMutex( PRKMUTEX mutex, BOOLEAN wait ) return ret; } +/*********************************************************************** + * KeInitializeGuardedMutex (NTOSKRNL.EXE.@) + */ +void WINAPI KeInitializeGuardedMutex(PKGUARDED_MUTEX mutex) +{ + TRACE("mutex %p.\n", mutex); + mutex->Count = FM_LOCK_BIT; + mutex->Owner = NULL; + mutex->Contention = 0; + KeInitializeEvent(&mutex->Event, SynchronizationEvent, FALSE); +} + static void CALLBACK ke_timer_complete_proc(PTP_CALLBACK_INSTANCE instance, void *timer_, PTP_TIMER tp_timer) { KTIMER *timer = timer_; diff --git a/include/ddk/wdm.h b/include/ddk/wdm.h index 0aad83ade8c..bd6ddbd67c5 100644 --- a/include/ddk/wdm.h +++ b/include/ddk/wdm.h @@ -253,6 +253,23 @@ typedef struct _FAST_MUTEX ULONG OldIrql; } FAST_MUTEX, *PFAST_MUTEX; +typedef struct _KGUARDED_MUTEX +{ + LONG Count; + PKTHREAD Owner; + ULONG Contention; + KEVENT Event; + union + { + struct + { + SHORT KernelApcDisable; + SHORT SpecialApcDisable; + }; + ULONG CombinedApcDisable; + }; +} KGUARDED_MUTEX, *PKGUARDED_MUTEX; + #define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR)) typedef struct _VPB { -- 2.11.4.GIT