Revert r18064 and correctly set the cell size for hash cells.
Modified: trunk/reactos/ntoskrnl/cm/regfile.c
_____
Modified: trunk/reactos/ntoskrnl/cm/regfile.c
--- trunk/reactos/ntoskrnl/cm/regfile.c 2005-09-25 20:46:28 UTC (rev
18069)
+++ trunk/reactos/ntoskrnl/cm/regfile.c 2005-09-25 20:54:40 UTC (rev
18070)
@@ -3033,6 +3033,7 @@
else
{
ASSERT(SubKeyCount <= 0xffff); /* should really be USHORT_MAX or
similar */
+ NewHashBlock->CellSize = -NewHashSize;
NewHashBlock->Id = REG_HASH_TABLE_CELL_ID;
NewHashBlock->HashTableSize = (USHORT)SubKeyCount;
*HashBlock = NewHashBlock;
@@ -3456,20 +3457,14 @@
else
{
PCELL_HEADER pFree = Cell;
- PHASH_TABLE_CELL pHash = Cell;
- LONG CellSize;
- if (pHash->Id == REG_HASH_TABLE_CELL_ID)
- CellSize = sizeof(HASH_TABLE_CELL) + pHash->HashTableSize *
sizeof(HASH_RECORD);
- else
- CellSize = abs(pFree->CellSize);
+ if (pFree->CellSize < 0)
+ pFree->CellSize = -pFree->CellSize;
- /* Clear block */
- RtlZeroMemory(pFree, CellSize);
-
- /* restore CellSize */
- pFree->CellSize = CellSize;
-
+ /* Clear block (except the block size) */
+ RtlZeroMemory(((char*)pFree) + sizeof(ULONG),
+ pFree->CellSize - sizeof(ULONG));
+
/* Add block to the list of free blocks */
CmiAddFree(RegistryHive, Cell, CellOffset, TRUE);
Show replies by date