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