Index: trunk/src/VBox/Main/SharedFolderImpl.cpp
===================================================================
--- trunk/src/VBox/Main/SharedFolderImpl.cpp	(revision 15945)
+++ trunk/src/VBox/Main/SharedFolderImpl.cpp	(revision 15965)
@@ -104,6 +104,6 @@
     unconst (mMachine) = aMachine;
 
-    HRESULT rc = protectedInit (aMachine, aThat->mData.mName,
-                                aThat->mData.mHostPath, aThat->mData.mWritable);
+    HRESULT rc = protectedInit (aMachine, aThat->m.name,
+                                aThat->m.hostPath, aThat->m.writable);
 
     /* Confirm a successful initialization when it's the case */
@@ -222,7 +222,7 @@
     mParent->addDependentChild (this);
 
-    unconst (mData.mName) = aName;
-    unconst (mData.mHostPath) = hostPath;
-    mData.mWritable = aWritable;
+    unconst (m.name) = aName;
+    unconst (m.hostPath) = hostPath;
+    m.writable = aWritable;
 
     return S_OK;
@@ -263,5 +263,5 @@
 
     /* mName is constant during life time, no need to lock */
-    mData.mName.cloneTo (aName);
+    m.name.cloneTo (aName);
 
     return S_OK;
@@ -276,5 +276,5 @@
 
     /* mHostPath is constant during life time, no need to lock */
-    mData.mHostPath.cloneTo (aHostPath);
+    m.hostPath.cloneTo (aHostPath);
 
     return S_OK;
@@ -283,5 +283,5 @@
 STDMETHODIMP SharedFolder::COMGETTER(Accessible) (BOOL *aAccessible)
 {
-    CheckComArgOutPointerValid(aAccessible);
+    CheckComArgOutPointerValid (aAccessible);
 
     AutoCaller autoCaller (this);
@@ -291,5 +291,5 @@
 
     /* check whether the host path exists */
-    Utf8Str hostPath = Utf8Str (mData.mHostPath);
+    Utf8Str hostPath = Utf8Str (m.hostPath);
     char hostPathFull [RTPATH_MAX];
     int vrc = RTPathExists (hostPath) ? RTPathReal (hostPath, hostPathFull,
@@ -302,5 +302,10 @@
     }
 
-    LogWarningThisFunc (("'%s' is not accessible (%Rrc)\n", hostPath.raw(), vrc));
+    AutoWriteLock alock (this);
+
+    m.lastAccessError = BstrFmt (
+        tr ("'%s' is not accessible (%Rrc)"), hostPath.raw(), vrc);
+
+    LogWarningThisFunc (("m.lastAccessError=\"%ls\"\n", m.lastAccessError.raw()));
 
     *aAccessible = FALSE;
@@ -312,7 +317,22 @@
     CheckComArgOutPointerValid(aWritable);
 
-    *aWritable = mData.mWritable;
-
-    return S_OK;
-}
+    *aWritable = m.writable;
+
+    return S_OK;
+}
+
+STDMETHODIMP SharedFolder::COMGETTER(LastAccessError) (BSTR *aLastAccessError)
+{
+    CheckComArgOutPointerValid (aLastAccessError);
+
+    AutoCaller autoCaller (this);
+    CheckComRCReturnRC (autoCaller.rc());
+
+    AutoReadLock alock (this);
+
+    m.lastAccessError.cloneTo (aLastAccessError);
+
+    return S_OK;
+}
+
 /* vi: set tabstop=4 shiftwidth=4 expandtab: */
Index: trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 15945)
+++ trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 15965)
@@ -11046,5 +11046,5 @@
   <interface
      name="ISharedFolder" extends="$unknown"
-     uuid="8b0c5f70-9139-4f97-a421-64d5e9c335d5"
+     uuid="ef41869b-ef31-4b30-8e8f-95af35c0e378"
      wsmap="struct"
      >
@@ -11121,4 +11121,17 @@
         Whether the folder defined by the host path is writable or
         not.
+      </desc>
+    </attribute>
+
+    <attribute name="lastAccessError" type="wstring" readonly="yes">
+      <desc>
+        Text message that represents the result of the last accessibility
+        check.
+
+        Accessibility checks are performed each time the <link to="#accessible"/>
+        attribute is read. A @c null string is returned if the last
+        accessibility check was successful. A non-null string indicates a
+        failure and should normally describe a reason of the failure (for
+        example, a file read error).
       </desc>
     </attribute>
Index: trunk/src/VBox/Main/include/SharedFolderImpl.h
===================================================================
--- trunk/src/VBox/Main/include/SharedFolderImpl.h	(revision 15945)
+++ trunk/src/VBox/Main/include/SharedFolderImpl.h	(revision 15965)
@@ -43,7 +43,8 @@
         Data() {}
 
-        const Bstr mName;
-        const Bstr mHostPath;
-        BOOL       mWritable;
+        const Bstr name;
+        const Bstr hostPath;
+        BOOL       writable;
+        Bstr       lastAccessError;
     };
 
@@ -78,4 +79,5 @@
     STDMETHOD(COMGETTER(Accessible)) (BOOL *aAccessible);
     STDMETHOD(COMGETTER(Writable)) (BOOL *aWritable);
+    STDMETHOD(COMGETTER(LastAccessError)) (BSTR *aLastAccessError);
 
     // public methods for internal purposes only
@@ -85,7 +87,7 @@
     // (ensure there is a caller added before calling them!)
 
-    const Bstr &name() const { return mData.mName; }
-    const Bstr &hostPath() const { return mData.mHostPath; }
-    BOOL writable() const { return mData.mWritable; }
+    const Bstr &name() const { return m.name; }
+    const Bstr &hostPath() const { return m.hostPath; }
+    BOOL writable() const { return m.writable; }
 
     // for VirtualBoxSupportErrorInfoImpl
@@ -106,5 +108,5 @@
     const ComObjPtr <VirtualBox, ComWeakRef> mVirtualBox;
 
-    Data mData;
+    Data m;
 };
 
