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
12 #include <host/typedefs.h>
16 // Definitions copied from <ntstatus.h>
17 // We only want to include host headers, so we define them manually
18 #define STATUS_SUCCESS ((NTSTATUS)0x00000000)
19 #define STATUS_NOT_IMPLEMENTED ((NTSTATUS)0xC0000002)
20 #define STATUS_NO_MEMORY ((NTSTATUS)0xC0000017)
21 #define STATUS_INSUFFICIENT_RESOURCES ((NTSTATUS)0xC000009A)
22 #define STATUS_REGISTRY_CORRUPT ((NTSTATUS)0xC000014C)
23 #define STATUS_NOT_REGISTRY_FILE ((NTSTATUS)0xC000015C)
24 #define STATUS_REGISTRY_RECOVERED ((NTSTATUS)0x40000009)
28 #ifndef _TYPEDEFS_HOST_H
31 #define REG_OPTION_VOLATILE 1
32 #define OBJ_CASE_INSENSITIVE 0x00000040L
33 #define USHORT_MAX USHRT_MAX
37 OUT PLARGE_INTEGER CurrentTime
);
41 IN PRTL_BITMAP BitMapHeader
,
42 IN PULONG BitMapBuffer
,
43 IN ULONG SizeOfBitMap
);
47 IN PRTL_BITMAP BitMapHeader
,
48 IN ULONG NumberToFind
,
53 IN PRTL_BITMAP BitMapHeader
,
54 IN ULONG StartingIndex
,
55 IN ULONG NumberToSet
);
59 IN PRTL_BITMAP BitMapHeader
);
61 #define RtlCheckBit(BMH,BP) (((((PLONG)(BMH)->Buffer)[(BP) / 32]) >> ((BP) % 32)) & 0x1)
70 #define ROUND_UP(a,b) ((((a)+(b)-1)/(b))*(b))
71 #define ROUND_DOWN(a,b) (((a)/(b))*(b))
78 typedef PVOID (CMAPI
*PGET_CELL_ROUTINE
)(
82 typedef VOID (CMAPI
*PRELEASE_CELL_ROUTINE
)(
86 typedef PVOID (CMAPI
*PALLOCATE_ROUTINE
)(
90 typedef VOID (CMAPI
*PFREE_ROUTINE
)(
93 typedef BOOLEAN (CMAPI
*PFILE_READ_ROUTINE
)(
94 struct _HHIVE
*RegistryHive
,
100 typedef BOOLEAN (CMAPI
*PFILE_WRITE_ROUTINE
)(
101 struct _HHIVE
*RegistryHive
,
103 ULONGLONG FileOffset
,
105 SIZE_T BufferLength
);
107 typedef BOOLEAN (CMAPI
*PFILE_SET_SIZE_ROUTINE
)(
108 struct _HHIVE
*RegistryHive
,
112 typedef BOOLEAN (CMAPI
*PFILE_FLUSH_ROUTINE
)(
113 struct _HHIVE
*RegistryHive
,
116 typedef struct _HMAP_ENTRY
120 struct _CM_VIEW_OF_FILE
*CmHive
;
122 } HMAP_ENTRY
, *PHMAP_ENTRY
;
124 typedef struct _HMAP_TABLE
126 HMAP_ENTRY Table
[512];
127 } HMAP_TABLE
, *PHMAP_TABLE
;
129 typedef struct _HMAP_DIRECTORY
131 PHMAP_TABLE Directory
[2048];
132 } HMAP_DIRECTORY
, *PHMAP_DIRECTORY
;
138 PHMAP_ENTRY BlockList
; // PHMAP_TABLE SmallDir;
140 HCELL_INDEX FreeDisplay
[24]; //FREE_DISPLAY FreeDisplay[24];
145 typedef struct _HHIVE
148 PGET_CELL_ROUTINE GetCellRoutine
;
149 PRELEASE_CELL_ROUTINE ReleaseCellRoutine
;
150 PALLOCATE_ROUTINE Allocate
;
152 PFILE_READ_ROUTINE FileRead
;
153 PFILE_WRITE_ROUTINE FileWrite
;
154 PFILE_SET_SIZE_ROUTINE FileSetSize
;
155 PFILE_FLUSH_ROUTINE FileFlush
;
156 PHBASE_BLOCK HiveHeader
;
157 RTL_BITMAP DirtyVector
;
160 ULONG BaseBlockAlloc
;
166 ULONG HvBinHeadersUse
;
167 ULONG HvFreeCellsUse
;
168 ULONG HvUsedcellsUse
;
169 ULONG CmUsedCellsUse
;
173 ULONG StorageTypeCount
;
175 DUAL Storage
[HvMaxStorageType
];
179 typedef struct _EREGISTRY_HIVE
183 UNICODE_STRING HiveFileName
;
184 UNICODE_STRING LogFileName
;
185 PCM_KEY_SECURITY RootSecurityCell
;
189 } EREGISTRY_HIVE
, *PEREGISTRY_HIVE
;
196 #define HV_OPERATION_CREATE_HIVE 0
197 #define HV_OPERATION_MEMORY 1
198 #define HV_OPERATION_MEMORY_INPLACE 3
206 ULONG_PTR HiveData OPTIONAL
,
207 ULONG Cluster OPTIONAL
,
208 PALLOCATE_ROUTINE Allocate
,
210 PFILE_READ_ROUTINE FileRead
,
211 PFILE_WRITE_ROUTINE FileWrite
,
212 PFILE_SET_SIZE_ROUTINE FileSetSize
,
213 PFILE_FLUSH_ROUTINE FileFlush
,
214 IN PUNICODE_STRING FileName
);
218 PHHIVE RegistryHive
);
223 HCELL_INDEX CellOffset
);
225 #define HvReleaseCell(h, c) \
226 if (h->ReleaseCellRoutine) h->ReleaseCellRoutine(h, c)
237 HV_STORAGE_TYPE Storage
);
241 IN PHHIVE RegistryHive
,
242 IN HCELL_INDEX CellIndex
248 HCELL_INDEX CellOffset
,
254 HCELL_INDEX CellOffset
);
259 HCELL_INDEX CellOffset
);
269 PHHIVE RegistryHive
);
273 PHHIVE RegistryHive
);
282 PHHIVE RegistryHive
);
292 HV_STORAGE_TYPE Storage
);
295 HvpCreateHiveFreeCellList(
299 HvpHiveHeaderChecksum(
300 PHBASE_BLOCK HiveHeader
);