-/*
- * PROJECT: registry manipulation library
- * LICENSE: GPL - See COPYING in the top level directory
- * COPYRIGHT: Copyright 2005 Filip Navara <navaraf@reactos.org>
- * Copyright 2001 - 2005 Eric Kohl
- */
-
-#ifndef CMLIB_H
-#define CMLIB_H
-
-#define WIN32_NO_STATUS
-#include <ntddk.h>
-#include "hivedata.h"
-#include "cmdata.h"
-
-#ifndef ROUND_UP
-#define ROUND_UP(a,b) ((((a)+(b)-1)/(b))*(b))
-#define ROUND_DOWN(a,b) (((a)/(b))*(b))
-#endif
-
-#define CMAPI NTAPI
-
-struct _HHIVE;
-
-typedef PVOID (CMAPI *PGET_CELL_ROUTINE)(
- struct _HHIVE *Hive,
- HCELL_INDEX Cell);
-
-typedef VOID (CMAPI *PRELEASE_CELL_ROUTINE)(
- struct _HHIVE *Hive,
- HCELL_INDEX Cell);
-
-typedef PVOID (CMAPI *PALLOCATE_ROUTINE)(
- SIZE_T Size,
- BOOLEAN Paged);
-
-typedef VOID (CMAPI *PFREE_ROUTINE)(
- PVOID Ptr);
-
-typedef BOOLEAN (CMAPI *PFILE_READ_ROUTINE)(
- struct _HHIVE *RegistryHive,
- ULONG FileType,
- ULONGLONG FileOffset,
- PVOID Buffer,
- SIZE_T BufferLength);
-
-typedef BOOLEAN (CMAPI *PFILE_WRITE_ROUTINE)(
- struct _HHIVE *RegistryHive,
- ULONG FileType,
- ULONGLONG FileOffset,
- PVOID Buffer,
- SIZE_T BufferLength);
-
-typedef BOOLEAN (CMAPI *PFILE_SET_SIZE_ROUTINE)(
- struct _HHIVE *RegistryHive,
- ULONG FileType,
- ULONGLONG FileSize);
-
-typedef BOOLEAN (CMAPI *PFILE_FLUSH_ROUTINE)(
- struct _HHIVE *RegistryHive,
- ULONG FileType);
-
-typedef struct _HMAP_ENTRY
-{
- ULONG_PTR Bin;
- ULONG_PTR Block;
- struct _CM_VIEW_OF_FILE *CmHive;
- ULONG MemAlloc;
-} HMAP_ENTRY, *PHMAP_ENTRY;
-
-typedef struct _HMAP_TABLE
-{
- HMAP_ENTRY Table[512];
-} HMAP_TABLE, *PHMAP_TABLE;
-
-typedef struct _HMAP_DIRECTORY
-{
- PHMAP_TABLE Directory[2048];
-} HMAP_DIRECTORY, *PHMAP_DIRECTORY;
-
-typedef struct _DUAL
-{
- ULONG Length;
- PHMAP_DIRECTORY Map;
- PHMAP_ENTRY BlockList; // PHMAP_TABLE SmallDir;
- ULONG Guard;
- HCELL_INDEX FreeDisplay[24]; //FREE_DISPLAY FreeDisplay[24];
- ULONG FreeSummary;
- LIST_ENTRY FreeBins;
-} DUAL, *PDUAL;
-
-typedef struct _HHIVE
-{
- ULONG Signature;
- PGET_CELL_ROUTINE GetCellRoutine;
- PRELEASE_CELL_ROUTINE ReleaseCellRoutine;
- PALLOCATE_ROUTINE Allocate;
- PFREE_ROUTINE Free;
- PFILE_READ_ROUTINE FileRead;
- PFILE_WRITE_ROUTINE FileWrite;
- PFILE_SET_SIZE_ROUTINE FileSetSize;
- PFILE_FLUSH_ROUTINE FileFlush;
- PHBASE_BLOCK HiveHeader;
- RTL_BITMAP DirtyVector;
- ULONG DirtyCount;
- ULONG DirtyAlloc;
- ULONG BaseBlockAlloc;
- ULONG Cluster;
- BOOLEAN Flat;
- BOOLEAN ReadOnly;
- BOOLEAN Log;
- BOOLEAN DirtyFlag;
- ULONG HvBinHeadersUse;
- ULONG HvFreeCellsUse;
- ULONG HvUsedcellsUse;
- ULONG CmUsedCellsUse;
- ULONG HiveFlags;
- ULONG LogSize;
- ULONG RefreshCount;
- ULONG StorageTypeCount;
- ULONG Version;
- DUAL Storage[HvMaxStorageType];
-} HHIVE, *PHHIVE;
-
-#ifndef _CM_
-typedef struct _EREGISTRY_HIVE
-{
- HHIVE Hive;
- LIST_ENTRY HiveList;
- UNICODE_STRING HiveFileName;
- UNICODE_STRING LogFileName;
- PCM_KEY_SECURITY RootSecurityCell;
- ULONG Flags;
- HANDLE HiveHandle;
- HANDLE LogHandle;
-} EREGISTRY_HIVE, *PEREGISTRY_HIVE;
-#endif
-
-/*
- * Public functions.
- */
-
-#define HV_OPERATION_CREATE_HIVE 0
-#define HV_OPERATION_MEMORY 1
-#define HV_OPERATION_MEMORY_INPLACE 3
-
-NTSTATUS CMAPI
-HvInitialize(
- PHHIVE RegistryHive,
- ULONG Operation,
- ULONG_PTR HiveData OPTIONAL,
- ULONG Cluster OPTIONAL,
- ULONG Flags,
- ULONG FileType,
- PALLOCATE_ROUTINE Allocate,
- PFREE_ROUTINE Free,
- PFILE_READ_ROUTINE FileRead,
- PFILE_WRITE_ROUTINE FileWrite,
- PFILE_SET_SIZE_ROUTINE FileSetSize,
- PFILE_FLUSH_ROUTINE FileFlush,
- IN PUNICODE_STRING FileName);
-
-VOID CMAPI
-HvFree(
- PHHIVE RegistryHive);
-
-PVOID CMAPI
-HvGetCell(
- PHHIVE RegistryHive,
- HCELL_INDEX CellOffset);
-
-#define HvReleaseCell(h, c) \
- if (h->ReleaseCellRoutine) h->ReleaseCellRoutine(h, c)
-
-LONG CMAPI
-HvGetCellSize(
- PHHIVE RegistryHive,
- PVOID Cell);
-
-HCELL_INDEX CMAPI
-HvAllocateCell(
- PHHIVE RegistryHive,
- SIZE_T Size,
- HV_STORAGE_TYPE Storage);
-
-HCELL_INDEX CMAPI
-HvReallocateCell(
- PHHIVE RegistryHive,
- HCELL_INDEX CellOffset,
- ULONG Size);
-
-VOID CMAPI
-HvFreeCell(
- PHHIVE RegistryHive,
- HCELL_INDEX CellOffset);
-
-VOID CMAPI
-HvMarkCellDirty(
- PHHIVE RegistryHive,
- HCELL_INDEX CellOffset);
-
-BOOLEAN CMAPI
-HvSyncHive(
- PHHIVE RegistryHive);
-
-BOOLEAN CMAPI
-HvWriteHive(
- PHHIVE RegistryHive);
-
-BOOLEAN CMAPI
-CmCreateRootNode(
- PHHIVE Hive,
- PCWSTR Name);
-
-VOID CMAPI
-CmPrepareHive(
- PHHIVE RegistryHive);
-
-/*
- * Private functions.
- */
-
-PHBIN CMAPI
-HvpAddBin(
- PHHIVE RegistryHive,
- ULONG Size,
- HV_STORAGE_TYPE Storage);
-
-NTSTATUS CMAPI
-HvpCreateHiveFreeCellList(
- PHHIVE Hive);
-
-ULONG CMAPI
-HvpHiveHeaderChecksum(
- PHBASE_BLOCK HiveHeader);
-
-#endif /* CMLIB_H */
+/*\r
+ * PROJECT: registry manipulation library\r
+ * LICENSE: GPL - See COPYING in the top level directory\r
+ * COPYRIGHT: Copyright 2005 Filip Navara <navaraf@reactos.org>\r
+ * Copyright 2001 - 2005 Eric Kohl\r
+ */\r
+\r
+#ifndef CMLIB_H\r
+#define CMLIB_H\r
+\r
+#define WIN32_NO_STATUS\r
+#include <ntddk.h>\r
+#include "hivedata.h"\r
+#include "cmdata.h"\r
+\r
+#ifndef ROUND_UP\r
+#define ROUND_UP(a,b) ((((a)+(b)-1)/(b))*(b))\r
+#define ROUND_DOWN(a,b) (((a)/(b))*(b))\r
+#endif\r
+\r
+#define CMAPI NTAPI\r
+\r
+struct _HHIVE;\r
+\r
+typedef PVOID (CMAPI *PGET_CELL_ROUTINE)(\r
+ struct _HHIVE *Hive,\r
+ HCELL_INDEX Cell);\r
+\r
+typedef VOID (CMAPI *PRELEASE_CELL_ROUTINE)(\r
+ struct _HHIVE *Hive,\r
+ HCELL_INDEX Cell);\r
+\r
+typedef PVOID (CMAPI *PALLOCATE_ROUTINE)(\r
+ SIZE_T Size,\r
+ BOOLEAN Paged);\r
+\r
+typedef VOID (CMAPI *PFREE_ROUTINE)(\r
+ PVOID Ptr);\r
+\r
+typedef BOOLEAN (CMAPI *PFILE_READ_ROUTINE)(\r
+ struct _HHIVE *RegistryHive,\r
+ ULONG FileType,\r
+ ULONGLONG FileOffset,\r
+ PVOID Buffer,\r
+ SIZE_T BufferLength);\r
+\r
+typedef BOOLEAN (CMAPI *PFILE_WRITE_ROUTINE)(\r
+ struct _HHIVE *RegistryHive,\r
+ ULONG FileType,\r
+ ULONGLONG FileOffset,\r
+ PVOID Buffer,\r
+ SIZE_T BufferLength);\r
+\r
+typedef BOOLEAN (CMAPI *PFILE_SET_SIZE_ROUTINE)(\r
+ struct _HHIVE *RegistryHive,\r
+ ULONG FileType,\r
+ ULONGLONG FileSize);\r
+\r
+typedef BOOLEAN (CMAPI *PFILE_FLUSH_ROUTINE)(\r
+ struct _HHIVE *RegistryHive,\r
+ ULONG FileType);\r
+\r
+typedef struct _HMAP_ENTRY\r
+{\r
+ ULONG_PTR Bin;\r
+ ULONG_PTR Block;\r
+ struct _CM_VIEW_OF_FILE *CmHive;\r
+ ULONG MemAlloc;\r
+} HMAP_ENTRY, *PHMAP_ENTRY;\r
+\r
+typedef struct _HMAP_TABLE\r
+{\r
+ HMAP_ENTRY Table[512];\r
+} HMAP_TABLE, *PHMAP_TABLE;\r
+\r
+typedef struct _HMAP_DIRECTORY\r
+{\r
+ PHMAP_TABLE Directory[2048];\r
+} HMAP_DIRECTORY, *PHMAP_DIRECTORY;\r
+\r
+typedef struct _DUAL\r
+{\r
+ ULONG Length;\r
+ PHMAP_DIRECTORY Map;\r
+ PHMAP_ENTRY BlockList; // PHMAP_TABLE SmallDir;\r
+ ULONG Guard;\r
+ HCELL_INDEX FreeDisplay[24]; //FREE_DISPLAY FreeDisplay[24];\r
+ ULONG FreeSummary;\r
+ LIST_ENTRY FreeBins;\r
+} DUAL, *PDUAL;\r
+\r
+typedef struct _HHIVE\r
+{\r
+ ULONG Signature;\r
+ PGET_CELL_ROUTINE GetCellRoutine;\r
+ PRELEASE_CELL_ROUTINE ReleaseCellRoutine;\r
+ PALLOCATE_ROUTINE Allocate;\r
+ PFREE_ROUTINE Free;\r
+ PFILE_READ_ROUTINE FileRead;\r
+ PFILE_WRITE_ROUTINE FileWrite;\r
+ PFILE_SET_SIZE_ROUTINE FileSetSize;\r
+ PFILE_FLUSH_ROUTINE FileFlush;\r
+ PHBASE_BLOCK HiveHeader;\r
+ RTL_BITMAP DirtyVector;\r
+ ULONG DirtyCount;\r
+ ULONG DirtyAlloc;\r
+ ULONG BaseBlockAlloc;\r
+ ULONG Cluster;\r
+ BOOLEAN Flat;\r
+ BOOLEAN ReadOnly;\r
+ BOOLEAN Log;\r
+ BOOLEAN DirtyFlag;\r
+ ULONG HvBinHeadersUse;\r
+ ULONG HvFreeCellsUse;\r
+ ULONG HvUsedcellsUse;\r
+ ULONG CmUsedCellsUse;\r
+ ULONG HiveFlags;\r
+ ULONG LogSize;\r
+ ULONG RefreshCount;\r
+ ULONG StorageTypeCount;\r
+ ULONG Version;\r
+ DUAL Storage[HvMaxStorageType];\r
+} HHIVE, *PHHIVE;\r
+\r
+#ifndef _CM_\r
+typedef struct _EREGISTRY_HIVE\r
+{\r
+ HHIVE Hive;\r
+ LIST_ENTRY HiveList;\r
+ UNICODE_STRING HiveFileName;\r
+ UNICODE_STRING LogFileName;\r
+ PCM_KEY_SECURITY RootSecurityCell;\r
+ ULONG Flags;\r
+ HANDLE HiveHandle;\r
+ HANDLE LogHandle;\r
+} EREGISTRY_HIVE, *PEREGISTRY_HIVE;\r
+#endif\r
+\r
+/*\r
+ * Public functions.\r
+ */\r
+\r
+#define HV_OPERATION_CREATE_HIVE 0\r
+#define HV_OPERATION_MEMORY 1\r
+#define HV_OPERATION_MEMORY_INPLACE 3\r
+\r
+NTSTATUS CMAPI\r
+HvInitialize(\r
+ PHHIVE RegistryHive,\r
+ ULONG Operation,\r
+ ULONG_PTR HiveData OPTIONAL,\r
+ ULONG Cluster OPTIONAL,\r
+ ULONG Flags,\r
+ ULONG FileType,\r
+ PALLOCATE_ROUTINE Allocate,\r
+ PFREE_ROUTINE Free,\r
+ PFILE_READ_ROUTINE FileRead,\r
+ PFILE_WRITE_ROUTINE FileWrite,\r
+ PFILE_SET_SIZE_ROUTINE FileSetSize,\r
+ PFILE_FLUSH_ROUTINE FileFlush,\r
+ IN PUNICODE_STRING FileName);\r
+\r
+VOID CMAPI \r
+HvFree(\r
+ PHHIVE RegistryHive);\r
+\r
+PVOID CMAPI\r
+HvGetCell(\r
+ PHHIVE RegistryHive,\r
+ HCELL_INDEX CellOffset);\r
+\r
+#define HvReleaseCell(h, c) \\r
+ if (h->ReleaseCellRoutine) h->ReleaseCellRoutine(h, c)\r
+\r
+LONG CMAPI\r
+HvGetCellSize(\r
+ PHHIVE RegistryHive,\r
+ PVOID Cell);\r
+\r
+HCELL_INDEX CMAPI\r
+HvAllocateCell(\r
+ PHHIVE RegistryHive,\r
+ SIZE_T Size,\r
+ HV_STORAGE_TYPE Storage);\r
+\r
+HCELL_INDEX CMAPI\r
+HvReallocateCell(\r
+ PHHIVE RegistryHive,\r
+ HCELL_INDEX CellOffset,\r
+ ULONG Size);\r
+\r
+VOID CMAPI\r
+HvFreeCell(\r
+ PHHIVE RegistryHive,\r
+ HCELL_INDEX CellOffset);\r
+\r
+VOID CMAPI\r
+HvMarkCellDirty(\r
+ PHHIVE RegistryHive,\r
+ HCELL_INDEX CellOffset);\r
+\r
+BOOLEAN CMAPI\r
+HvSyncHive(\r
+ PHHIVE RegistryHive);\r
+\r
+BOOLEAN CMAPI\r
+HvWriteHive(\r
+ PHHIVE RegistryHive);\r
+\r
+BOOLEAN CMAPI\r
+CmCreateRootNode(\r
+ PHHIVE Hive,\r
+ PCWSTR Name);\r
+\r
+VOID CMAPI\r
+CmPrepareHive(\r
+ PHHIVE RegistryHive);\r
+\r
+/*\r
+ * Private functions.\r
+ */\r
+\r
+PHBIN CMAPI\r
+HvpAddBin(\r
+ PHHIVE RegistryHive,\r
+ ULONG Size,\r
+ HV_STORAGE_TYPE Storage);\r
+\r
+NTSTATUS CMAPI\r
+HvpCreateHiveFreeCellList(\r
+ PHHIVE Hive);\r
+\r
+ULONG CMAPI\r
+HvpHiveHeaderChecksum(\r
+ PHBASE_BLOCK HiveHeader);\r
+\r
+#endif /* CMLIB_H */\r