This is hopefully the last fix needed to build LiveCD on Unix hosts again
[reactos.git] / reactos / lib / cmlib / cmdata.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_CMDATA_H
9 #define CMLIB_CMDATA_H
10
11 #define REG_INIT_BLOCK_LIST_SIZE 32
12 #define REG_INIT_HASH_TABLE_SIZE 3
13 #define REG_EXTEND_HASH_TABLE_SIZE 4
14 #define REG_VALUE_LIST_CELL_MULTIPLE 4
15
16 #define REG_KEY_CELL_ID 0x6b6e
17 #define REG_HASH_TABLE_CELL_ID 0x666c
18 #define REG_VALUE_CELL_ID 0x6b76
19 #define REG_SECURITY_CELL_ID 0x6b73
20
21 #ifndef _CM_
22
23 #ifdef CMLIB_HOST
24 #include <host/pshpack1.h>
25 #else
26 #include <pshpack1.h>
27 #endif
28
29 typedef struct _CM_VIEW_OF_FILE
30 {
31 LIST_ENTRY LRUViewList;
32 LIST_ENTRY PinViewList;
33 ULONG FileOffset;
34 ULONG Size;
35 PULONG ViewAddress;
36 PVOID Bcb;
37 ULONG UseCount;
38 } CM_VIEW_OF_FILE, *PCM_VIEW_OF_FILE;
39
40 typedef struct _CHILD_LIST
41 {
42 ULONG Count;
43 HCELL_INDEX List;
44 } CHILD_LIST, *PCHILD_LIST;
45
46 typedef struct _CM_KEY_NODE
47 {
48 /* Key cell identifier "kn" (0x6b6e) */
49 USHORT Id;
50
51 /* Flags */
52 USHORT Flags;
53
54 /* Time of last flush */
55 LARGE_INTEGER LastWriteTime;
56
57 ULONG Spare;
58
59 /* BlockAddress offset of parent key cell */
60 HCELL_INDEX Parent;
61
62 /* Count of sub keys for the key in this key cell (stable & volatile) */
63 ULONG SubKeyCounts[HvMaxStorageType];
64
65 /* BlockAddress offset of has table for FIXME: subkeys/values? (stable & volatile) */
66 HCELL_INDEX SubKeyLists[HvMaxStorageType];
67
68 CHILD_LIST ValueList;
69
70 /* BlockAddress offset of security cell */
71 HCELL_INDEX SecurityKeyOffset;
72
73 /* BlockAddress offset of registry key class */
74 HCELL_INDEX ClassNameOffset;
75
76 ULONG MaxNameLen;
77 ULONG MaxClassLen;
78 ULONG MaxValueNameLen;
79 ULONG MaxValueDataLen;
80 ULONG WorkVar;
81
82 /* Size in bytes of key name */
83 USHORT NameSize;
84
85 /* Size of class name in bytes */
86 USHORT ClassSize;
87
88 /* Name of key (not zero terminated) */
89 UCHAR Name[0];
90 } CM_KEY_NODE, *PCM_KEY_NODE;
91
92 /* CM_KEY_NODE.Flags constants */
93 #define REG_KEY_VOLATILE_CELL 0x01
94 #define REG_KEY_ROOT_CELL 0x0C
95 #define REG_KEY_LINK_CELL 0x10
96 #define REG_KEY_NAME_PACKED 0x20
97
98 /*
99 * Hash record
100 *
101 * HashValue:
102 * packed name: four letters of value's name
103 * otherwise: Zero!
104 */
105 typedef struct _HASH_RECORD
106 {
107 HCELL_INDEX KeyOffset;
108 ULONG HashValue;
109 } HASH_RECORD, *PHASH_RECORD;
110
111 typedef struct _HASH_TABLE_CELL
112 {
113 USHORT Id;
114 USHORT HashTableSize;
115 HASH_RECORD Table[0];
116 } HASH_TABLE_CELL, *PHASH_TABLE_CELL;
117
118 typedef struct _VALUE_LIST_CELL
119 {
120 HCELL_INDEX ValueOffset[0];
121 } VALUE_LIST_CELL, *PVALUE_LIST_CELL;
122
123 typedef struct _CM_KEY_VALUE
124 {
125 USHORT Id; // "kv"
126 USHORT NameSize; // length of Name
127 ULONG DataSize; // length of datas in the cell pointed by DataOffset
128 HCELL_INDEX DataOffset;// datas are here if high bit of DataSize is set
129 ULONG DataType;
130 USHORT Flags;
131 USHORT Unused1;
132 UCHAR Name[0]; /* warning : not zero terminated */
133 } CM_KEY_VALUE, *PCM_KEY_VALUE;
134
135 /* CM_KEY_VALUE.Flags constants */
136 #define REG_VALUE_NAME_PACKED 0x0001
137
138 /* CM_KEY_VALUE.DataSize mask constants */
139 #define REG_DATA_SIZE_MASK 0x7FFFFFFF
140 #define REG_DATA_IN_OFFSET 0x80000000
141
142 typedef struct _CM_KEY_SECURITY
143 {
144 USHORT Signature; // "sk"
145 USHORT Reserved;
146 HCELL_INDEX Flink;
147 HCELL_INDEX Blink;
148 ULONG ReferenceCount;
149 ULONG DescriptorLength;
150 //SECURITY_DESCRIPTOR_RELATIVE Descriptor;
151 UCHAR Data[0];
152 } CM_KEY_SECURITY, *PCM_KEY_SECURITY;
153
154 #ifdef CMLIB_HOST
155 #include <host/poppack.h>
156 #else
157 #include <poppack.h>
158 #endif
159
160 #endif
161
162 #endif /* CMLIB_CMDATA_H */