[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.
This commit is contained in:
George Bișoc 2023-02-16 20:16:53 +01:00
parent 26fe3616fe
commit 8a335a3141
No known key found for this signature in database
GPG key ID: 688C4FBE25D7DEF6

View file

@ -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
//