mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 10:04:49 +00:00
Implemented deferred hive synchronization. It doesn't sync yet.
svn path=/trunk/; revision=3816
This commit is contained in:
parent
0416e5796f
commit
a378416e55
3 changed files with 64 additions and 8 deletions
|
@ -531,4 +531,7 @@ CmiCopyPackedName(PWCHAR NameBuffer,
|
||||||
PCHAR PackedNameBuffer,
|
PCHAR PackedNameBuffer,
|
||||||
ULONG PackedNameSize);
|
ULONG PackedNameSize);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
CmiSyncHives(VOID);
|
||||||
|
|
||||||
#endif /*__INCLUDE_CM_H*/
|
#endif /*__INCLUDE_CM_H*/
|
||||||
|
|
|
@ -184,6 +184,8 @@ NtCreateKey(OUT PHANDLE KeyHandle,
|
||||||
|
|
||||||
VERIFY_KEY_OBJECT(KeyObject);
|
VERIFY_KEY_OBJECT(KeyObject);
|
||||||
|
|
||||||
|
CmiSyncHives();
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -229,6 +231,8 @@ NtDeleteKey(IN HANDLE KeyHandle)
|
||||||
/* Release hive lock */
|
/* Release hive lock */
|
||||||
ExReleaseResourceLite(&KeyObject->RegistryHive->HiveResource);
|
ExReleaseResourceLite(&KeyObject->RegistryHive->HiveResource);
|
||||||
|
|
||||||
|
CmiSyncHives();
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1487,6 +1491,8 @@ NtSetValueKey(IN HANDLE KeyHandle,
|
||||||
ExReleaseResourceLite(&KeyObject->RegistryHive->HiveResource);
|
ExReleaseResourceLite(&KeyObject->RegistryHive->HiveResource);
|
||||||
ObDereferenceObject(KeyObject);
|
ObDereferenceObject(KeyObject);
|
||||||
|
|
||||||
|
CmiSyncHives();
|
||||||
|
|
||||||
DPRINT("Return Status 0x%X\n", Status);
|
DPRINT("Return Status 0x%X\n", Status);
|
||||||
|
|
||||||
return(Status);
|
return(Status);
|
||||||
|
@ -1526,6 +1532,8 @@ NtDeleteValueKey(IN HANDLE KeyHandle,
|
||||||
|
|
||||||
ObDereferenceObject(KeyObject);
|
ObDereferenceObject(KeyObject);
|
||||||
|
|
||||||
|
CmiSyncHives();
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: registry.c,v 1.79 2002/11/30 14:46:27 ekohl Exp $
|
/* $Id: registry.c,v 1.80 2002/12/02 18:52:44 ekohl Exp $
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
|
@ -37,6 +37,11 @@ KSPIN_LOCK CmiKeyListLock;
|
||||||
LIST_ENTRY CmiHiveListHead;
|
LIST_ENTRY CmiHiveListHead;
|
||||||
KSPIN_LOCK CmiHiveListLock;
|
KSPIN_LOCK CmiHiveListLock;
|
||||||
|
|
||||||
|
volatile BOOLEAN CmiHiveSyncEnabled = FALSE;
|
||||||
|
volatile BOOLEAN CmiHiveSyncPending = FALSE;
|
||||||
|
KDPC CmiHiveSyncDpc;
|
||||||
|
KTIMER CmiHiveSyncTimer;
|
||||||
|
|
||||||
static PKEY_OBJECT CmiRootKey = NULL;
|
static PKEY_OBJECT CmiRootKey = NULL;
|
||||||
static PKEY_OBJECT CmiMachineKey = NULL;
|
static PKEY_OBJECT CmiMachineKey = NULL;
|
||||||
static PKEY_OBJECT CmiUserKey = NULL;
|
static PKEY_OBJECT CmiUserKey = NULL;
|
||||||
|
@ -54,6 +59,12 @@ CmiCheckKey(BOOLEAN Verbose,
|
||||||
static NTSTATUS
|
static NTSTATUS
|
||||||
CmiCreateCurrentControlSetLink(VOID);
|
CmiCreateCurrentControlSetLink(VOID);
|
||||||
|
|
||||||
|
static VOID STDCALL
|
||||||
|
CmiHiveSyncDpcRoutine(PKDPC Dpc,
|
||||||
|
PVOID DeferredContext,
|
||||||
|
PVOID SystemArgument1,
|
||||||
|
PVOID SystemArgument2);
|
||||||
|
|
||||||
/* FUNCTIONS ****************************************************************/
|
/* FUNCTIONS ****************************************************************/
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
|
@ -901,7 +912,12 @@ CmiInitHives(BOOLEAN SetUpBoot)
|
||||||
|
|
||||||
// CmiCheckRegistry(TRUE);
|
// CmiCheckRegistry(TRUE);
|
||||||
|
|
||||||
/* FIXME: Start automatic hive syncronization */
|
/* Start automatic hive synchronization */
|
||||||
|
KeInitializeDpc(&CmiHiveSyncDpc,
|
||||||
|
CmiHiveSyncDpcRoutine,
|
||||||
|
NULL);
|
||||||
|
KeInitializeTimer(&CmiHiveSyncTimer);
|
||||||
|
CmiHiveSyncEnabled = TRUE;
|
||||||
|
|
||||||
DPRINT("CmiInitHives() done\n");
|
DPRINT("CmiInitHives() done\n");
|
||||||
|
|
||||||
|
@ -918,7 +934,8 @@ CmShutdownRegistry(VOID)
|
||||||
|
|
||||||
DPRINT1("CmShutdownRegistry() called\n");
|
DPRINT1("CmShutdownRegistry() called\n");
|
||||||
|
|
||||||
/* FIXME: Stop automatic hive syncronization */
|
/* Stop automatic hive synchronization */
|
||||||
|
CmiHiveSyncEnabled = FALSE;
|
||||||
|
|
||||||
KeAcquireSpinLock(&CmiHiveListLock,&oldlvl);
|
KeAcquireSpinLock(&CmiHiveListLock,&oldlvl);
|
||||||
Entry = CmiHiveListHead.Flink;
|
Entry = CmiHiveListHead.Flink;
|
||||||
|
@ -928,11 +945,11 @@ CmShutdownRegistry(VOID)
|
||||||
|
|
||||||
if (Hive->Flags & HIVE_VOLATILE)
|
if (Hive->Flags & HIVE_VOLATILE)
|
||||||
{
|
{
|
||||||
DPRINT1("Volatile hive\n");
|
DPRINT("Volatile hive\n");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DPRINT1("Flush non-volatile hive '%wZ'\n", &Hive->Filename);
|
DPRINT("Flush non-volatile hive '%wZ'\n", &Hive->Filename);
|
||||||
|
|
||||||
/* Flush non-volatile hive */
|
/* Flush non-volatile hive */
|
||||||
|
|
||||||
|
@ -945,13 +962,41 @@ CmShutdownRegistry(VOID)
|
||||||
}
|
}
|
||||||
KeReleaseSpinLock(&CmiHiveListLock,oldlvl);
|
KeReleaseSpinLock(&CmiHiveListLock,oldlvl);
|
||||||
|
|
||||||
DPRINT1(" *** System stopped ***\n");
|
|
||||||
for (;;);
|
|
||||||
|
|
||||||
/* Note:
|
/* Note:
|
||||||
* Don't call UNIMPLEMENTED() here since this function is
|
* Don't call UNIMPLEMENTED() here since this function is
|
||||||
* called by NtShutdownSystem().
|
* called by NtShutdownSystem().
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static VOID STDCALL
|
||||||
|
CmiHiveSyncDpcRoutine(PKDPC Dpc,
|
||||||
|
PVOID DeferredContext,
|
||||||
|
PVOID SystemArgument1,
|
||||||
|
PVOID SystemArgument2)
|
||||||
|
{
|
||||||
|
DPRINT("CmiHiveSyncDpcRoutine() called\n");
|
||||||
|
|
||||||
|
CmiHiveSyncPending = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
VOID
|
||||||
|
CmiSyncHives(VOID)
|
||||||
|
{
|
||||||
|
LARGE_INTEGER Timeout;
|
||||||
|
|
||||||
|
if (CmiHiveSyncEnabled == FALSE ||
|
||||||
|
CmiHiveSyncPending == TRUE)
|
||||||
|
return;
|
||||||
|
|
||||||
|
CmiHiveSyncPending = TRUE;
|
||||||
|
|
||||||
|
|
||||||
|
Timeout.QuadPart = -50000000LL;
|
||||||
|
KeSetTimer(&CmiHiveSyncTimer,
|
||||||
|
Timeout,
|
||||||
|
&CmiHiveSyncDpc);
|
||||||
|
}
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
Loading…
Reference in a new issue