Index: trunk/src/VBox/Main/xml/Settings.cpp
===================================================================
--- trunk/src/VBox/Main/xml/Settings.cpp	(revision 104783)
+++ trunk/src/VBox/Main/xml/Settings.cpp	(revision 105016)
@@ -3793,5 +3793,6 @@
 SharedFolder::SharedFolder() :
     fWritable(false),
-    fAutoMount(false)
+    fAutoMount(false),
+    enmSymlinkPolicy(SymlinkPolicy_None)
 {
 }
@@ -3809,5 +3810,6 @@
             && fWritable         == g.fWritable
             && fAutoMount        == g.fAutoMount
-            && strAutoMountPoint == g.strAutoMountPoint);
+            && strAutoMountPoint == g.strAutoMountPoint
+            && enmSymlinkPolicy  == g.enmSymlinkPolicy);
 }
 
@@ -5992,4 +5994,22 @@
                 pelmFolder->getAttributeValue("autoMount", sf.fAutoMount);
                 pelmFolder->getAttributeValue("autoMountPoint", sf.strAutoMountPoint);
+
+                Utf8Str strTemp;
+                if (pelmFolder->getAttributeValue("symlinkPolicy", strTemp))
+                {
+                    if (strTemp == "forbidden")
+                        sf.enmSymlinkPolicy = SymlinkPolicy_Forbidden;
+                    else if (strTemp == "subtree")
+                        sf.enmSymlinkPolicy = SymlinkPolicy_AllowedInShareSubtree;
+                    else if (strTemp == "relative")
+                        sf.enmSymlinkPolicy = SymlinkPolicy_AllowedToRelativeTargets;
+                    else if (strTemp == "any")
+                        sf.enmSymlinkPolicy = SymlinkPolicy_AllowedToAnyTarget;
+                    else
+                        throw ConfigFileError(this,
+                                              pelmHwChild,
+                                              N_("Invalid value '%s' in SharedFolder/@symlinkPolicy attribute"),
+                                              strTemp.c_str());
+                }
                 hw.llSharedFolders.push_back(sf);
             }
@@ -8309,4 +8329,16 @@
             if (sf.strAutoMountPoint.isNotEmpty())
                 pelmThis->setAttribute("autoMountPoint", sf.strAutoMountPoint);
+            const char *pcszSymlinkPolicy;
+            if (sf.enmSymlinkPolicy != SymlinkPolicy_None)
+            {
+                switch (sf.enmSymlinkPolicy)
+                {
+                    default: /*case SymlinkPolicy_Forbidden:*/    pcszSymlinkPolicy = "forbidden";  break;
+                    case SymlinkPolicy_AllowedInShareSubtree:     pcszSymlinkPolicy = "subtree";    break;
+                    case SymlinkPolicy_AllowedToRelativeTargets:  pcszSymlinkPolicy = "relative";   break;
+                    case SymlinkPolicy_AllowedToAnyTarget:        pcszSymlinkPolicy = "any";        break;
+                }
+                pelmThis->setAttribute("symlinkPolicy", pcszSymlinkPolicy);
+            }
         }
     }
@@ -9531,4 +9563,19 @@
             return;
         }
+
+        // VirtualBox 7.1 (settings v1.20) adds support for customizable control over Shared Folders symlink creation.
+        if (hardwareMachine.llSharedFolders.size())
+        {
+            for (SharedFoldersList::const_iterator it = hardwareMachine.llSharedFolders.begin();
+                 it != hardwareMachine.llSharedFolders.end();
+                 ++it)
+            {
+                if (it->enmSymlinkPolicy != SymlinkPolicy_None)
+                {
+                    m->sv = SettingsVersion_v1_20;
+                    return;
+                }
+            }
+        }
     }
 
Index: trunk/src/VBox/Main/xml/VirtualBox-settings.xsd
===================================================================
--- trunk/src/VBox/Main/xml/VirtualBox-settings.xsd	(revision 104783)
+++ trunk/src/VBox/Main/xml/VirtualBox-settings.xsd	(revision 105016)
@@ -301,4 +301,13 @@
     <xsd:enumeration value="VBoxSVGA"/>
     <xsd:enumeration value="QemuRamFB"/>
+  </xsd:restriction>
+</xsd:simpleType>
+
+<xsd:simpleType name="TSymlinkPolicy"> <!-- new since v1.20. -->
+  <xsd:restriction base="xsd:token">
+    <xsd:enumeration value="forbidden"/>
+    <xsd:enumeration value="subtree"/>
+    <xsd:enumeration value="relative"/>
+    <xsd:enumeration value="any"/>
   </xsd:restriction>
 </xsd:simpleType>
@@ -1305,4 +1314,5 @@
   <xsd:attribute name="autoMount" type="xsd:boolean" default="false"/>
   <xsd:attribute name="autoMountPoint" type="xsd:string"/>
+  <xsd:attribute name="symlinkPolicy" type="TSymlinkPolicy" default="forbidden"/> <!-- new since v1.20. -->
 </xsd:complexType>
 
