2 * PROJECT: registry manipulation library
3 * LICENSE: GPL - See COPYING in the top level directory
4 * COPYRIGHT: Copyright 2005 Filip Navara <navaraf@reactos.org>
5 * Copyright 2001 - 2005 Eric Kohl
16 HCELL_INDEX RootCellIndex
;
19 NameSize
= wcslen(Name
) * sizeof(WCHAR
);
20 RootCellIndex
= HvAllocateCell(Hive
, sizeof(CM_KEY_NODE
) + NameSize
, HvStable
);
21 if (RootCellIndex
== HCELL_NULL
)
24 Hive
->HiveHeader
->RootCell
= RootCellIndex
;
25 Hive
->HiveHeader
->Checksum
= HvpHiveHeaderChecksum(Hive
->HiveHeader
);
27 KeyCell
= (PCM_KEY_NODE
)HvGetCell(Hive
, RootCellIndex
);
28 KeyCell
->Id
= REG_KEY_CELL_ID
;
29 KeyCell
->Flags
= REG_KEY_ROOT_CELL
;
30 KeyCell
->LastWriteTime
.QuadPart
= 0;
31 KeyCell
->Parent
= HCELL_NULL
;
32 KeyCell
->SubKeyCounts
[0] = 0;
33 KeyCell
->SubKeyCounts
[1] = 0;
34 KeyCell
->SubKeyLists
[0] = HCELL_NULL
;
35 KeyCell
->SubKeyLists
[1] = HCELL_NULL
;
36 KeyCell
->ValueList
.Count
= 0;
37 KeyCell
->ValueList
.List
= HCELL_NULL
;
38 KeyCell
->SecurityKeyOffset
= HCELL_NULL
;
39 KeyCell
->ClassNameOffset
= HCELL_NULL
;
40 KeyCell
->NameSize
= NameSize
;
41 KeyCell
->ClassSize
= 0;
42 memcpy(KeyCell
->Name
, Name
, NameSize
);
52 PCM_KEY_NODE SubKeyCell
;
53 PHASH_TABLE_CELL HashCell
;
56 ASSERT(KeyCell
->Id
== REG_KEY_CELL_ID
);
58 KeyCell
->SubKeyLists
[HvVolatile
] = HCELL_NULL
;
59 KeyCell
->SubKeyCounts
[HvVolatile
] = 0;
61 /* Enumerate and add subkeys */
62 if (KeyCell
->SubKeyCounts
[HvStable
] > 0)
64 HashCell
= HvGetCell(RegistryHive
, KeyCell
->SubKeyLists
[HvStable
]);
66 for (i
= 0; i
< KeyCell
->SubKeyCounts
[HvStable
]; i
++)
68 SubKeyCell
= HvGetCell(RegistryHive
, HashCell
->Table
[i
].KeyOffset
);
69 CmpPrepareKey(RegistryHive
, SubKeyCell
);
78 PCM_KEY_NODE RootCell
;
80 RootCell
= HvGetCell(RegistryHive
, RegistryHive
->HiveHeader
->RootCell
);
81 CmpPrepareKey(RegistryHive
, RootCell
);