Author: fireball
Date: Fri Nov 23 22:29:45 2007
New Revision: 30704
URL:
http://svn.reactos.org/svn/reactos?rev=30704&view=rev
Log:
- Huge cleanup of cm.h -- remove stuff that's not needed/used anymore
- Get rid of registry.c.
- Move CmpLinkHiveToMaster to cmsysini.c since it now uses new config code and works
properly.
- Move CmpRosGetHardwareHive to cmsysini.c since it's an initialization function (will
go away eventually).
Removed:
trunk/reactos/ntoskrnl/cm/registry.c
Modified:
trunk/reactos/ntoskrnl/cm/cm.h
trunk/reactos/ntoskrnl/config/cm.h
trunk/reactos/ntoskrnl/config/cmsysini.c
trunk/reactos/ntoskrnl/ex/shutdown.c
trunk/reactos/ntoskrnl/include/internal/ntoskrnl.h
trunk/reactos/ntoskrnl/ntoskrnl.rbuild
Modified: trunk/reactos/ntoskrnl/cm/cm.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/cm/cm.h?rev=30704…
==============================================================================
--- trunk/reactos/ntoskrnl/cm/cm.h (original)
+++ trunk/reactos/ntoskrnl/cm/cm.h Fri Nov 23 22:29:45 2007
@@ -3,64 +3,10 @@
#include "ntoskrnl/config/cm.h"
-#ifdef DBG
-#define CHECKED 1
-#else
-#define CHECKED 0
-#endif
-
-#define REG_ROOT_KEY_NAME L"\\Registry"
-#define REG_MACHINE_KEY_NAME L"\\Registry\\Machine"
-#define REG_HARDWARE_KEY_NAME L"\\Registry\\Machine\\HARDWARE"
-#define
REG_DESCRIPTION_KEY_NAME L"\\Registry\\Machine\\HARDWARE\\DESCRIPTION"
-#define REG_DEVICEMAP_KEY_NAME L"\\Registry\\Machine\\HARDWARE\\DEVICEMAP"
-#define
REG_RESOURCEMAP_KEY_NAME L"\\Registry\\Machine\\HARDWARE\\RESOURCEMAP"
-#define REG_CLASSES_KEY_NAME L"\\Registry\\Machine\\Software\\Classes"
-#define REG_SYSTEM_KEY_NAME L"\\Registry\\Machine\\SYSTEM"
-#define REG_SOFTWARE_KEY_NAME L"\\Registry\\Machine\\SOFTWARE"
-#define REG_SAM_KEY_NAME L"\\Registry\\Machine\\SAM"
-#define REG_SEC_KEY_NAME L"\\Registry\\Machine\\SECURITY"
-#define REG_USER_KEY_NAME L"\\Registry\\User"
-#define REG_DEFAULT_USER_KEY_NAME L"\\Registry\\User\\.Default"
-#define REG_CURRENT_USER_KEY_NAME L"\\Registry\\User\\CurrentUser"
-
-#define SYSTEM_REG_FILE L"\\SystemRoot\\System32\\Config\\SYSTEM"
-#define SYSTEM_LOG_FILE L"\\SystemRoot\\System32\\Config\\SYSTEM.log"
-#define SOFTWARE_REG_FILE L"\\SystemRoot\\System32\\Config\\SOFTWARE"
-#define DEFAULT_USER_REG_FILE L"\\SystemRoot\\System32\\Config\\DEFAULT"
-#define SAM_REG_FILE L"\\SystemRoot\\System32\\Config\\SAM"
-#define SEC_REG_FILE L"\\SystemRoot\\System32\\Config\\SECURITY"
-
-#define REG_SYSTEM_FILE_NAME L"\\system"
-#define REG_SOFTWARE_FILE_NAME L"\\software"
-#define REG_DEFAULT_USER_FILE_NAME L"\\default"
-#define REG_SAM_FILE_NAME L"\\sam"
-#define REG_SEC_FILE_NAME L"\\security"
-
-/* Bits 31-22 (top 10 bits) of the cell index is the directory index */
-#define CmiDirectoryIndex(CellIndex)(CellIndex & 0xffc000000)
-/* Bits 21-12 (middle 10 bits) of the cell index is the table index */
-#define CmiTableIndex(Cellndex)(CellIndex & 0x003ff000)
-/* Bits 11-0 (bottom 12 bits) of the cell index is the byte offset */
-#define CmiByteOffset(Cellndex)(CellIndex & 0x00000fff)
-
-
extern POBJECT_TYPE CmpKeyObjectType;
extern KSPIN_LOCK CmiKeyListLock;
-
extern ERESOURCE CmpRegistryLock;
extern EX_PUSH_LOCK CmpHiveListHeadLock;
-
-/* Registry Callback Function */
-typedef struct _REGISTRY_CALLBACK
-{
- LIST_ENTRY ListEntry;
- EX_RUNDOWN_REF RundownRef;
- PEX_CALLBACK_FUNCTION Function;
- PVOID Context;
- LARGE_INTEGER Cookie;
- BOOLEAN PendingDelete;
-} REGISTRY_CALLBACK, *PREGISTRY_CALLBACK;
NTSTATUS
CmiCallRegisteredCallbacks(IN REG_NOTIFY_CLASS Argument1,
@@ -74,39 +20,4 @@
#define VERIFY_KEY_OBJECT(x)
#define VERIFY_REGISTRY_HIVE(x)
-NTSTATUS STDCALL
-CmRegisterCallback(IN PEX_CALLBACK_FUNCTION Function,
- IN PVOID Context,
- IN OUT PLARGE_INTEGER Cookie
- );
-
-NTSTATUS STDCALL
-CmUnRegisterCallback(IN LARGE_INTEGER Cookie);
-
-VOID
-CmiAddKeyToList(IN PKEY_OBJECT ParentKey,
- IN PKEY_OBJECT NewKey);
-VOID
-NTAPI
-CmpLazyFlush(VOID);
-
-NTSTATUS
-CmiInitHives(BOOLEAN SetupBoot);
-
-NTSTATUS
-NTAPI
-CmFindObject(
- POBJECT_CREATE_INFORMATION ObjectCreateInfo,
- PUNICODE_STRING ObjectName,
- PVOID* ReturnedObject,
- PUNICODE_STRING RemainingPath,
- POBJECT_TYPE ObjectType,
- IN PACCESS_STATE AccessState,
- IN PVOID ParseContext
-);
-
-// Some Ob definitions for debug messages in Cm
-#define ObGetObjectPointerCount(x) OBJECT_TO_OBJECT_HEADER(x)->PointerCount
-#define ObGetObjectHandleCount(x) OBJECT_TO_OBJECT_HEADER(x)->HandleCount
-
#endif /*__INCLUDE_CM_H*/
Removed: trunk/reactos/ntoskrnl/cm/registry.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/cm/registry.c?rev…
==============================================================================
--- trunk/reactos/ntoskrnl/cm/registry.c (original)
+++ trunk/reactos/ntoskrnl/cm/registry.c (removed)
@@ -1,233 +1,0 @@
-/*
- * PROJECT: ReactOS Kernel
- * COPYRIGHT: GPL - See COPYING in the top level directory
- * FILE: ntoskrnl/cm/registry.c
- * PURPOSE: Registry functions
- *
- * PROGRAMMERS: Hartmut Birr
- * Alex Ionescu
- * Rex Jolliff
- * Eric Kohl
- * Matt Pyne
- * Jean Michault
- * Art Yerkes
- */
-
-#include <ntoskrnl.h>
-#define NDEBUG
-#include <internal/debug.h>
-
-#include "cm.h"
-
-#if defined (ALLOC_PRAGMA)
-#pragma alloc_text(INIT, CmInitSystem1)
-#endif
-
-/* GLOBALS ******************************************************************/
-
-extern BOOLEAN ExpInTextModeSetup;
-
-POBJECT_TYPE CmpKeyObjectType = NULL;
-PCMHIVE CmiVolatileHive = NULL;
-
-LIST_ENTRY CmpHiveListHead;
-
-ERESOURCE CmpRegistryLock;
-
-LIST_ENTRY CmiKeyObjectListHead;
-LIST_ENTRY CmiConnectedHiveList;
-
-extern LIST_ENTRY CmiCallbackHead;
-extern FAST_MUTEX CmiCallbackLock;
-
-PVOID
-NTAPI
-CmpRosGetHardwareHive(OUT PULONG Length)
-{
- PLIST_ENTRY ListHead, NextEntry;
- PMEMORY_ALLOCATION_DESCRIPTOR MdBlock = NULL;
-
- /* Loop the memory descriptors */
- ListHead = &KeLoaderBlock->MemoryDescriptorListHead;
- NextEntry = ListHead->Flink;
- while (NextEntry != ListHead)
- {
- /* Get the current block */
- MdBlock = CONTAINING_RECORD(NextEntry,
- MEMORY_ALLOCATION_DESCRIPTOR,
- ListEntry);
-
- /* Check if this is an registry block */
- if (MdBlock->MemoryType == LoaderRegistryData)
- {
- /* Check if it's not the SYSTEM hive that we already initialized */
- if ((MdBlock->BasePage) !=
- (((ULONG_PTR)KeLoaderBlock->RegistryBase &~ KSEG0_BASE) >>
PAGE_SHIFT))
- {
- /* Hardware hive break out */
- break;
- }
- }
-
- /* Go to the next block */
- NextEntry = MdBlock->ListEntry.Flink;
- }
-
- /* We need a hardware hive */
- ASSERT(MdBlock);
- *Length = MdBlock->PageCount << PAGE_SHIFT;
- return (PVOID)((MdBlock->BasePage << PAGE_SHIFT) | KSEG0_BASE);
-}
-
-/* Precondition: Must not hold the hive lock CmpRegistryLock */
-VOID
-NTAPI
-EnlistKeyBodyWithKeyObject(IN PKEY_OBJECT KeyObject,
- IN ULONG Flags)
-{
- /* Acquire hive lock */
- KeEnterCriticalRegion();
- ExAcquireResourceExclusiveLite(&CmpRegistryLock, TRUE);
-
- /* Insert it into the global list (we don't have KCBs here) */
- InsertTailList(&CmiKeyObjectListHead, &KeyObject->KeyBodyList);
-
- /* Release hive lock */
- ExReleaseResourceLite(&CmpRegistryLock);
- KeLeaveCriticalRegion();
-}
-
-NTSTATUS
-NTAPI
-CmpLinkHiveToMaster(IN PUNICODE_STRING LinkName,
- IN HANDLE RootDirectory,
- IN PCMHIVE RegistryHive,
- IN BOOLEAN Allocate,
- IN PSECURITY_DESCRIPTOR SecurityDescriptor)
-{
- OBJECT_ATTRIBUTES ObjectAttributes;
- UNICODE_STRING RemainingPath;
- PKEY_OBJECT ParentKey;
- PKEY_OBJECT NewKey;
- NTSTATUS Status;
- UNICODE_STRING ObjectName;
- OBJECT_CREATE_INFORMATION ObjectCreateInfo;
- CM_PARSE_CONTEXT ParseContext = {0};
- PAGED_CODE();
-
- /* Setup the object attributes */
- InitializeObjectAttributes(&ObjectAttributes,
- LinkName,
- OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
- RootDirectory,
- SecurityDescriptor);
-
- /* Setup the parse context */
- ParseContext.CreateLink = TRUE;
- ParseContext.CreateOperation = TRUE;
- ParseContext.ChildHive.KeyHive = &RegistryHive->Hive;
-
- /* Check if we have a root keycell or if we need to create it */
- if (Allocate)
- {
- /* Create it */
- ParseContext.ChildHive.KeyCell = HCELL_NIL;
- }
- else
- {
- /* We have one */
- ParseContext.ChildHive.KeyCell = RegistryHive->Hive.BaseBlock->RootCell;
- }
-
- /* Capture all the info */
- Status = ObpCaptureObjectAttributes(&ObjectAttributes,
- KernelMode,
- FALSE,
- &ObjectCreateInfo,
- &ObjectName);
- if (!NT_SUCCESS(Status)) return Status;
-
- /* Do the parse */
- Status = CmFindObject(&ObjectCreateInfo,
- &ObjectName,
- (PVOID*)&ParentKey,
- &RemainingPath,
- CmpKeyObjectType,
- NULL,
- NULL);
-
- /* Let go of captured attributes and name */
- ObpReleaseCapturedAttributes(&ObjectCreateInfo);
- if (ObjectName.Buffer) ObpFreeObjectNameBuffer(&ObjectName);
-
- /* Get out of here if we failed */
- if (!NT_SUCCESS(Status)) return Status;
-
- /* Scan for no name */
- if (!(RemainingPath.Length) || (RemainingPath.Buffer[0] == UNICODE_NULL))
- {
- /* Fail */
- ObDereferenceObject(ParentKey);
- return STATUS_OBJECT_NAME_NOT_FOUND;
- }
-
- /* Scan for leading backslash */
- while ((RemainingPath.Length) &&
- (*RemainingPath.Buffer == OBJ_NAME_PATH_SEPARATOR))
- {
- /* Ignore it */
- RemainingPath.Length -= sizeof(WCHAR);
- RemainingPath.MaximumLength -= sizeof(WCHAR);
- RemainingPath.Buffer++;
- }
-
- /* Create the link node */
- Status = CmpCreateLinkNode(ParentKey->KeyControlBlock->KeyHive,
- ParentKey->KeyControlBlock->KeyCell,
- NULL,
- RemainingPath,
- KernelMode,
- 0,
- &ParseContext,
- ParentKey->KeyControlBlock,
- (PVOID*)&NewKey);
- if (!NT_SUCCESS(Status))
- {
- /* Failed */
- DPRINT1("CmpLinkHiveToMaster failed: %lx\n", Status);
- ObDereferenceObject(ParentKey);
- return Status;
- }
-
- /* Free the create information */
-
ObpFreeAndReleaseCapturedAttributes(OBJECT_TO_OBJECT_HEADER(NewKey)->ObjectCreateInfo);
- OBJECT_TO_OBJECT_HEADER(NewKey)->ObjectCreateInfo = NULL;
-
- /* Mark the hive as clean */
- RegistryHive->Hive.DirtyFlag = FALSE;
-
- /* Update KCB information */
- NewKey->KeyControlBlock->KeyCell =
RegistryHive->Hive.BaseBlock->RootCell;
- NewKey->KeyControlBlock->KeyHive = &RegistryHive->Hive;
-
- /* Build the key name */
- RtlDuplicateUnicodeString(RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE,
- &RemainingPath,
- &NewKey->Name);
-
- /* Reference the new key */
- ObReferenceObject(NewKey);
-
- /* Link this key to the parent */
- CmiAddKeyToList(ParentKey, NewKey);
- return STATUS_SUCCESS;
-}
-
-VOID
-NTAPI
-CmShutdownRegistry(VOID)
-{
- CmShutdownSystem();
-}
-
-/* EOF */
Modified: trunk/reactos/ntoskrnl/config/cm.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/config/cm.h?rev=3…
==============================================================================
--- trunk/reactos/ntoskrnl/config/cm.h (original)
+++ trunk/reactos/ntoskrnl/config/cm.h Fri Nov 23 22:29:45 2007
@@ -501,10 +501,6 @@
//
// BUGBUG Old Hive Stuff for Temporary Support
//
-#define SYSTEM_REG_FILE L"\\SystemRoot\\System32\\Config\\SYSTEM"
-#define SYSTEM_LOG_FILE L"\\SystemRoot\\System32\\Config\\SYSTEM.log"
-#define REG_SYSTEM_KEY_NAME L"\\Registry\\Machine\\SYSTEM"
-#define REG_HARDWARE_KEY_NAME L"\\Registry\\Machine\\HARDWARE"
typedef struct _KEY_OBJECT
{
ULONG Type;
@@ -515,10 +511,19 @@
struct _KEY_OBJECT **SubKeys;
PCM_KEY_CONTROL_BLOCK KeyControlBlock;
} KEY_OBJECT, *PKEY_OBJECT;
-extern PCMHIVE CmiVolatileHive;
-extern LIST_ENTRY CmiKeyObjectListHead, CmiConnectedHiveList;
-PVOID NTAPI CmpRosGetHardwareHive(OUT PULONG Length);
+NTSTATUS
+NTAPI
+CmFindObject(POBJECT_CREATE_INFORMATION ObjectCreateInfo,
+ PUNICODE_STRING ObjectName,
+ PVOID* ReturnedObject,
+ PUNICODE_STRING RemainingPath,
+ POBJECT_TYPE ObjectType,
+ IN PACCESS_STATE AccessState,
+ IN PVOID ParseContext);
NTSTATUS CmiCallRegisteredCallbacks(IN REG_NOTIFY_CLASS Argument1, IN PVOID Argument2);
+VOID
+CmiAddKeyToList(IN PKEY_OBJECT ParentKey,
+ IN PKEY_OBJECT NewKey);
///////////////////////////////////////////////////////////////////////////////
//
@@ -1399,6 +1404,8 @@
extern BOOLEAN CmpNoWrite;
extern BOOLEAN CmpForceForceFlush;
extern BOOLEAN CmpWasSetupBoot;
+extern PCMHIVE CmiVolatileHive;
+extern LIST_ENTRY CmiKeyObjectListHead;
//
// Inlined functions
Modified: trunk/reactos/ntoskrnl/config/cmsysini.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/config/cmsysini.c…
==============================================================================
--- trunk/reactos/ntoskrnl/config/cmsysini.c (original)
+++ trunk/reactos/ntoskrnl/config/cmsysini.c Fri Nov 23 22:29:45 2007
@@ -13,6 +13,12 @@
#define NDEBUG
#include "debug.h"
+POBJECT_TYPE CmpKeyObjectType;
+PCMHIVE CmiVolatileHive;
+LIST_ENTRY CmpHiveListHead;
+ERESOURCE CmpRegistryLock;
+LIST_ENTRY CmiKeyObjectListHead;
+LIST_ENTRY CmiConnectedHiveList;
KGUARDED_MUTEX CmpSelfHealQueueLock;
LIST_ENTRY CmpSelfHealQueueListHead;
KEVENT CmpLoadWorkerEvent;
@@ -28,6 +34,45 @@
BOOLEAN CmpWasSetupBoot;
/* FUNCTIONS *****************************************************************/
+
+PVOID
+NTAPI
+CmpRosGetHardwareHive(OUT PULONG Length)
+{
+ PLIST_ENTRY ListHead, NextEntry;
+ PMEMORY_ALLOCATION_DESCRIPTOR MdBlock = NULL;
+
+ /* Loop the memory descriptors */
+ ListHead = &KeLoaderBlock->MemoryDescriptorListHead;
+ NextEntry = ListHead->Flink;
+ while (NextEntry != ListHead)
+ {
+ /* Get the current block */
+ MdBlock = CONTAINING_RECORD(NextEntry,
+ MEMORY_ALLOCATION_DESCRIPTOR,
+ ListEntry);
+
+ /* Check if this is an registry block */
+ if (MdBlock->MemoryType == LoaderRegistryData)
+ {
+ /* Check if it's not the SYSTEM hive that we already initialized */
+ if ((MdBlock->BasePage) !=
+ (((ULONG_PTR)KeLoaderBlock->RegistryBase &~ KSEG0_BASE) >>
PAGE_SHIFT))
+ {
+ /* Hardware hive break out */
+ break;
+ }
+ }
+
+ /* Go to the next block */
+ NextEntry = MdBlock->ListEntry.Flink;
+ }
+
+ /* We need a hardware hive */
+ ASSERT(MdBlock);
+ *Length = MdBlock->PageCount << PAGE_SHIFT;
+ return (PVOID)((MdBlock->BasePage << PAGE_SHIFT) | KSEG0_BASE);
+}
NTSTATUS
NTAPI
@@ -443,6 +488,132 @@
return STATUS_SUCCESS;
}
+NTSTATUS
+NTAPI
+CmpLinkHiveToMaster(IN PUNICODE_STRING LinkName,
+ IN HANDLE RootDirectory,
+ IN PCMHIVE RegistryHive,
+ IN BOOLEAN Allocate,
+ IN PSECURITY_DESCRIPTOR SecurityDescriptor)
+{
+ OBJECT_ATTRIBUTES ObjectAttributes;
+ UNICODE_STRING RemainingPath;
+ PKEY_OBJECT ParentKey;
+ PKEY_OBJECT NewKey;
+ NTSTATUS Status;
+ UNICODE_STRING ObjectName;
+ OBJECT_CREATE_INFORMATION ObjectCreateInfo;
+ CM_PARSE_CONTEXT ParseContext = {0};
+ PAGED_CODE();
+
+ /* Setup the object attributes */
+ InitializeObjectAttributes(&ObjectAttributes,
+ LinkName,
+ OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
+ RootDirectory,
+ SecurityDescriptor);
+
+ /* Setup the parse context */
+ ParseContext.CreateLink = TRUE;
+ ParseContext.CreateOperation = TRUE;
+ ParseContext.ChildHive.KeyHive = &RegistryHive->Hive;
+
+ /* Check if we have a root keycell or if we need to create it */
+ if (Allocate)
+ {
+ /* Create it */
+ ParseContext.ChildHive.KeyCell = HCELL_NIL;
+ }
+ else
+ {
+ /* We have one */
+ ParseContext.ChildHive.KeyCell = RegistryHive->Hive.BaseBlock->RootCell;
+ }
+
+ /* Capture all the info */
+ Status = ObpCaptureObjectAttributes(&ObjectAttributes,
+ KernelMode,
+ FALSE,
+ &ObjectCreateInfo,
+ &ObjectName);
+ if (!NT_SUCCESS(Status)) return Status;
+
+ /* Do the parse */
+ Status = CmFindObject(&ObjectCreateInfo,
+ &ObjectName,
+ (PVOID*)&ParentKey,
+ &RemainingPath,
+ CmpKeyObjectType,
+ NULL,
+ NULL);
+
+ /* Let go of captured attributes and name */
+ ObpReleaseCapturedAttributes(&ObjectCreateInfo);
+ if (ObjectName.Buffer) ObpFreeObjectNameBuffer(&ObjectName);
+
+ /* Get out of here if we failed */
+ if (!NT_SUCCESS(Status)) return Status;
+
+ /* Scan for no name */
+ if (!(RemainingPath.Length) || (RemainingPath.Buffer[0] == UNICODE_NULL))
+ {
+ /* Fail */
+ ObDereferenceObject(ParentKey);
+ return STATUS_OBJECT_NAME_NOT_FOUND;
+ }
+
+ /* Scan for leading backslash */
+ while ((RemainingPath.Length) &&
+ (*RemainingPath.Buffer == OBJ_NAME_PATH_SEPARATOR))
+ {
+ /* Ignore it */
+ RemainingPath.Length -= sizeof(WCHAR);
+ RemainingPath.MaximumLength -= sizeof(WCHAR);
+ RemainingPath.Buffer++;
+ }
+
+ /* Create the link node */
+ Status = CmpCreateLinkNode(ParentKey->KeyControlBlock->KeyHive,
+ ParentKey->KeyControlBlock->KeyCell,
+ NULL,
+ RemainingPath,
+ KernelMode,
+ 0,
+ &ParseContext,
+ ParentKey->KeyControlBlock,
+ (PVOID*)&NewKey);
+ if (!NT_SUCCESS(Status))
+ {
+ /* Failed */
+ DPRINT1("CmpLinkHiveToMaster failed: %lx\n", Status);
+ ObDereferenceObject(ParentKey);
+ return Status;
+ }
+
+ /* Free the create information */
+
ObpFreeAndReleaseCapturedAttributes(OBJECT_TO_OBJECT_HEADER(NewKey)->ObjectCreateInfo);
+ OBJECT_TO_OBJECT_HEADER(NewKey)->ObjectCreateInfo = NULL;
+
+ /* Mark the hive as clean */
+ RegistryHive->Hive.DirtyFlag = FALSE;
+
+ /* Update KCB information */
+ NewKey->KeyControlBlock->KeyCell =
RegistryHive->Hive.BaseBlock->RootCell;
+ NewKey->KeyControlBlock->KeyHive = &RegistryHive->Hive;
+
+ /* Build the key name */
+ RtlDuplicateUnicodeString(RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE,
+ &RemainingPath,
+ &NewKey->Name);
+
+ /* Reference the new key */
+ ObReferenceObject(NewKey);
+
+ /* Link this key to the parent */
+ CmiAddKeyToList(ParentKey, NewKey);
+ return STATUS_SUCCESS;
+}
+
BOOLEAN
NTAPI
CmpInitializeSystemHive(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
@@ -499,7 +670,8 @@
CmPrepareHive(&SystemHive->Hive);
/* Set the hive filename */
- RtlCreateUnicodeString(&SystemHive->FileFullPath, SYSTEM_REG_FILE);
+ RtlCreateUnicodeString(&SystemHive->FileFullPath,
+ L"\\SystemRoot\\System32\\Config\\SYSTEM");
/* We imported, no need to create a new hive */
Allocate = FALSE;
@@ -523,7 +695,8 @@
if (!NT_SUCCESS(Status)) return FALSE;
/* Set the hive filename */
- RtlCreateUnicodeString(&SystemHive->FileFullPath, SYSTEM_REG_FILE);
+ RtlCreateUnicodeString(&SystemHive->FileFullPath,
+ L"\\SystemRoot\\System32\\Config\\SYSTEM");
/* Tell CmpLinkHiveToMaster to allocate a hive */
Allocate = TRUE;
@@ -552,7 +725,7 @@
SecurityDescriptor = CmpHiveRootSecurityDescriptor();
/* Attach it to the system key */
- RtlInitUnicodeString(&KeyName, REG_SYSTEM_KEY_NAME);
+ RtlInitUnicodeString(&KeyName, L"\\Registry\\Machine\\SYSTEM");
Status = CmpLinkHiveToMaster(&KeyName,
NULL,
(PCMHIVE)SystemHive,
@@ -736,7 +909,7 @@
#endif
/* Insert it into the object list head */
- EnlistKeyBodyWithKeyObject(RootKey, 0);
+ InsertTailList(&CmiKeyObjectListHead, &RootKey->KeyBodyList);
/* Insert the key into the namespace */
Status = ObInsertObject(RootKey,
@@ -1309,7 +1482,7 @@
CmpMachineHiveList[0].CmHive = (PCMHIVE)HardwareHive;
/* Attach it to the machine key */
- RtlInitUnicodeString(&KeyName, REG_HARDWARE_KEY_NAME);
+ RtlInitUnicodeString(&KeyName, L"\\Registry\\Machine\\HARDWARE");
Status = CmpLinkHiveToMaster(&KeyName,
NULL,
(PCMHIVE)HardwareHive,
Modified: trunk/reactos/ntoskrnl/ex/shutdown.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ex/shutdown.c?rev…
==============================================================================
--- trunk/reactos/ntoskrnl/ex/shutdown.c (original)
+++ trunk/reactos/ntoskrnl/ex/shutdown.c Fri Nov 23 22:29:45 2007
@@ -170,7 +170,7 @@
Waittime.QuadPart = (LONGLONG)-10000000; /* 1sec */
KeDelayExecutionThread(KernelMode, FALSE, &Waittime);
- CmShutdownRegistry();
+ CmShutdownSystem();
IoShutdownRegisteredFileSystems();
IoShutdownRegisteredDevices();
Modified: trunk/reactos/ntoskrnl/include/internal/ntoskrnl.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/include/internal/…
==============================================================================
--- trunk/reactos/ntoskrnl/include/internal/ntoskrnl.h (original)
+++ trunk/reactos/ntoskrnl/include/internal/ntoskrnl.h Fri Nov 23 22:29:45 2007
@@ -72,9 +72,7 @@
*/
BOOLEAN NTAPI ObInit(VOID);
BOOLEAN NTAPI CmInitSystem1(VOID);
-VOID NTAPI CmShutdownRegistry(VOID);
-//BOOLEAN CmImportSystemHive(PCHAR ChunkBase, ULONG ChunkSize);
-//BOOLEAN CmImportHardwareHive(PCHAR ChunkBase, ULONG ChunkSize);
+VOID NTAPI CmShutdownSystem(VOID);
BOOLEAN NTAPI KdInitSystem(ULONG Reserved, PLOADER_PARAMETER_BLOCK LoaderBlock);
/* FIXME - RtlpCreateUnicodeString is obsolete and should be removed ASAP! */
Modified: trunk/reactos/ntoskrnl/ntoskrnl.rbuild
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ntoskrnl.rbuild?r…
==============================================================================
--- trunk/reactos/ntoskrnl/ntoskrnl.rbuild (original)
+++ trunk/reactos/ntoskrnl/ntoskrnl.rbuild Fri Nov 23 22:29:45 2007
@@ -140,7 +140,6 @@
</directory>
<directory name="cm">
<file>ntfunc.c</file>
- <file>registry.c</file>
<file>regobj.c</file>
</directory>
<directory name="dbgk">