#define HSECTOR_COUNT 8
#define HV_LOG_HEADER_SIZE FIELD_OFFSET(HBASE_BLOCK, Reserved2)
-#define HV_SIGNATURE 0x66676572 // "regf"
-#define HV_BIN_SIGNATURE 0x6e696268 // "hbin"
+
+//
+// Hive structure identifiers
+//
+#define HV_HBLOCK_SIGNATURE 0x66676572 // "regf"
+#define HV_HBIN_SIGNATURE 0x6e696268 // "hbin"
//
// Hive versions
typedef struct _HBASE_BLOCK
{
- /* Hive identifier "regf" (0x66676572) */
+ /* Hive base block identifier "regf" (0x66676572) */
ULONG Signature;
/* Update counters */
typedef struct _HBIN
{
- /* Bin identifier "hbin" (0x6E696268) */
+ /* Hive bin identifier "hbin" (0x6E696268) */
ULONG Signature;
/* Block offset of this bin */
typedef struct _HHIVE
{
+ /* Hive identifier (0xBEE0BEE0) */
ULONG Signature;
+
+ /* Callbacks */
PGET_CELL_ROUTINE GetCellRoutine;
PRELEASE_CELL_ROUTINE ReleaseCellRoutine;
PALLOCATE_ROUTINE Allocate;
PFILE_WRITE_ROUTINE FileWrite;
PFILE_READ_ROUTINE FileRead;
PFILE_FLUSH_ROUTINE FileFlush;
+
#if (NTDDI_VERSION >= NTDDI_WIN7)
PVOID HiveLoadFailure; // PHIVE_LOAD_FAILURE
#endif
HvpVerifyHiveHeader(
IN PHBASE_BLOCK BaseBlock)
{
- if (BaseBlock->Signature != HV_SIGNATURE ||
+ if (BaseBlock->Signature != HV_HBLOCK_SIGNATURE ||
BaseBlock->Major != HSYS_MAJOR ||
BaseBlock->Minor < HSYS_MINOR ||
BaseBlock->Type != HFILE_TYPE_PRIMARY ||
{
DPRINT1("Verify Hive Header failed:\n");
DPRINT1(" Signature: 0x%x, expected 0x%x; Major: 0x%x, expected 0x%x\n",
- BaseBlock->Signature, HV_SIGNATURE, BaseBlock->Major, HSYS_MAJOR);
+ BaseBlock->Signature, HV_HBLOCK_SIGNATURE, BaseBlock->Major, HSYS_MAJOR);
DPRINT1(" Minor: 0x%x expected to be >= 0x%x; Type: 0x%x, expected 0x%x\n",
BaseBlock->Minor, HSYS_MINOR, BaseBlock->Type, HFILE_TYPE_PRIMARY);
DPRINT1(" Format: 0x%x, expected 0x%x; Cluster: 0x%x, expected 1\n",
/* Clear it */
RtlZeroMemory(BaseBlock, RegistryHive->BaseBlockAlloc);
- BaseBlock->Signature = HV_SIGNATURE;
+ BaseBlock->Signature = HV_HBLOCK_SIGNATURE;
BaseBlock->Major = HSYS_MAJOR;
BaseBlock->Minor = HSYS_MINOR;
BaseBlock->Type = HFILE_TYPE_PRIMARY;
for (BlockIndex = 0; BlockIndex < Hive->Storage[Stable].Length; )
{
Bin = (PHBIN)((ULONG_PTR)ChunkBase + (BlockIndex + 1) * HBLOCK_SIZE);
- if (Bin->Signature != HV_BIN_SIGNATURE ||
+ if (Bin->Signature != HV_HBIN_SIGNATURE ||
(Bin->Size % HBLOCK_SIZE) != 0)
{
DPRINT1("Invalid bin at BlockIndex %lu, Signature 0x%x, Size 0x%x\n",