From 70ce9735187bf58db7fba517edb2b97d3f733dbe Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Thu, 17 Apr 2003 11:07:47 +0000 Subject: [PATCH] Create hardware keys only if hardware hive was not imported. svn path=/trunk/; revision=4544 --- reactos/ntoskrnl/cm/import.c | 105 +++++++++++++++++++++++++++++- reactos/ntoskrnl/cm/regfile.c | 4 +- reactos/ntoskrnl/cm/registry.c | 114 +-------------------------------- reactos/ntoskrnl/ke/main.c | 6 +- 4 files changed, 110 insertions(+), 119 deletions(-) diff --git a/reactos/ntoskrnl/cm/import.c b/reactos/ntoskrnl/cm/import.c index 9002bbc6130..48ec1c2b7ca 100644 --- a/reactos/ntoskrnl/cm/import.c +++ b/reactos/ntoskrnl/cm/import.c @@ -1,4 +1,4 @@ -/* $Id: import.c,v 1.16 2003/04/12 18:41:43 ekohl Exp $ +/* $Id: import.c,v 1.17 2003/04/17 11:07:21 ekohl Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -23,6 +23,9 @@ #include "cm.h" +/* GLOBALS ******************************************************************/ + +static BOOLEAN CmiHardwareHiveImported = FALSE; /* FUNCTIONS ****************************************************************/ @@ -865,12 +868,106 @@ CmImportHardwareHive(PCHAR ChunkBase, { #if 0 PREGISTRY_HIVE RegistryHive; - UNICODE_STRING KeyName; - NTSTATUS Status; #endif + OBJECT_ATTRIBUTES ObjectAttributes; + UNICODE_STRING KeyName; + HANDLE HardwareKey; + ULONG Disposition; + NTSTATUS Status; DPRINT ("CmImportHardwareHive() called\n"); + if (ChunkBase == NULL && + ChunkSize == 0 && + CmiHardwareHiveImported == FALSE) + { + /* Create '\Registry\Machine\HARDWARE' key. */ + RtlInitUnicodeString(&KeyName, + L"\\Registry\\Machine\\HARDWARE"); + InitializeObjectAttributes (&ObjectAttributes, + &KeyName, + 0, + NULL, + NULL); + Status = NtCreateKey (&HardwareKey, + KEY_ALL_ACCESS, + &ObjectAttributes, + 0, + NULL, + REG_OPTION_VOLATILE, + &Disposition); + if (!NT_SUCCESS(Status)) + { + return FALSE; + } + NtClose (HardwareKey); + + /* Create '\Registry\Machine\HARDWARE\DESCRIPTION' key. */ + RtlInitUnicodeString(&KeyName, + L"\\Registry\\Machine\\HARDWARE\\DESCRIPTION"); + InitializeObjectAttributes (&ObjectAttributes, + &KeyName, + 0, + NULL, + NULL); + Status = NtCreateKey (&HardwareKey, + KEY_ALL_ACCESS, + &ObjectAttributes, + 0, + NULL, + REG_OPTION_VOLATILE, + &Disposition); + if (!NT_SUCCESS(Status)) + { + return FALSE; + } + NtClose (HardwareKey); + + /* Create '\Registry\Machine\HARDWARE\DEVICEMAP' key. */ + RtlInitUnicodeString(&KeyName, + L"\\Registry\\Machine\\HARDWARE\\DEVICEMAP"); + InitializeObjectAttributes (&ObjectAttributes, + &KeyName, + 0, + NULL, + NULL); + Status = NtCreateKey (&HardwareKey, + KEY_ALL_ACCESS, + &ObjectAttributes, + 0, + NULL, + REG_OPTION_VOLATILE, + &Disposition); + if (!NT_SUCCESS(Status)) + { + return FALSE; + } + NtClose (HardwareKey); + + /* Create '\Registry\Machine\HARDWARE\RESOURCEMAP' key. */ + RtlInitUnicodeString(&KeyName, + L"\\Registry\\Machine\\HARDWARE\\RESOURCEMAP"); + InitializeObjectAttributes (&ObjectAttributes, + &KeyName, + 0, + NULL, + NULL); + Status = NtCreateKey (&HardwareKey, + KEY_ALL_ACCESS, + &ObjectAttributes, + 0, + NULL, + REG_OPTION_VOLATILE, + &Disposition); + if (!NT_SUCCESS(Status)) + { + return FALSE; + } + NtClose (HardwareKey); + + return TRUE; + } + #if 0 if (strncmp (ChunkBase, "regf", 4) != 0) { @@ -908,6 +1005,8 @@ CmImportHardwareHive(PCHAR ChunkBase, NULL); #endif + CmiHardwareHiveImported = TRUE; + return TRUE; } diff --git a/reactos/ntoskrnl/cm/regfile.c b/reactos/ntoskrnl/cm/regfile.c index 4862f5e1ca3..0b1948c80c2 100644 --- a/reactos/ntoskrnl/cm/regfile.c +++ b/reactos/ntoskrnl/cm/regfile.c @@ -3081,7 +3081,7 @@ CmiAddFree(PREGISTRY_HIVE RegistryHive, return STATUS_INSUFFICIENT_RESOURCES; tmpListOffset = ExAllocatePool(PagedPool, - sizeof(BLOCK_OFFSET *) * (RegistryHive->FreeListMax + 32)); + sizeof(BLOCK_OFFSET) * (RegistryHive->FreeListMax + 32)); if (tmpListOffset == NULL) { @@ -3096,7 +3096,7 @@ CmiAddFree(PREGISTRY_HIVE RegistryHive, sizeof(PCELL_HEADER) * (RegistryHive->FreeListMax)); RtlMoveMemory(tmpListOffset, RegistryHive->FreeListOffset, - sizeof(BLOCK_OFFSET *) * (RegistryHive->FreeListMax)); + sizeof(BLOCK_OFFSET) * (RegistryHive->FreeListMax)); ExFreePool(RegistryHive->FreeList); ExFreePool(RegistryHive->FreeListOffset); } diff --git a/reactos/ntoskrnl/cm/registry.c b/reactos/ntoskrnl/cm/registry.c index e48ce8d4294..c41771c89f2 100644 --- a/reactos/ntoskrnl/cm/registry.c +++ b/reactos/ntoskrnl/cm/registry.c @@ -1,4 +1,4 @@ -/* $Id: registry.c,v 1.92 2003/04/12 15:09:57 ekohl Exp $ +/* $Id: registry.c,v 1.93 2003/04/17 11:07:21 ekohl Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -258,11 +258,6 @@ CmInitializeRegistry(VOID) HANDLE KeyHandle; NTSTATUS Status; - /* FIXME: remove the hardware keys before the hardware hive is imported */ - PKEY_OBJECT HardwareKey; - PKEY_OBJECT NewKey; - - /* Initialize the Key object type */ CmiKeyType = ExAllocatePool(NonPagedPool, sizeof(OBJECT_TYPE)); assert(CmiKeyType); @@ -373,113 +368,6 @@ CmInitializeRegistry(VOID) UserKey->Name = ExAllocatePool(PagedPool, UserKey->NameSize); RtlCopyMemory(UserKey->Name, "User", UserKey->NameSize); CmiAddKeyToList(RootKey, UserKey); - - - /* FIXME: remove the hardware keys before the hardware hive is imported */ - - /* Create '\Registry\Machine\HARDWARE' key. */ - Status = ObCreateObject(&KeyHandle, - STANDARD_RIGHTS_REQUIRED, - NULL, - CmiKeyType, - (PVOID*)&HardwareKey); - assert(NT_SUCCESS(Status)); - Status = CmiAddSubKey(CmiVolatileHive, - MachineKey, - HardwareKey, - L"HARDWARE", - wcslen(L"HARDWARE") * sizeof(WCHAR), - 0, - NULL, - 0); - assert(NT_SUCCESS(Status)); - HardwareKey->RegistryHive = CmiVolatileHive; - HardwareKey->Flags = 0; - HardwareKey->NumberOfSubKeys = 0; - HardwareKey->SubKeys = NULL; - HardwareKey->SizeOfSubKeys = HardwareKey->KeyCell->NumberOfSubKeys; - HardwareKey->NameSize = strlen("HARDWARE"); - HardwareKey->Name = ExAllocatePool(PagedPool, strlen("HARDWARE")); - RtlCopyMemory(HardwareKey->Name, "HARDWARE", HardwareKey->NameSize); - CmiAddKeyToList(MachineKey, HardwareKey); - - /* Create '\Registry\Machine\HARDWARE\DESCRIPTION' key. */ - Status = ObCreateObject(&KeyHandle, - STANDARD_RIGHTS_REQUIRED, - NULL, - CmiKeyType, - (PVOID*)&NewKey); - assert(NT_SUCCESS(Status)); - Status = CmiAddSubKey(CmiVolatileHive, - HardwareKey, - NewKey, - L"DESCRIPTION", - wcslen(L"DESCRIPTION") * sizeof(WCHAR), - 0, - NULL, - 0); - assert(NT_SUCCESS(Status)); - NewKey->RegistryHive = CmiVolatileHive; - NewKey->Flags = 0; - NewKey->NumberOfSubKeys = 0; - NewKey->SubKeys = NULL; - NewKey->SizeOfSubKeys = NewKey->KeyCell->NumberOfSubKeys; - NewKey->NameSize = strlen("DESCRIPTION"); - NewKey->Name = ExAllocatePool(PagedPool, NewKey->NameSize); - RtlCopyMemory(NewKey->Name, "DESCRIPTION", NewKey->NameSize); - CmiAddKeyToList(HardwareKey, NewKey); - - /* Create '\Registry\Machine\HARDWARE\DEVICEMAP' key. */ - Status = ObCreateObject(&KeyHandle, - STANDARD_RIGHTS_REQUIRED, - NULL, - CmiKeyType, - (PVOID*)&NewKey); - assert(NT_SUCCESS(Status)); - Status = CmiAddSubKey(CmiVolatileHive, - HardwareKey, - NewKey, - L"DEVICEMAP", - wcslen(L"DEVICEMAP") * sizeof(WCHAR), - 0, - NULL, - 0); - assert(NT_SUCCESS(Status)); - NewKey->RegistryHive = CmiVolatileHive; - NewKey->Flags = 0; - NewKey->NumberOfSubKeys = 0; - NewKey->SubKeys = NULL; - NewKey->SizeOfSubKeys = NewKey->KeyCell->NumberOfSubKeys; - NewKey->NameSize = strlen("DEVICEMAP"); - NewKey->Name = ExAllocatePool(PagedPool, NewKey->NameSize); - RtlCopyMemory(NewKey->Name, "DEVICEMAP", NewKey->NameSize); - CmiAddKeyToList(HardwareKey,NewKey); - - /* Create '\Registry\Machine\HARDWARE\RESOURCEMAP' key. */ - Status = ObCreateObject(&KeyHandle, - STANDARD_RIGHTS_REQUIRED, - NULL, - CmiKeyType, - (PVOID*)&NewKey); - assert(NT_SUCCESS(Status)); - Status = CmiAddSubKey(CmiVolatileHive, - HardwareKey, - NewKey, - L"RESOURCEMAP", - wcslen(L"RESOURCEMAP") * sizeof(WCHAR), - 0, - NULL, - 0); - assert(NT_SUCCESS(Status)); - NewKey->RegistryHive = CmiVolatileHive; - NewKey->Flags = 0; - NewKey->NumberOfSubKeys = 0; - NewKey->SubKeys = NULL; - NewKey->SizeOfSubKeys = NewKey->KeyCell->NumberOfSubKeys; - NewKey->NameSize = strlen("RESOURCEMAP"); - NewKey->Name = ExAllocatePool(PagedPool, NewKey->NameSize); - RtlCopyMemory(NewKey->Name, "RESOURCEMAP", NewKey->NameSize); - CmiAddKeyToList(HardwareKey, NewKey); } diff --git a/reactos/ntoskrnl/ke/main.c b/reactos/ntoskrnl/ke/main.c index b4e303e88e4..7439d1845f7 100644 --- a/reactos/ntoskrnl/ke/main.c +++ b/reactos/ntoskrnl/ke/main.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: main.c,v 1.150 2003/04/01 16:35:22 ekohl Exp $ +/* $Id: main.c,v 1.151 2003/04/17 11:07:47 ekohl Exp $ * * PROJECT: ReactOS kernel * FILE: ntoskrnl/ke/main.c @@ -521,6 +521,10 @@ ExpInitializeExecutive(VOID) } } + /* Create dummy keys if no hardware hive was found */ + CmImportHardwareHive (NULL, 0); + + /* Initialize volatile registry settings */ if (SetupBoot == FALSE) {