VirtualBox

source: vbox/trunk/src/VBox/Main/include/SharedFolderImpl.h@ 105087

Last change on this file since 105087 was 105087, checked in by vboxsync, 3 months ago

doc/manual,include/VBox,Frontends/VBoxManage,HostServices/SharedFolders,
Main/{include,SharedFolder,Console,Machine,VirtualBox.xidl}: Add a
new attribute to ISharedFolder for specifying a symbolic link creation
policy to restrict the source pathname when creating symbolic links
within a guest. The symbolic link policies are represented by a new
enumeration of type SymlinkPolicy_T which includes values for no
restrictions ('any'), symlink sources only within the subtree of the
share ('subtree'), symlink sources as any relative path ('relative'),
and no symlinks allowed ('forbidden'). The symlink policy can only be
applied to permanent shared folders at this stage. bugref:10619

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.5 KB
Line 
1/* $Id: SharedFolderImpl.h 105087 2024-07-01 23:27:59Z vboxsync $ */
2/** @file
3 * VirtualBox COM class implementation
4 */
5
6/*
7 * Copyright (C) 2006-2022 Oracle and/or its affiliates.
8 *
9 * This file is part of VirtualBox base platform packages, as
10 * available from https://www.virtualbox.org.
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation, in version 3 of the
15 * License.
16 *
17 * This program is distributed in the hope that it will be useful, but
18 * WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, see <https://www.gnu.org/licenses>.
24 *
25 * SPDX-License-Identifier: GPL-3.0-only
26 */
27
28#ifndef MAIN_INCLUDED_SharedFolderImpl_h
29#define MAIN_INCLUDED_SharedFolderImpl_h
30#ifndef RT_WITHOUT_PRAGMA_ONCE
31# pragma once
32#endif
33
34#include "SharedFolderWrap.h"
35#include <VBox/shflsvc.h>
36
37class Console;
38
39class ATL_NO_VTABLE SharedFolder :
40 public SharedFolderWrap
41{
42public:
43
44 DECLARE_COMMON_CLASS_METHODS (SharedFolder)
45
46 HRESULT FinalConstruct();
47 void FinalRelease();
48
49 // public initializer/uninitializer for internal purposes only
50 HRESULT init(Machine *aMachine, const com::Utf8Str &aName, const com::Utf8Str &aHostPath,
51 bool aWritable, bool aAutoMount, const com::Utf8Str &aAutoMountPoint, bool fFailOnError,
52 SymlinkPolicy_T enmSymlinkPolicy);
53 HRESULT initCopy(Machine *aMachine, SharedFolder *aThat);
54// HRESULT init(Console *aConsole, const com::Utf8Str &aName, const com::Utf8Str &aHostPath,
55// bool aWritable, bool aAutoMount, const com::Utf8Str &aAutoMountPoint, bool fFailOnError);
56// HRESULT init(VirtualBox *aVirtualBox, const Utf8Str &aName, const Utf8Str &aHostPath,
57// bool aWritable, const com::Utf8Str &aAutoMountPoint, bool aAutoMount, bool fFailOnError);
58 void uninit();
59
60 // public methods for internal purposes only
61 // (ensure there is a caller and a read lock before calling them!)
62
63 /**
64 * Public internal method. Returns the shared folder's name. Needs caller! Locking not necessary.
65 * @return
66 */
67 const Utf8Str &i_getName() const;
68
69 /**
70 * Public internal method. Returns the shared folder's host path. Needs caller! Locking not necessary.
71 * @return
72 */
73 const Utf8Str &i_getHostPath() const;
74
75 /**
76 * Public internal method. Returns true if the shared folder is writable. Needs caller and locking!
77 * @return
78 */
79 bool i_isWritable() const;
80
81 /**
82 * Public internal method. Returns true if the shared folder is auto-mounted. Needs caller and locking!
83 * @return
84 */
85 bool i_isAutoMounted() const;
86
87 /**
88 * Public internal method for getting the auto mount point.
89 */
90 const Utf8Str &i_getAutoMountPoint() const;
91
92 /**
93 * Public internal method for getting the symlink policy.
94 */
95 const SymlinkPolicy_T i_getSymlinkPolicy() const;
96
97protected:
98
99 HRESULT i_protectedInit(VirtualBoxBase *aParent,
100 const Utf8Str &aName,
101 const Utf8Str &aHostPath,
102 bool aWritable,
103 bool aAutoMount,
104 const com::Utf8Str &aAutoMountPoint,
105 bool fFailOnError,
106 SymlinkPolicy_T enmSymlinkPolicy);
107private:
108
109 // wrapped ISharedFolder properties.
110 HRESULT getName(com::Utf8Str &aName);
111 HRESULT getHostPath(com::Utf8Str &aHostPath);
112 HRESULT getAccessible(BOOL *aAccessible);
113 HRESULT getWritable(BOOL *aWritable);
114 HRESULT setWritable(BOOL aWritable);
115 HRESULT getAutoMount(BOOL *aAutoMount);
116 HRESULT setAutoMount(BOOL aAutoMount);
117 HRESULT getAutoMountPoint(com::Utf8Str &aAutoMountPoint);
118 HRESULT setAutoMountPoint(com::Utf8Str const &aAutoMountPoint);
119 HRESULT getLastAccessError(com::Utf8Str &aLastAccessError);
120 HRESULT getSymlinkPolicy(SymlinkPolicy_T *aSymlinkPolicy);
121 HRESULT setSymlinkPolicy(SymlinkPolicy_T aSymlinkPolicy);
122
123 VirtualBoxBase * const mParent;
124
125 /* weak parents (only one of them is not null) */
126 Machine * const mMachine;
127 VirtualBox * const mVirtualBox;
128
129 struct Data; // opaque data struct, defined in MachineSharedFolderImpl.cpp
130 Data *m;
131};
132
133#endif /* !MAIN_INCLUDED_SharedFolderImpl_h */
134/* vi: set tabstop=4 shiftwidth=4 expandtab: */
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette