blob: d873a75a238ebfa3d114ac195797b3b799f45916 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
/* $Id: CFGMInternal.h $ */
/** @file
* CFGM - Internal header file.
*/
/*
* Copyright (C) 2006-2023 Oracle and/or its affiliates.
*
* This file is part of VirtualBox base platform packages, as
* available from https://www.virtualbox.org.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation, in version 3 of the
* License.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <https://www.gnu.org/licenses>.
*
* SPDX-License-Identifier: GPL-3.0-only
*/
#ifndef VMM_INCLUDED_SRC_include_CFGMInternal_h
#define VMM_INCLUDED_SRC_include_CFGMInternal_h
#ifndef RT_WITHOUT_PRAGMA_ONCE
# pragma once
#endif
#include <VBox/cdefs.h>
#include <VBox/types.h>
/** @defgroup grp_cfgm_int Internals.
* @ingroup grp_cfgm
* @{
*/
/**
* Configuration manager propertype value.
*/
typedef union CFGMVALUE
{
/** Integer value. */
struct CFGMVALUE_INTEGER
{
/** The integer represented as 64-bit unsigned. */
uint64_t u64;
} Integer;
/** String or password value. (UTF-8 of course) */
struct CFGMVALUE_STRING
{
/** Length of string. (In bytes, including the terminator.) */
size_t cb;
/** Pointer to the string. */
char *psz;
} String;
/** Byte string value. */
struct CFGMVALUE_BYTES
{
/** Length of byte string. (in bytes) */
size_t cb;
/** Pointer to the byte string. */
uint8_t *pau8;
} Bytes;
} CFGMVALUE;
/** Pointer to configuration manager property value. */
typedef CFGMVALUE *PCFGMVALUE;
/**
* Configuration manager tree node.
*/
typedef struct CFGMLEAF
{
/** Pointer to the next leaf. */
PCFGMLEAF pNext;
/** Pointer to the previous leaf. */
PCFGMLEAF pPrev;
/** Property type. */
CFGMVALUETYPE enmType;
/** Property value. */
CFGMVALUE Value;
/** Name length. (exclusive) */
size_t cchName;
/** Name. */
char szName[1];
} CFGMLEAF;
/**
* Configuration manager tree node.
*/
typedef struct CFGMNODE
{
/** Pointer to the next node (on this level). */
PCFGMNODE pNext;
/** Pointer to the previous node (on this level). */
PCFGMNODE pPrev;
/** Pointer Parent node. */
PCFGMNODE pParent;
/** Pointer to first child node. */
PCFGMNODE pFirstChild;
/** Pointer to first property leaf. */
PCFGMLEAF pFirstLeaf;
/** Pointer to the VM owning this node. */
PVM pVM;
/** The root of a 'restricted' subtree, i.e. the parent is
* invisible to non-trusted users.
*/
bool fRestrictedRoot;
/** Name length. (exclusive) */
size_t cchName;
/** Name. */
char szName[1];
} CFGMNODE;
/**
* CFGM VM Instance data.
* Changes to this must checked against the padding of the cfgm union in VM!
*/
typedef struct CFGM
{
/** Pointer to root node. */
R3PTRTYPE(PCFGMNODE) pRoot;
} CFGM;
/** @} */
#endif /* !VMM_INCLUDED_SRC_include_CFGMInternal_h */
|