mirror of
https://github.com/reactos/reactos.git
synced 2024-12-27 01:24:38 +00:00
Store hive root key name.
Patch partially by Filip Navara. svn path=/trunk/; revision=7527
This commit is contained in:
parent
cff5149eca
commit
27044f2ad0
1 changed files with 21 additions and 11 deletions
|
@ -325,11 +325,20 @@ CmiCreateDefaultBinCell (PHBIN BinCell)
|
||||||
|
|
||||||
|
|
||||||
static VOID
|
static VOID
|
||||||
CmiCreateDefaultRootKeyCell (PKEY_CELL RootKeyCell)
|
CmiCreateDefaultRootKeyCell (PKEY_CELL RootKeyCell, PCHAR KeyName)
|
||||||
{
|
{
|
||||||
assert(RootKeyCell);
|
PCHAR BaseKeyName;
|
||||||
memset (RootKeyCell, 0, sizeof(KEY_CELL));
|
U32 NameSize;
|
||||||
RootKeyCell->CellSize = -sizeof(KEY_CELL);
|
U32 CellSize;
|
||||||
|
|
||||||
|
assert (RootKeyCell);
|
||||||
|
|
||||||
|
BaseKeyName = strrchr(KeyName, '\\') + 1;
|
||||||
|
NameSize = strlen(BaseKeyName);
|
||||||
|
CellSize = ROUND_UP(sizeof(KEY_CELL) + NameSize - 1, 16);
|
||||||
|
|
||||||
|
memset (RootKeyCell, 0, CellSize);
|
||||||
|
RootKeyCell->CellSize = -CellSize;
|
||||||
RootKeyCell->Id = REG_KEY_CELL_ID;
|
RootKeyCell->Id = REG_KEY_CELL_ID;
|
||||||
RootKeyCell->Type = REG_ROOT_KEY_CELL_TYPE;
|
RootKeyCell->Type = REG_ROOT_KEY_CELL_TYPE;
|
||||||
RootKeyCell->LastWriteTime = 0ULL;
|
RootKeyCell->LastWriteTime = 0ULL;
|
||||||
|
@ -340,13 +349,14 @@ CmiCreateDefaultRootKeyCell (PKEY_CELL RootKeyCell)
|
||||||
RootKeyCell->ValueListOffset = -1;
|
RootKeyCell->ValueListOffset = -1;
|
||||||
RootKeyCell->SecurityKeyOffset = 0;
|
RootKeyCell->SecurityKeyOffset = 0;
|
||||||
RootKeyCell->ClassNameOffset = -1;
|
RootKeyCell->ClassNameOffset = -1;
|
||||||
RootKeyCell->NameSize = 0;
|
RootKeyCell->NameSize = NameSize;
|
||||||
RootKeyCell->ClassSize = 0;
|
RootKeyCell->ClassSize = 0;
|
||||||
|
memcpy (RootKeyCell->Name, BaseKeyName, NameSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static PREGISTRY_HIVE
|
static PREGISTRY_HIVE
|
||||||
CmiCreateHive (VOID)
|
CmiCreateHive (PCHAR KeyName)
|
||||||
{
|
{
|
||||||
PREGISTRY_HIVE Hive;
|
PREGISTRY_HIVE Hive;
|
||||||
PCELL_HEADER FreeCell;
|
PCELL_HEADER FreeCell;
|
||||||
|
@ -418,15 +428,15 @@ CmiCreateHive (VOID)
|
||||||
|
|
||||||
/* Init root key cell */
|
/* Init root key cell */
|
||||||
RootKeyCell = (PKEY_CELL)((U32)BinCell + REG_HBIN_DATA_OFFSET);
|
RootKeyCell = (PKEY_CELL)((U32)BinCell + REG_HBIN_DATA_OFFSET);
|
||||||
CmiCreateDefaultRootKeyCell(RootKeyCell);
|
CmiCreateDefaultRootKeyCell(RootKeyCell, KeyName);
|
||||||
Hive->HiveHeader->RootKeyOffset = REG_HBIN_DATA_OFFSET;
|
Hive->HiveHeader->RootKeyOffset = REG_HBIN_DATA_OFFSET;
|
||||||
|
|
||||||
/* Init free cell */
|
/* Init free cell */
|
||||||
FreeCell = (PCELL_HEADER)((U32)RootKeyCell + sizeof(KEY_CELL));
|
FreeCell = (PCELL_HEADER)((U32)RootKeyCell - RootKeyCell->CellSize);
|
||||||
FreeCell->CellSize = REG_BLOCK_SIZE - (REG_HBIN_DATA_OFFSET + sizeof(KEY_CELL));
|
FreeCell->CellSize = REG_BLOCK_SIZE - (REG_HBIN_DATA_OFFSET - RootKeyCell->CellSize);
|
||||||
|
|
||||||
Hive->FreeList[0] = FreeCell;
|
Hive->FreeList[0] = FreeCell;
|
||||||
Hive->FreeListOffset[0] = REG_HBIN_DATA_OFFSET + sizeof(KEY_CELL);
|
Hive->FreeListOffset[0] = REG_HBIN_DATA_OFFSET - RootKeyCell->CellSize;
|
||||||
Hive->FreeListSize++;
|
Hive->FreeListSize++;
|
||||||
|
|
||||||
return Hive;
|
return Hive;
|
||||||
|
@ -1615,7 +1625,7 @@ RegExportBinaryHive(PCHAR KeyName,
|
||||||
*ChunkSize = 0;
|
*ChunkSize = 0;
|
||||||
InitMbMemory (ChunkBase);
|
InitMbMemory (ChunkBase);
|
||||||
|
|
||||||
Hive = CmiCreateHive ();
|
Hive = CmiCreateHive (KeyName);
|
||||||
if (Hive == NULL)
|
if (Hive == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue