- most of the churn here is from code and headers imported from trunk.
[reactos.git] / reactos / lib / cmlib / cmlib.h
index f691c45..7e590c2 100644 (file)
-/*
- * 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