Windows2000/private/ntos/config/hive.h
2020-09-30 17:12:32 +02:00

346 lines
5.9 KiB
C

/*++
Copyright (c) 1989 Microsoft Corporation
Module Name:
hive.h
Abstract:
This module contains the private (internal) header file for the
direct memory loaded hive manager.
Author:
Bryan M. Willman (bryanwi) 28-May-91
Environment:
Revision History:
26-Mar-92 bryanwi - changed to type 1.0 hive format
13-Jan-99 Dragos C. Sambotin (dragoss) - factoring the data structure declarations
in \nt\private\ntos\inc\hivedata.h :: to be available from outside.
*/
#ifndef _HIVE_
#define _HIVE_
// Hive data structure declarations
// file location: \nt\private\ntos\inc
#include "hivedata.h"
#if DBG
extern ULONG HvHiveChecking;
#define DHvCheckHive(a) if(HvHiveChecking) ASSERT(HvCheckHive(a,NULL) == 0)
#define DHvCheckBin(h,a) if(HvHiveChecking) ASSERT(HvCheckBin(h,a,NULL) == 0)
#else
#define DHvCheckHive(a)
#define DHvCheckBin(h,a)
#endif
#define ROUND_UP(a, b) \
( ((ULONG)(a) + (ULONG)(b) - 1) & ~((ULONG)(b) - 1) )
// tombstone for an HBIN that is not resident in memory. This list is searched
// before any new HBIN is added.
#define ASSERT_LISTENTRY(ListEntry) \
ASSERT((ListEntry)->Flink->Blink==ListEntry); \
ASSERT((ListEntry)->Blink->Flink==ListEntry);
// ===== Hive Private Procedure Prototypes =====
PHBIN
HvpAddBin(
PHHIVE Hive,
ULONG NewSize,
HSTORAGE_TYPE Type
);
PHMAP_ENTRY
HvpGetCellMap(
PHHIVE Hive,
HCELL_INDEX Cell
);
VOID
HvpFreeMap(
PHHIVE Hive,
PHMAP_DIRECTORY Dir,
ULONG Start,
ULONG End
);
BOOLEAN
HvpAllocateMap(
PHHIVE Hive,
PHMAP_DIRECTORY Dir,
ULONG Start,
ULONG End
);
BOOLEAN
HvpGrowLog1(
PHHIVE Hive,
ULONG Count
);
BOOLEAN
HvpGrowLog2(
PHHIVE Hive,
ULONG Size
);
ULONG
HvpHeaderCheckSum(
PHBASE_BLOCK BaseBlock
);
NTSTATUS
HvpBuildMap(
PHHIVE Hive,
PVOID Image,
PHCELL_INDEX TailDisplay OPTIONAL
);
NTSTATUS
HvpBuildMapAndCopy(
PHHIVE Hive,
PVOID Image,
PHCELL_INDEX TailDisplay OPTIONAL
);
NTSTATUS
HvpInitMap(
PHHIVE Hive
);
VOID
HvpCleanMap(
PHHIVE Hive
);
NTSTATUS
HvpEnlistBinInMap(
PHHIVE Hive,
ULONG Length,
PHBIN Bin,
ULONG Offset,
PHCELL_INDEX TailDisplay OPTIONAL
);
VOID
HvpFreeAllocatedBins(
PHHIVE Hive
);
BOOLEAN
HvpDoWriteHive(
PHHIVE Hive,
ULONG FileType
);
struct _CELL_DATA *
HvpGetCellFlat(
PHHIVE Hive,
HCELL_INDEX Cell
);
struct _CELL_DATA *
HvpGetCellPaged(
PHHIVE Hive,
HCELL_INDEX Cell
);
VOID
HvpEnlistFreeCell(
PHHIVE Hive,
HCELL_INDEX Cell,
ULONG Size,
HSTORAGE_TYPE Type,
BOOLEAN CoalesceForward,
PHCELL_INDEX TailDisplay OPTIONAL
);
BOOLEAN
HvpEnlistFreeCells(
PHHIVE Hive,
PHBIN Bin,
ULONG BinOffset,
PHCELL_INDEX TailDisplay OPTIONAL
);
VOID
HvpDelistFreeCell(
PHHIVE Hive,
PHCELL Pcell,
HSTORAGE_TYPE Type,
PHCELL_INDEX TailDisplay OPTIONAL
);
// ===== Hive Public Procedure Prototypes =====
#define HINIT_CREATE 0
#define HINIT_MEMORY 1
#define HINIT_FILE 2
#define HINIT_MEMORY_INPLACE 3
#define HINIT_FLAT 4
#define HIVE_VOLATILE 1
#define HIVE_NOLAZYFLUSH 2
#define HIVE_HAS_BEEN_REPLACED 4
NTSTATUS
HvInitializeHive(
PHHIVE Hive,
ULONG OperationType,
ULONG HiveFlags,
ULONG FileTypes,
PVOID HiveData OPTIONAL,
PALLOCATE_ROUTINE AllocateRoutine,
PFREE_ROUTINE FreeRoutine,
PFILE_SET_SIZE_ROUTINE FileSetSizeRoutine,
PFILE_WRITE_ROUTINE FileWriteRoutine,
PFILE_READ_ROUTINE FileReadRoutine,
PFILE_FLUSH_ROUTINE FileFlushRoutine,
ULONG Cluster,
PUNICODE_STRING FileName
);
BOOLEAN
HvSyncHive(
PHHIVE Hive
);
NTSTATUS
HvWriteHive(
PHHIVE Hive
);
NTSTATUS
HvLoadHive(
PHHIVE Hive,
PHCELL_INDEX TailDisplay OPTIONAL
);
VOID
HvRefreshHive(
PHHIVE Hive
);
NTSTATUS
HvReadInMemoryHive(
PHHIVE Hive,
PVOID *HiveImage
);
ULONG
HvCheckHive(
PHHIVE Hive,
PULONG Storage OPTIONAL
);
ULONG
HvCheckBin(
PHHIVE Hive,
PHBIN Bin,
PULONG Storage
);
BOOLEAN
HvMarkCellDirty(
PHHIVE Hive,
HCELL_INDEX Cell
);
BOOLEAN
HvIsBinDirty(
IN PHHIVE Hive,
IN HCELL_INDEX Cell
);
BOOLEAN
HvMarkDirty(
PHHIVE Hive,
HCELL_INDEX Start,
ULONG Length
);
BOOLEAN
HvMarkClean(
PHHIVE Hive,
HCELL_INDEX Start,
ULONG Length
);
#define HvGetCell(Hive, Cell) (((Hive)->GetCellRoutine)(Hive, Cell))
#define HvpGetHCell(Hive, Cell) ( USE_OLD_CELL(Hive) ? \
CONTAINING_RECORD(HvGetCell(Hive,Cell), \
HCELL, \
u.OldCell.u.UserData) : \
CONTAINING_RECORD(HvGetCell(Hive,Cell), \
HCELL, \
u.NewCell.u.UserData))
LONG
HvGetCellSize(
PHHIVE Hive,
PVOID Address
);
HCELL_INDEX
HvAllocateCell(
PHHIVE Hive,
ULONG NewSize,
HSTORAGE_TYPE Type
);
VOID
HvFreeCell(
PHHIVE Hive,
HCELL_INDEX Cell
);
HCELL_INDEX
HvReallocateCell(
PHHIVE Hive,
HCELL_INDEX Cell,
ULONG NewSize
);
BOOLEAN
HvIsCellAllocated(
PHHIVE Hive,
HCELL_INDEX Cell
);
VOID
HvFreeHive(
PHHIVE Hive
);
VOID
HvFreeHivePartial(
PHHIVE Hive,
HCELL_INDEX Start,
HSTORAGE_TYPE Type
);
#endif // _HIVE_