mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 01:55:19 +00:00
[SDK:CMLIB] HvGetCell is a macro calling the hive's GetCellRoutine callback.
In principle there should be different get-cell routines, depending on the type of the hive (given by the OperationType parameter of HvInitialize): for flat hives, memory-mapped hives, etc. For now in ReactOS we only support a restricted subset of these, therefore we are still happy with a single get-cell callback... This may change in the future.
This commit is contained in:
parent
a4cad7be6b
commit
8ccd435eb0
3 changed files with 24 additions and 17 deletions
|
@ -384,15 +384,13 @@ VOID CMAPI
|
|||
HvFree(
|
||||
PHHIVE RegistryHive);
|
||||
|
||||
PVOID CMAPI
|
||||
HvGetCell(
|
||||
PHHIVE RegistryHive,
|
||||
HCELL_INDEX CellOffset);
|
||||
#define HvGetCell(Hive, Cell) \
|
||||
(Hive)->GetCellRoutine(Hive, Cell)
|
||||
|
||||
#define HvReleaseCell(h, c) \
|
||||
do { \
|
||||
if ((h)->ReleaseCellRoutine) \
|
||||
(h)->ReleaseCellRoutine(h, c); \
|
||||
#define HvReleaseCell(Hive, Cell) \
|
||||
do { \
|
||||
if ((Hive)->ReleaseCellRoutine) \
|
||||
(Hive)->ReleaseCellRoutine(Hive, Cell); \
|
||||
} while(0)
|
||||
|
||||
LONG CMAPI
|
||||
|
@ -468,6 +466,11 @@ HvReleaseFreeCellRefArray(
|
|||
* Private functions.
|
||||
*/
|
||||
|
||||
PCELL_DATA CMAPI
|
||||
HvpGetCellData(
|
||||
_In_ PHHIVE Hive,
|
||||
_In_ HCELL_INDEX CellIndex);
|
||||
|
||||
PHBIN CMAPI
|
||||
HvpAddBin(
|
||||
PHHIVE RegistryHive,
|
||||
|
|
|
@ -29,13 +29,13 @@ HvpGetCellHeader(
|
|||
ASSERT(CellBlock < RegistryHive->Storage[CellType].Length);
|
||||
Block = (PVOID)RegistryHive->Storage[CellType].BlockList[CellBlock].BlockAddress;
|
||||
ASSERT(Block != NULL);
|
||||
return (PVOID)((ULONG_PTR)Block + CellOffset);
|
||||
return (PHCELL)((ULONG_PTR)Block + CellOffset);
|
||||
}
|
||||
else
|
||||
{
|
||||
ASSERT(HvGetCellType(CellIndex) == Stable);
|
||||
return (PVOID)((ULONG_PTR)RegistryHive->BaseBlock + HBLOCK_SIZE +
|
||||
CellIndex);
|
||||
return (PHCELL)((ULONG_PTR)RegistryHive->BaseBlock + HBLOCK_SIZE +
|
||||
CellIndex);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -63,13 +63,12 @@ HvIsCellAllocated(IN PHHIVE RegistryHive,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
PVOID CMAPI
|
||||
HvGetCell(
|
||||
PHHIVE RegistryHive,
|
||||
HCELL_INDEX CellIndex)
|
||||
PCELL_DATA CMAPI
|
||||
HvpGetCellData(
|
||||
_In_ PHHIVE Hive,
|
||||
_In_ HCELL_INDEX CellIndex)
|
||||
{
|
||||
ASSERT(CellIndex != HCELL_NIL);
|
||||
return (PVOID)(HvpGetCellHeader(RegistryHive, CellIndex) + 1);
|
||||
return (PCELL_DATA)(HvpGetCellHeader(Hive, CellIndex) + 1);
|
||||
}
|
||||
|
||||
static __inline LONG CMAPI
|
||||
|
|
|
@ -562,6 +562,11 @@ HvInitialize(
|
|||
#endif
|
||||
Hive->HiveFlags = HiveFlags & ~HIVE_NOLAZYFLUSH;
|
||||
|
||||
// TODO: The CellRoutines point to different callbacks
|
||||
// depending on the OperationType.
|
||||
Hive->GetCellRoutine = HvpGetCellData;
|
||||
Hive->ReleaseCellRoutine = NULL;
|
||||
|
||||
switch (OperationType)
|
||||
{
|
||||
case HINIT_CREATE:
|
||||
|
|
Loading…
Reference in a new issue