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);