From 8a335a3141dc698c517a76feec797549fed75040 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Bi=C8=99oc?= Date: Thu, 16 Feb 2023 20:16:53 +0100 Subject: [PATCH] [NTOS:CM] Implement the shared lock macro for use CmpAcquireKcbLockSharedByKey can come in handy for use to lock KCBs by their convkey with a shared lock, specifically we would need this for cache lookup stuff. --- ntoskrnl/include/internal/cm_x.h | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/ntoskrnl/include/internal/cm_x.h b/ntoskrnl/include/internal/cm_x.h index daf7d67643b..5e7dffd2872 100644 --- a/ntoskrnl/include/internal/cm_x.h +++ b/ntoskrnl/include/internal/cm_x.h @@ -89,6 +89,14 @@ (GET_HASH_ENTRY(CmpCacheTable, \ (k)->ConvKey)->Owner == KeGetCurrentThread()) +// +// Shared acquires a KCB by index +// +#define CmpAcquireKcbLockSharedByIndex(i) \ +{ \ + ExAcquirePushLockShared(&CmpCacheTable[(i)].Lock); \ +} + // // Exclusively acquires a KCB by index // @@ -120,6 +128,16 @@ CmpAcquireKcbLockExclusiveByKey(IN ULONG ConvKey) CmpAcquireKcbLockExclusiveByIndex(GET_HASH_INDEX(ConvKey)); } +// +// Shared acquires a KCB by key +// +FORCEINLINE +VOID +CmpAcquireKcbLockSharedByKey( + _In_ ULONG ConvKey) +{ + CmpAcquireKcbLockSharedByIndex(GET_HASH_INDEX(ConvKey)); +} // // Shared acquires a KCB @@ -130,14 +148,6 @@ CmpAcquireKcbLockExclusiveByKey(IN ULONG ConvKey) (k)->ConvKey)->Lock); \ } -// -// Shared acquires a KCB by index -// -#define CmpAcquireKcbLockSharedByIndex(i) \ -{ \ - ExAcquirePushLockShared(&CmpCacheTable[(i)].Lock); \ -} - // // Tries to convert a KCB lock //