- Parameter changes to HvInitialize
[reactos.git] / reactos / lib / cmlib / cmlib.h
1 /*
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
6 */
7
8 #ifndef CMLIB_H
9 #define CMLIB_H
10
11 #include <ntddk.h>
12 #include "hivedata.h"
13 #include "cmdata.h"
14
15 #ifndef ROUND_UP
16 #define ROUND_UP(a,b) ((((a)+(b)-1)/(b))*(b))
17 #define ROUND_DOWN(a,b) (((a)/(b))*(b))
18 #endif
19
20 #define CMAPI
21
22 struct _HHIVE;
23
24 typedef PVOID (CMAPI *PGET_CELL_ROUTINE)(
25 struct _HHIVE *Hive,
26 HCELL_INDEX Cell);
27
28 typedef VOID (CMAPI *PRELEASE_CELL_ROUTINE)(
29 struct _HHIVE *Hive,
30 HCELL_INDEX Cell);
31
32 typedef PVOID (CMAPI *PALLOCATE_ROUTINE)(
33 ULONG Size,
34 BOOLEAN Paged);
35
36 typedef VOID (CMAPI *PFREE_ROUTINE)(
37 PVOID Ptr);
38
39 typedef BOOLEAN (CMAPI *PFILE_READ_ROUTINE)(
40 struct _HHIVE *RegistryHive,
41 ULONG FileType,
42 ULONG FileOffset,
43 PVOID Buffer,
44 ULONG BufferLength);
45
46 typedef BOOLEAN (CMAPI *PFILE_WRITE_ROUTINE)(
47 struct _HHIVE *RegistryHive,
48 ULONG FileType,
49 ULONG FileOffset,
50 PVOID Buffer,
51 ULONG BufferLength);
52
53 typedef BOOLEAN (CMAPI *PFILE_SET_SIZE_ROUTINE)(
54 struct _HHIVE *RegistryHive,
55 ULONG FileType,
56 ULONG FileSize);
57
58 typedef BOOLEAN (CMAPI *PFILE_FLUSH_ROUTINE)(
59 struct _HHIVE *RegistryHive,
60 ULONG FileType);
61
62 typedef struct _HMAP_ENTRY
63 {
64 ULONG_PTR Bin;
65 ULONG_PTR Block;
66 PCM_VIEW_OF_FILE CmHive;
67 ULONG MemAlloc;
68 } HMAP_ENTRY, *PHMAP_ENTRY;
69
70 typedef struct _HMAP_TABLE
71 {
72 HMAP_ENTRY Table[512];
73 } HMAP_TABLE, *PHMAP_TABLE;
74
75 typedef struct _HMAP_DIRECTORY
76 {
77 PHMAP_TABLE Directory[2048];
78 } HMAP_DIRECTORY, *PHMAP_DIRECTORY;
79
80 typedef struct _DUAL
81 {
82 ULONG Length;
83 PHMAP_DIRECTORY Map;
84 PHMAP_ENTRY BlockList; // PHMAP_TABLE SmallDir;
85 ULONG Guard;
86 HCELL_INDEX FreeDisplay[24]; //FREE_DISPLAY FreeDisplay[24];
87 ULONG FreeSummary;
88 LIST_ENTRY FreeBins;
89 } DUAL, *PDUAL;
90
91 typedef struct _HHIVE
92 {
93 ULONG Signature;
94 PGET_CELL_ROUTINE GetCellRoutine;
95 PRELEASE_CELL_ROUTINE ReleaseCellRoutine;
96 PALLOCATE_ROUTINE Allocate;
97 PFREE_ROUTINE Free;
98 PFILE_READ_ROUTINE FileRead;
99 PFILE_WRITE_ROUTINE FileWrite;
100 PFILE_SET_SIZE_ROUTINE FileSetSize;
101 PFILE_FLUSH_ROUTINE FileFlush;
102 PHBASE_BLOCK HiveHeader;
103 RTL_BITMAP DirtyVector;
104 ULONG DirtyCount;
105 ULONG DirtyAlloc;
106 ULONG BaseBlockAlloc;
107 ULONG Cluster;
108 BOOLEAN Flat;
109 BOOLEAN ReadOnly;
110 BOOLEAN Log;
111 BOOLEAN DirtyFlag;
112 ULONG HiveFlags;
113 ULONG LogSize;
114 ULONG RefreshCount;
115 ULONG StorageTypeCount;
116 ULONG Version;
117 DUAL Storage[HvMaxStorageType];
118 PVOID Opaque; // FIXME: KILL!
119 } HHIVE, *PHHIVE;
120
121 /*
122 * Public functions.
123 */
124
125 #define HV_OPERATION_CREATE_HIVE 0
126 #define HV_OPERATION_MEMORY 1
127 #define HV_OPERATION_MEMORY_INPLACE 3
128
129 NTSTATUS CMAPI
130 HvInitialize(
131 PHHIVE *RegistryHive,
132 ULONG Operation,
133 ULONG_PTR HiveData OPTIONAL,
134 SIZE_T Cluster, // HACK!!
135 PALLOCATE_ROUTINE Allocate,
136 PFREE_ROUTINE Free,
137 PFILE_READ_ROUTINE FileRead,
138 PFILE_WRITE_ROUTINE FileWrite,
139 PFILE_SET_SIZE_ROUTINE FileSetSize,
140 PFILE_FLUSH_ROUTINE FileFlush,
141 PVOID Opaque, // HACK!!
142 IN PUNICODE_STRING FileName);
143
144 VOID CMAPI
145 HvFree(
146 PHHIVE RegistryHive);
147
148 PVOID CMAPI
149 HvGetCell(
150 PHHIVE RegistryHive,
151 HCELL_INDEX CellOffset);
152
153 LONG CMAPI
154 HvGetCellSize(
155 PHHIVE RegistryHive,
156 PVOID Cell);
157
158 HCELL_INDEX CMAPI
159 HvAllocateCell(
160 PHHIVE RegistryHive,
161 ULONG Size,
162 HV_STORAGE_TYPE Storage);
163
164 HCELL_INDEX CMAPI
165 HvReallocateCell(
166 PHHIVE RegistryHive,
167 HCELL_INDEX CellOffset,
168 ULONG Size);
169
170 VOID CMAPI
171 HvFreeCell(
172 PHHIVE RegistryHive,
173 HCELL_INDEX CellOffset);
174
175 VOID CMAPI
176 HvMarkCellDirty(
177 PHHIVE RegistryHive,
178 HCELL_INDEX CellOffset);
179
180 BOOLEAN CMAPI
181 HvSyncHive(
182 PHHIVE RegistryHive);
183
184 BOOLEAN CMAPI
185 HvWriteHive(
186 PHHIVE RegistryHive);
187
188 BOOLEAN CMAPI
189 CmCreateRootNode(
190 PHHIVE Hive,
191 PCWSTR Name);
192
193 VOID CMAPI
194 CmPrepareHive(
195 PHHIVE RegistryHive);
196
197 /*
198 * Private functions.
199 */
200
201 PHBIN CMAPI
202 HvpAddBin(
203 PHHIVE RegistryHive,
204 ULONG Size,
205 HV_STORAGE_TYPE Storage);
206
207 NTSTATUS CMAPI
208 HvpCreateHiveFreeCellList(
209 PHHIVE Hive);
210
211 ULONG CMAPI
212 HvpHiveHeaderChecksum(
213 PHBASE_BLOCK HiveHeader);
214
215 #endif /* CMLIB_H */