summaryrefslogtreecommitdiffstats
path: root/src/VBox/VMM/include/CFGMInternal.h
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 */