Author: hbelusca
Date: Sun Jan 17 02:12:37 2016
New Revision: 70605
URL:
http://svn.reactos.org/svn/reactos?rev=70605&view=rev
Log:
[CMLIB]
- Now that both FreeLdr and MKHIVE use the regular (aka. the "NT-style public")
CMLIB functions, get rid of the "old-style public" cmlib functions, with the
exception of CmCreateRootNode and CmPrepareHive which remain for now due to a slight
different implementation difference between NT and ours. Remove the cmtools.c file
containing those old functions.
- Remove the now-deprecated VALUE_LIST_CELL structure (which was an old version of
CELL_DATA:KeyList).
- When freeing hive bins (in HvpFreeHiveBins), use the storage number count stored in the
hive instead of a constant value.
- Flat hives have only one storage type (they are read-only and reside only in memory).
CORE-10802
CORE-10793
Removed:
trunk/reactos/lib/cmlib/cmtools.c
Modified:
trunk/reactos/lib/cmlib/CMakeLists.txt
trunk/reactos/lib/cmlib/cmdata.h
trunk/reactos/lib/cmlib/cminit.c
trunk/reactos/lib/cmlib/cmlib.h
trunk/reactos/lib/cmlib/hiveinit.c
Modified: trunk/reactos/lib/cmlib/CMakeLists.txt
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/cmlib/CMakeLists.txt?r…
==============================================================================
--- trunk/reactos/lib/cmlib/CMakeLists.txt [iso-8859-1] (original)
+++ trunk/reactos/lib/cmlib/CMakeLists.txt [iso-8859-1] Sun Jan 17 02:12:37 2016
@@ -7,7 +7,6 @@
cminit.c
cmindex.c
cmname.c
- cmtools.c
cmvalue.c
hivebin.c
hivecell.c
Modified: trunk/reactos/lib/cmlib/cmdata.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/cmlib/cmdata.h?rev=706…
==============================================================================
--- trunk/reactos/lib/cmlib/cmdata.h [iso-8859-1] (original)
+++ trunk/reactos/lib/cmlib/cmdata.h [iso-8859-1] Sun Jan 17 02:12:37 2016
@@ -27,16 +27,16 @@
//
// CM_KEY_NODE Flags
//
-#define KEY_IS_VOLATILE 0x01
-#define KEY_HIVE_EXIT 0x02
-#define KEY_HIVE_ENTRY 0x04
-#define KEY_NO_DELETE 0x08
-#define KEY_SYM_LINK 0x10
-#define KEY_COMP_NAME 0x20
-#define KEY_PREFEF_HANDLE 0x40
-#define KEY_VIRT_MIRRORED 0x80
-#define KEY_VIRT_TARGET 0x100
-#define KEY_VIRTUAL_STORE 0x200
+#define KEY_IS_VOLATILE 0x0001
+#define KEY_HIVE_EXIT 0x0002
+#define KEY_HIVE_ENTRY 0x0004
+#define KEY_NO_DELETE 0x0008
+#define KEY_SYM_LINK 0x0010
+#define KEY_COMP_NAME 0x0020
+#define KEY_PREFEF_HANDLE 0x0040
+#define KEY_VIRT_MIRRORED 0x0080
+#define KEY_VIRT_TARGET 0x0100
+#define KEY_VIRTUAL_STORE 0x0200
//
// CM_KEY_VALUE Flags
@@ -67,7 +67,7 @@
} CM_VIEW_OF_FILE, *PCM_VIEW_OF_FILE;
//
-// Children of Key Notes
+// Children of Key Nodes
//
typedef struct _CHILD_LIST
{
@@ -117,14 +117,6 @@
} CM_KEY_NODE, *PCM_KEY_NODE;
//
-// Value List
-//
-typedef struct _VALUE_LIST_CELL
-{
- HCELL_INDEX ValueOffset[ANYSIZE_ARRAY];
-} VALUE_LIST_CELL, *PVALUE_LIST_CELL;
-
-//
// Value Key
//
typedef struct _CM_KEY_VALUE
Modified: trunk/reactos/lib/cmlib/cminit.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/cmlib/cminit.c?rev=706…
==============================================================================
--- trunk/reactos/lib/cmlib/cminit.c [iso-8859-1] (original)
+++ trunk/reactos/lib/cmlib/cminit.c [iso-8859-1] Sun Jan 17 02:12:37 2016
@@ -37,7 +37,11 @@
/* Get the key cell */
KeyCell = (PCM_KEY_NODE)HvGetCell(Hive, RootCellIndex);
- if (!KeyCell) return FALSE;
+ if (!KeyCell)
+ {
+ HvFreeCell(Hive, RootCellIndex);
+ return FALSE;
+ }
/* Setup the cell */
KeyCell->Signature = CM_KEY_NODE_SIGNATURE;
Modified: trunk/reactos/lib/cmlib/cmlib.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/cmlib/cmlib.h?rev=7060…
==============================================================================
--- trunk/reactos/lib/cmlib/cmlib.h [iso-8859-1] (original)
+++ trunk/reactos/lib/cmlib/cmlib.h [iso-8859-1] Sun Jan 17 02:12:37 2016
@@ -33,7 +33,7 @@
#ifdef _WIN32
#define strncasecmp _strnicmp
#define strcasecmp _stricmp
- #endif//_WIN32
+ #endif // _WIN32
#if (!defined(_MSC_VER) || (_MSC_VER < 1500))
#define _In_
@@ -68,6 +68,7 @@
#define USHORT_MAX USHRT_MAX
#define OBJ_NAME_PATH_SEPARATOR ((WCHAR)L'\\')
+ #define UNICODE_NULL ((WCHAR)0)
VOID NTAPI
KeQuerySystemTime(
@@ -161,7 +162,7 @@
//
// These define the Debug Masks Supported
//
-#define CMLIB_HCELL_DEBUG 0x01
+#define CMLIB_HCELL_DEBUG 0x01
#ifndef ROUND_UP
#define ROUND_UP(a,b) ((((a)+(b)-1)/(b))*(b))
@@ -191,12 +192,17 @@
#include "hivedata.h"
#include "cmdata.h"
-#if defined(_TYPEDEFS_HOST_H) || defined(__FREELDR_H)
-
-#define PCM_KEY_SECURITY_CACHE_ENTRY PVOID
-#define PCM_KEY_CONTROL_BLOCK PVOID
-#define CMP_SECURITY_HASH_LISTS 64
-#define PCM_CELL_REMAP_BLOCK PVOID
+#if defined(_TYPEDEFS_HOST_H) || defined(__FREELDR_H) // || defined(_BLDR_)
+
+#define PCM_KEY_SECURITY_CACHE_ENTRY PVOID
+#define PCM_KEY_CONTROL_BLOCK PVOID
+#define PCM_CELL_REMAP_BLOCK PVOID
+
+// See also ntoskrnl/include/internal/cm.h
+#define CMP_SECURITY_HASH_LISTS 64
+
+// #endif // Commented out until one finds a way to properly include
+ // this header in freeldr and in ntoskrnl.
//
// Use Count Log and Entry
@@ -263,7 +269,7 @@
PKTHREAD CreatorOwner;
} CMHIVE, *PCMHIVE;
-#endif
+#endif // See comment above
typedef struct _HV_HIVE_CELL_PAIR
{
@@ -466,54 +472,8 @@
CmPrepareHive(
PHHIVE RegistryHive);
-BOOLEAN
-NTAPI
-CmCompareHash(
- IN PCUNICODE_STRING KeyName,
- IN PCHAR HashString,
- IN BOOLEAN CaseInsensitive);
-
-BOOLEAN
-NTAPI
-CmComparePackedNames(
- IN PCUNICODE_STRING Name,
- IN PVOID NameBuffer,
- IN USHORT NameBufferSize,
- IN BOOLEAN NamePacked,
- IN BOOLEAN CaseInsensitive);
-
-BOOLEAN
-NTAPI
-CmCompareKeyName(
- IN PCM_KEY_NODE KeyCell,
- IN PCUNICODE_STRING KeyName,
- IN BOOLEAN CaseInsensitive);
-
-BOOLEAN
-NTAPI
-CmCompareKeyValueName(
- IN PCM_KEY_VALUE ValueCell,
- IN PCUNICODE_STRING KeyName,
- IN BOOLEAN CaseInsensitive);
-
-ULONG
-NTAPI
-CmCopyKeyName(
- _In_ PCM_KEY_NODE KeyNode,
- _Out_ PWCHAR KeyNameBuffer,
- _Inout_ ULONG BufferLength);
-
-ULONG
-NTAPI
-CmCopyKeyValueName(
- _In_ PCM_KEY_VALUE ValueCell,
- _Out_ PWCHAR ValueNameBuffer,
- _Inout_ ULONG BufferLength);
-
-
/* NT-style Public Cm functions */
-
//
// Cell Index Routines
@@ -615,8 +575,8 @@
IN PHHIVE Hive,
IN PCHILD_LIST ChildList,
IN PUNICODE_STRING Name,
- IN PULONG ChildIndex,
- IN PHCELL_INDEX CellIndex
+ OUT PULONG ChildIndex,
+ OUT PHCELL_INDEX CellIndex
);
@@ -695,7 +655,7 @@
CmpGetValueData(
IN PHHIVE Hive,
IN PCM_KEY_VALUE Value,
- IN PULONG Length,
+ OUT PULONG Length,
OUT PVOID *Buffer,
OUT PBOOLEAN BufferAllocated,
OUT PHCELL_INDEX CellToRelease
Removed: trunk/reactos/lib/cmlib/cmtools.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/cmlib/cmtools.c?rev=70…
==============================================================================
--- trunk/reactos/lib/cmlib/cmtools.c [iso-8859-1] (original)
+++ trunk/reactos/lib/cmlib/cmtools.c (removed)
@@ -1,222 +0,0 @@
-/*
- * PROJECT: Registry manipulation library
- * LICENSE: GPL - See COPYING in the top level directory
- * COPYRIGHT: Copyright 2005 Filip Navara <navaraf(a)reactos.org>
- * Copyright 2001 - 2005 Eric Kohl
- */
-
-#include "cmlib.h"
-#define NDEBUG
-#include <debug.h>
-
-BOOLEAN
-NTAPI
-CmCompareHash(
- IN PCUNICODE_STRING KeyName,
- IN PCHAR HashString,
- IN BOOLEAN CaseInsensitive)
-{
- CHAR Buffer[4];
-
- Buffer[0] = (KeyName->Length >= 2) ? (CHAR)KeyName->Buffer[0] : 0;
- Buffer[1] = (KeyName->Length >= 4) ? (CHAR)KeyName->Buffer[1] : 0;
- Buffer[2] = (KeyName->Length >= 6) ? (CHAR)KeyName->Buffer[2] : 0;
- Buffer[3] = (KeyName->Length >= 8) ? (CHAR)KeyName->Buffer[3] : 0;
-
- if (CaseInsensitive)
- {
- return (strncasecmp(Buffer, HashString, 4) == 0);
- }
- else
- {
- return (strncmp(Buffer, HashString, 4) == 0);
- }
-}
-
-BOOLEAN
-NTAPI
-CmComparePackedNames(
- IN PCUNICODE_STRING CompareName,
- IN PVOID Name,
- IN USHORT NameLength,
- IN BOOLEAN NamePacked,
- IN BOOLEAN CaseInsensitive)
-{
- ULONG i;
-
- if (NamePacked)
- {
- PUCHAR PackedName = (PUCHAR)Name;
-
- if (CompareName->Length != NameLength * sizeof(WCHAR))
- {
- //DPRINT1("Length doesn'T match %lu / %lu\n",
CompareName->Length, NameLength);
- return FALSE;
- }
-
- if (CaseInsensitive)
- {
- for (i = 0; i < CompareName->Length / sizeof(WCHAR); i++)
- {
- //DbgPrint("%c/%c,",
- // RtlUpcaseUnicodeChar(CompareName->Buffer[i]),
- // RtlUpcaseUnicodeChar(PackedName[i]));
- if (RtlUpcaseUnicodeChar(CompareName->Buffer[i]) !=
- RtlUpcaseUnicodeChar(PackedName[i]))
- {
- //DbgPrint("\nFailed!\n");
- return FALSE;
- }
- }
- //DbgPrint("\nSuccess!\n");
- }
- else
- {
- for (i = 0; i < CompareName->Length / sizeof(WCHAR); i++)
- {
- if (CompareName->Buffer[i] != PackedName[i])
- return FALSE;
- }
- }
-
- }
- else
- {
- PWCHAR UnicodeName = (PWCHAR)Name;
-
- if (CompareName->Length != NameLength)
- return FALSE;
-
- if (CaseInsensitive)
- {
- for (i = 0; i < CompareName->Length / sizeof(WCHAR); i++)
- {
- if (RtlUpcaseUnicodeChar(CompareName->Buffer[i]) !=
- RtlUpcaseUnicodeChar(UnicodeName[i]))
- return FALSE;
- }
- }
- else
- {
- for (i = 0; i < CompareName->Length / sizeof(WCHAR); i++)
- {
- if (CompareName->Buffer[i] != UnicodeName[i])
- return FALSE;
- }
- }
- }
-
- return TRUE;
-}
-
-
-BOOLEAN
-NTAPI
-CmCompareKeyName(
- IN PCM_KEY_NODE KeyNode,
- IN PCUNICODE_STRING KeyName,
- IN BOOLEAN CaseInsensitive)
-{
- ASSERT(KeyNode->Signature == CM_KEY_NODE_SIGNATURE);
- return CmComparePackedNames(KeyName,
- KeyNode->Name,
- KeyNode->NameLength,
- (KeyNode->Flags & KEY_COMP_NAME) ? TRUE : FALSE,
- CaseInsensitive);
-}
-
-BOOLEAN
-NTAPI
-CmCompareKeyValueName(
- IN PCM_KEY_VALUE ValueCell,
- IN PCUNICODE_STRING ValueName,
- IN BOOLEAN CaseInsensitive)
-{
- ASSERT(ValueCell->Signature == CM_KEY_VALUE_SIGNATURE);
- return CmComparePackedNames(ValueName,
- ValueCell->Name,
- ValueCell->NameLength,
- (ValueCell->Flags & VALUE_COMP_NAME) ? TRUE :
FALSE,
- CaseInsensitive);
-}
-
-ULONG
-NTAPI
-CmCopyPackedName(
- _Out_ PWCHAR Buffer,
- _In_ ULONG BufferLength,
- _In_ PVOID Name,
- _In_ USHORT NameLength,
- _In_ BOOLEAN NamePacked)
-{
- ULONG CharCount, i;
- ASSERT(Name != 0);
- ASSERT(NameLength != 0);
-
- if (NamePacked)
- {
- NameLength *= sizeof(WCHAR);
- CharCount = min(BufferLength, NameLength) / sizeof(WCHAR);
-
- if (Buffer != NULL)
- {
- PUCHAR PackedName = (PUCHAR)Name;
-
- for (i = 0; i < CharCount; i++)
- {
- Buffer[i] = PackedName[i];
- }
- }
- }
- else
- {
- CharCount = min(BufferLength, NameLength) / sizeof(WCHAR);
-
- if (Buffer != NULL)
- {
- PWCHAR UnicodeName = (PWCHAR)Name;
-
- for (i = 0; i < CharCount; i++)
- {
- Buffer[i] = UnicodeName[i];
- }
- }
- }
-
- if (BufferLength >= NameLength + sizeof(WCHAR))
- {
- Buffer[NameLength / sizeof(WCHAR)] = '\0';
- }
-
- return NameLength + sizeof(WCHAR);
-}
-
-ULONG
-NTAPI
-CmCopyKeyName(
- _In_ PCM_KEY_NODE KeyNode,
- _Out_ PWCHAR KeyNameBuffer,
- _Inout_ ULONG BufferLength)
-{
- ASSERT(KeyNode->Signature == CM_KEY_NODE_SIGNATURE);
- return CmCopyPackedName(KeyNameBuffer,
- BufferLength,
- KeyNode->Name,
- KeyNode->NameLength,
- (KeyNode->Flags & KEY_COMP_NAME) ? TRUE : FALSE);
-}
-
-ULONG
-NTAPI
-CmCopyKeyValueName(
- _In_ PCM_KEY_VALUE ValueCell,
- _Out_ PWCHAR ValueNameBuffer,
- _Inout_ ULONG BufferLength)
-{
- ASSERT(ValueCell->Signature == CM_KEY_VALUE_SIGNATURE);
- return CmCopyPackedName(ValueNameBuffer,
- BufferLength,
- ValueCell->Name,
- ValueCell->NameLength,
- (ValueCell->Flags & VALUE_COMP_NAME) ? TRUE : FALSE);
-}
Modified: trunk/reactos/lib/cmlib/hiveinit.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/cmlib/hiveinit.c?rev=7…
==============================================================================
--- trunk/reactos/lib/cmlib/hiveinit.c [iso-8859-1] (original)
+++ trunk/reactos/lib/cmlib/hiveinit.c [iso-8859-1] Sun Jan 17 02:12:37 2016
@@ -57,7 +57,7 @@
PHBIN Bin;
ULONG Storage;
- for (Storage = Stable; Storage < HTYPE_COUNT; Storage++)
+ for (Storage = 0; Storage < Hive->StorageTypeCount; Storage++)
{
Bin = NULL;
for (i = 0; i < Hive->Storage[Storage].Length; i++)
@@ -353,6 +353,8 @@
Hive->Version = ChunkBase->Minor;
Hive->Flat = TRUE;
Hive->ReadOnly = TRUE;
+
+ Hive->StorageTypeCount = 1;
/* Set default boot type */
ChunkBase->BootType = 0;