[NTOSKRNL/CONFIG]

- Implement new (correct) hive flusher lock/release routines, unused right now.

svn path=/trunk/; revision=46619
This commit is contained in:
Aleksey Bragin 2010-03-31 14:27:11 +00:00
parent 3b722382ee
commit fbf4909187
2 changed files with 114 additions and 0 deletions

View file

@ -27,6 +27,7 @@ BOOLEAN CmpFlushOnLockRelease;
BOOLEAN CmpSpecialBootCondition;
BOOLEAN CmpNoWrite;
BOOLEAN CmpWasSetupBoot;
BOOLEAN CmpProfileLoaded;
ULONG CmpTraceLevel = 0;
extern LONG CmpFlushStarveWriters;
@ -1622,6 +1623,56 @@ CmpTestRegistryLockExclusive(VOID)
return !ExIsResourceAcquiredExclusiveLite(&CmpRegistryLock) ? FALSE : TRUE;
}
VOID
NTAPI
CmpLockHiveFlusherExclusive(IN PCMHIVE Hive)
{
/* Lock the flusher. We should already be in a critical section */
CMP_ASSERT_REGISTRY_LOCK_OR_LOADING(Hive);
ASSERT((ExIsResourceAcquiredShared(Hive->FlusherLock) == 0) &&
(ExIsResourceAcquiredExclusiveLite(Hive->FlusherLock) == 0));
ExAcquireResourceExclusiveLite(Hive->FlusherLock, TRUE);
}
VOID
NTAPI
CmpLockHiveFlusherShared(IN PCMHIVE Hive)
{
/* Lock the flusher. We should already be in a critical section */
CMP_ASSERT_REGISTRY_LOCK_OR_LOADING(Hive);
ASSERT((ExIsResourceAcquiredShared(Hive->FlusherLock) == 0) &&
(ExIsResourceAcquiredExclusiveLite(Hive->FlusherLock) == 0));
ExAcquireResourceSharedLite(Hive->FlusherLock, TRUE);
}
VOID
NTAPI
CmpUnlockHiveFlusher(IN PCMHIVE Hive)
{
/* Sanity check */
CMP_ASSERT_REGISTRY_LOCK_OR_LOADING(Hive);
CMP_ASSERT_FLUSH_LOCK(Hive);
/* Release the lock */
ExReleaseResourceLite(Hive->FlusherLock);
}
BOOLEAN
NTAPI
CmpTestHiveFlusherLockShared(IN PCMHIVE Hive)
{
/* Test the lock */
return !ExIsResourceAcquiredSharedLite(Hive->FlusherLock) ? FALSE : TRUE;
}
BOOLEAN
NTAPI
CmpTestHiveFlusherLockExclusive(IN PCMHIVE Hive)
{
/* Test the lock */
return !ExIsResourceAcquiredExclusiveLite(Hive->FlusherLock) ? FALSE : TRUE;
}
VOID
NTAPI
CmpUnlockRegistry(VOID)

View file

@ -621,6 +621,24 @@ CmCheckRegistry(
IN ULONG Flags
);
//
// Hive List Routines
//
NTSTATUS
NTAPI
CmpAddToHiveFileList(
IN PCMHIVE Hive
);
//
// Quota Routines
//
VOID
NTAPI
CmpSetGlobalQuotaAllowed(
VOID
);
//
// Notification Routines
//
@ -633,6 +651,13 @@ CmpReportNotify(
IN ULONG Filter
);
VOID
NTAPI
CmpFlushNotify(
IN PCM_KEY_BODY KeyBody,
IN BOOLEAN LockHeld
);
VOID
NTAPI
CmpInitCallback(
@ -822,6 +847,36 @@ CmpUnlockRegistry(
VOID
);
VOID
NTAPI
CmpLockHiveFlusherExclusive(
IN PCMHIVE Hive
);
VOID
NTAPI
CmpLockHiveFlusherShared(
IN PCMHIVE Hive
);
BOOLEAN
NTAPI
CmpTestHiveFlusherLockExclusive(
IN PCMHIVE Hive
);
BOOLEAN
NTAPI
CmpTestHiveFlusherLockShared(
IN PCMHIVE Hive
);
VOID
NTAPI
CmpUnlockHiveFlusher(
IN PCMHIVE Hive
);
//
// Delay Functions
//
@ -978,6 +1033,13 @@ CmpReleaseTwoKcbLockByKey(
IN ULONG ConvKey2
);
VOID
NTAPI
CmpFlushNotifiesOnKeyBodyList(
IN PCM_KEY_CONTROL_BLOCK Kcb,
IN BOOLEAN LockHeld
);
//
// Name Functions
//
@ -1507,6 +1569,7 @@ extern ULONG CmpDelayedCloseSize, CmpDelayedCloseIndex;
extern BOOLEAN CmpNoWrite;
extern BOOLEAN CmpForceForceFlush;
extern BOOLEAN CmpWasSetupBoot;
extern BOOLEAN CmpProfileLoaded;
extern PCMHIVE CmiVolatileHive;
extern LIST_ENTRY CmiKeyObjectListHead;
extern BOOLEAN CmpHoldLazyFlush;