mirror of
https://github.com/reactos/reactos.git
synced 2024-10-18 23:18:56 +00:00
One of Alex's uncommitted patches while he was working on the Cm branch:
- Fix CmpCacheTable and CmpNameCacheTable definition. - Fix GET_HASH_ENTRY definition. - Add KCB Lock Acquire/Release macros by Index and Key. Has no effect on current code, but fixes some bugs in the branch-based code svn path=/trunk/; revision=28259
This commit is contained in:
parent
79d430fe4a
commit
90307e077e
|
@ -1140,6 +1140,14 @@ CmpComputeHashKey(
|
||||||
IN BOOLEAN AllowSeparators
|
IN BOOLEAN AllowSeparators
|
||||||
);
|
);
|
||||||
|
|
||||||
|
BOOLEAN
|
||||||
|
NTAPI
|
||||||
|
CmpAddSubKey(
|
||||||
|
IN PHHIVE Hive,
|
||||||
|
IN HCELL_INDEX Parent,
|
||||||
|
IN HCELL_INDEX Child
|
||||||
|
);
|
||||||
|
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
NTAPI
|
NTAPI
|
||||||
CmpRemoveSubKey(
|
CmpRemoveSubKey(
|
||||||
|
@ -1345,8 +1353,8 @@ extern EX_PUSH_LOCK CmpHiveListHeadLock, CmpLoadHiveLock;
|
||||||
extern LIST_ENTRY CmpHiveListHead;
|
extern LIST_ENTRY CmpHiveListHead;
|
||||||
extern POBJECT_TYPE CmpKeyObjectType;
|
extern POBJECT_TYPE CmpKeyObjectType;
|
||||||
extern ERESOURCE CmpRegistryLock;
|
extern ERESOURCE CmpRegistryLock;
|
||||||
extern PCM_KEY_HASH_TABLE_ENTRY *CmpCacheTable;
|
extern PCM_KEY_HASH_TABLE_ENTRY CmpCacheTable;
|
||||||
extern PCM_NAME_HASH_TABLE_ENTRY *CmpNameCacheTable;
|
extern PCM_NAME_HASH_TABLE_ENTRY CmpNameCacheTable;
|
||||||
extern KGUARDED_MUTEX CmpDelayedCloseTableLock;
|
extern KGUARDED_MUTEX CmpDelayedCloseTableLock;
|
||||||
extern CMHIVE CmControlHive;
|
extern CMHIVE CmControlHive;
|
||||||
extern WCHAR CmDefaultLanguageId[];
|
extern WCHAR CmDefaultLanguageId[];
|
||||||
|
@ -1371,6 +1379,7 @@ extern ULONG CmpBootType;
|
||||||
extern HANDLE CmpRegistryRootHandle;
|
extern HANDLE CmpRegistryRootHandle;
|
||||||
extern BOOLEAN ExpInTextModeSetup;
|
extern BOOLEAN ExpInTextModeSetup;
|
||||||
extern BOOLEAN InitIsWinPEMode;
|
extern BOOLEAN InitIsWinPEMode;
|
||||||
|
extern ULONG CmpHashTableSize;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Inlined functions
|
// Inlined functions
|
||||||
|
|
|
@ -62,7 +62,7 @@ CmpIsKeyValueBig(IN PHHIVE Hive,
|
||||||
#define GET_HASH_INDEX(ConvKey) \
|
#define GET_HASH_INDEX(ConvKey) \
|
||||||
GET_HASH_KEY(ConvKey) % CmpHashTableSize
|
GET_HASH_KEY(ConvKey) % CmpHashTableSize
|
||||||
#define GET_HASH_ENTRY(Table, ConvKey) \
|
#define GET_HASH_ENTRY(Table, ConvKey) \
|
||||||
(*Table[GET_HASH_INDEX(ConvKey)])
|
(Table[GET_HASH_INDEX(ConvKey)])
|
||||||
|
|
||||||
//
|
//
|
||||||
// Returns whether or not the cell is cached
|
// Returns whether or not the cell is cached
|
||||||
|
@ -114,6 +114,62 @@ CmpIsKeyValueBig(IN PHHIVE Hive,
|
||||||
(k)->ConvKey).Owner = KeGetCurrentThread(); \
|
(k)->ConvKey).Owner = KeGetCurrentThread(); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Exclusively acquires a KCB by index
|
||||||
|
//
|
||||||
|
#define CmpAcquireKcbLockExclusiveByIndex(i) \
|
||||||
|
{ \
|
||||||
|
ExAcquirePushLockExclusive(&CmpCacheTable[(i)].Lock); \
|
||||||
|
CmpCacheTable[(i)].Owner = KeGetCurrentThread(); \
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Exclusively acquires a KCB by key
|
||||||
|
//
|
||||||
|
#define CmpAcquireKcbLockExclusiveByKey(k) \
|
||||||
|
{ \
|
||||||
|
ExAcquirePushLockExclusive(&GET_HASH_ENTRY(CmpCacheTable, \
|
||||||
|
(k)).Lock); \
|
||||||
|
GET_HASH_ENTRY(CmpCacheTable, \
|
||||||
|
(k)).Owner = KeGetCurrentThread(); \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Shared acquires a KCB
|
||||||
|
//
|
||||||
|
#define CmpAcquireKcbLockShared(k) \
|
||||||
|
{ \
|
||||||
|
ExAcquirePushLockShared(&GET_HASH_ENTRY(CmpCacheTable, \
|
||||||
|
(k)->ConvKey).Lock); \
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Shared acquires a KCB by index
|
||||||
|
//
|
||||||
|
#define CmpAcquireKcbLockSharedByIndex(i) \
|
||||||
|
{ \
|
||||||
|
ExAcquirePushLockShared(&CmpCacheTable[(i)].Lock); \
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Tries to convert a KCB lock
|
||||||
|
//
|
||||||
|
FORCEINLINE
|
||||||
|
BOOLEAN
|
||||||
|
CmpTryToConvertKcbSharedToExclusive(IN PCM_KEY_CONTROL_BLOCK k)
|
||||||
|
{
|
||||||
|
ASSERT(CmpIsKcbLockedExclusive(k) == FALSE);
|
||||||
|
if (ExConvertPushLockSharedToExclusive(
|
||||||
|
&GET_HASH_ENTRY(CmpCacheTable, k->ConvKey).Lock))
|
||||||
|
{
|
||||||
|
GET_HASH_ENTRY(CmpCacheTable,
|
||||||
|
k->ConvKey).Owner = KeGetCurrentThread();
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Releases an exlusively or shared acquired KCB
|
// Releases an exlusively or shared acquired KCB
|
||||||
//
|
//
|
||||||
|
@ -124,6 +180,25 @@ CmpIsKeyValueBig(IN PHHIVE Hive,
|
||||||
(k)->ConvKey).Lock); \
|
(k)->ConvKey).Lock); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Releases an exlusively or shared acquired KCB by index
|
||||||
|
//
|
||||||
|
#define CmpReleaseKcbLockByIndex(i) \
|
||||||
|
{ \
|
||||||
|
CmpCacheTable[(i)].Owner = NULL; \
|
||||||
|
ExReleasePushLock(&CmpCacheTable[(i)].Lock); \
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Releases an exlusively or shared acquired KCB by key
|
||||||
|
//
|
||||||
|
#define CmpReleaseKcbLockByKey(k) \
|
||||||
|
{ \
|
||||||
|
GET_HASH_ENTRY(CmpCacheTable, (k)).Owner = NULL; \
|
||||||
|
ExReleasePushLock(&GET_HASH_ENTRY(CmpCacheTable, \
|
||||||
|
(k)).Lock); \
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Exclusively acquires an NCB
|
// Exclusively acquires an NCB
|
||||||
//
|
//
|
||||||
|
|
|
@ -16,8 +16,8 @@
|
||||||
/* GLOBALS *******************************************************************/
|
/* GLOBALS *******************************************************************/
|
||||||
|
|
||||||
ULONG CmpHashTableSize = 2048;
|
ULONG CmpHashTableSize = 2048;
|
||||||
PCM_KEY_HASH_TABLE_ENTRY *CmpCacheTable;
|
PCM_KEY_HASH_TABLE_ENTRY CmpCacheTable;
|
||||||
PCM_NAME_HASH_TABLE_ENTRY *CmpNameCacheTable;
|
PCM_NAME_HASH_TABLE_ENTRY CmpNameCacheTable;
|
||||||
|
|
||||||
LIST_ENTRY CmpFreeKCBListHead;
|
LIST_ENTRY CmpFreeKCBListHead;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue