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
11 #define WIN32_NO_STATUS
17 #define ROUND_UP(a,b) ((((a)+(b)-1)/(b))*(b))
18 #define ROUND_DOWN(a,b) (((a)/(b))*(b))
25 typedef PVOID (CMAPI
*PGET_CELL_ROUTINE
)(
29 typedef VOID (CMAPI
*PRELEASE_CELL_ROUTINE
)(
33 typedef PVOID (CMAPI
*PALLOCATE_ROUTINE
)(
37 typedef VOID (CMAPI
*PFREE_ROUTINE
)(
40 typedef BOOLEAN (CMAPI
*PFILE_READ_ROUTINE
)(
41 struct _HHIVE
*RegistryHive
,
47 typedef BOOLEAN (CMAPI
*PFILE_WRITE_ROUTINE
)(
48 struct _HHIVE
*RegistryHive
,
54 typedef BOOLEAN (CMAPI
*PFILE_SET_SIZE_ROUTINE
)(
55 struct _HHIVE
*RegistryHive
,
59 typedef BOOLEAN (CMAPI
*PFILE_FLUSH_ROUTINE
)(
60 struct _HHIVE
*RegistryHive
,
63 typedef struct _HMAP_ENTRY
67 struct _CM_VIEW_OF_FILE
*CmHive
;
69 } HMAP_ENTRY
, *PHMAP_ENTRY
;
71 typedef struct _HMAP_TABLE
73 HMAP_ENTRY Table
[512];
74 } HMAP_TABLE
, *PHMAP_TABLE
;
76 typedef struct _HMAP_DIRECTORY
78 PHMAP_TABLE Directory
[2048];
79 } HMAP_DIRECTORY
, *PHMAP_DIRECTORY
;
85 PHMAP_ENTRY BlockList
; // PHMAP_TABLE SmallDir;
87 HCELL_INDEX FreeDisplay
[24]; //FREE_DISPLAY FreeDisplay[24];
95 PGET_CELL_ROUTINE GetCellRoutine
;
96 PRELEASE_CELL_ROUTINE ReleaseCellRoutine
;
97 PALLOCATE_ROUTINE Allocate
;
99 PFILE_READ_ROUTINE FileRead
;
100 PFILE_WRITE_ROUTINE FileWrite
;
101 PFILE_SET_SIZE_ROUTINE FileSetSize
;
102 PFILE_FLUSH_ROUTINE FileFlush
;
103 PHBASE_BLOCK HiveHeader
;
104 RTL_BITMAP DirtyVector
;
107 ULONG BaseBlockAlloc
;
113 ULONG HvBinHeadersUse
;
114 ULONG HvFreeCellsUse
;
115 ULONG HvUsedcellsUse
;
116 ULONG CmUsedCellsUse
;
120 ULONG StorageTypeCount
;
122 DUAL Storage
[HvMaxStorageType
];
126 typedef struct _EREGISTRY_HIVE
130 UNICODE_STRING HiveFileName
;
131 UNICODE_STRING LogFileName
;
132 PCM_KEY_SECURITY RootSecurityCell
;
136 } EREGISTRY_HIVE
, *PEREGISTRY_HIVE
;
143 #define HV_OPERATION_CREATE_HIVE 0
144 #define HV_OPERATION_MEMORY 1
145 #define HV_OPERATION_MEMORY_INPLACE 3
151 ULONG_PTR HiveData OPTIONAL
,
152 ULONG Cluster OPTIONAL
,
155 PALLOCATE_ROUTINE Allocate
,
157 PFILE_READ_ROUTINE FileRead
,
158 PFILE_WRITE_ROUTINE FileWrite
,
159 PFILE_SET_SIZE_ROUTINE FileSetSize
,
160 PFILE_FLUSH_ROUTINE FileFlush
,
161 IN PUNICODE_STRING FileName
);
165 PHHIVE RegistryHive
);
170 HCELL_INDEX CellOffset
);
172 #define HvReleaseCell(h, c) \
173 if (h->ReleaseCellRoutine) h->ReleaseCellRoutine(h, c)
184 HV_STORAGE_TYPE Storage
);
189 HCELL_INDEX CellOffset
,
195 HCELL_INDEX CellOffset
);
200 HCELL_INDEX CellOffset
);
204 PHHIVE RegistryHive
);
208 PHHIVE RegistryHive
);
217 PHHIVE RegistryHive
);
227 HV_STORAGE_TYPE Storage
);
230 HvpCreateHiveFreeCellList(
234 HvpHiveHeaderChecksum(
235 PHBASE_BLOCK HiveHeader
);