From: Filip Navara Date: Sun, 25 Sep 2005 18:07:36 +0000 (+0000) Subject: Correctly interpret the cell type in CmiDestroyCell. Patch by brbak . svn path=/trunk/; revision=18064 --- diff --git a/reactos/ntoskrnl/cm/regfile.c b/reactos/ntoskrnl/cm/regfile.c index 7cb510c4336..03d9db95f03 100644 --- a/reactos/ntoskrnl/cm/regfile.c +++ b/reactos/ntoskrnl/cm/regfile.c @@ -3456,14 +3456,20 @@ CmiDestroyCell (PREGISTRY_HIVE RegistryHive, else { PCELL_HEADER pFree = Cell; + PHASH_TABLE_CELL pHash = Cell; + LONG CellSize; - if (pFree->CellSize < 0) - pFree->CellSize = -pFree->CellSize; - - /* Clear block (except the block size) */ - RtlZeroMemory(((char*)pFree) + sizeof(ULONG), - pFree->CellSize - sizeof(ULONG)); - + if (pHash->Id == REG_HASH_TABLE_CELL_ID) + CellSize = sizeof(HASH_TABLE_CELL) + pHash->HashTableSize * sizeof(HASH_RECORD); + else + CellSize = abs(pFree->CellSize); + + /* Clear block */ + RtlZeroMemory(pFree, CellSize); + + /* restore CellSize */ + pFree->CellSize = CellSize; + /* Add block to the list of free blocks */ CmiAddFree(RegistryHive, Cell, CellOffset, TRUE);