Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/guestctrl/UIGuestControlConsole.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/guestctrl/UIGuestControlConsole.cpp	(revision 71134)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/guestctrl/UIGuestControlConsole.cpp	(revision 71135)
@@ -106,5 +106,5 @@
         case Qt::Key_Right:
         {
-            if (textCursor().positionInBlock() > m_strPrompt.length())
+            if (textCursor().positionInBlock() > m_strPrompt.length()-1)
                 QPlainTextEdit::keyPressEvent(pEvent);
             break;
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/guestctrl/UIGuestControlInterface.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/guestctrl/UIGuestControlInterface.cpp	(revision 71134)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/guestctrl/UIGuestControlInterface.cpp	(revision 71135)
@@ -28,6 +28,9 @@
 # include "CGuestProcess.h"
 # include "CGuestSession.h"
-
-#include <iprt/getopt.h>
+# include "CGuestFsObjInfo.h"
+
+/* Misc. includes: */
+# include <iprt/getopt.h>
+
 #endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
 
@@ -44,4 +47,10 @@
     m_strStatus.append(strError);  \
     return false;                  \
+    }
+
+#define RETURN_MESSAGE(strMessage)   \
+    {                                \
+    m_strStatus.append(strMessage);  \
+    return true;                     \
     }
 
@@ -108,5 +117,5 @@
     QString m_strExePath;
     QString m_strSessionName;
-    QString m_strDirectoryPath;
+    QString m_strPath;
     ULONG   m_uSessionId;
     QString m_strDomain;
@@ -134,4 +143,6 @@
                 "                                   [-P|--parents] [<guest directory>\n"
                 "                                   [--sessionid <id> |  [sessionname <name>]]\n"
+                "stat                            [common-options]\n"
+                "                                   [--sessionid <id> |  [sessionname <name>]]\n"
                 )
 {
@@ -176,5 +187,5 @@
                 if (!pathFound)
                 {
-                    commandData.m_strDirectoryPath = ValueUnion.psz;
+                    commandData.m_strPath = ValueUnion.psz;
                     pathFound = true;
                 }
@@ -188,5 +199,5 @@
         }
     }
-    if (commandData.m_strDirectoryPath.isEmpty())
+    if (commandData.m_strPath.isEmpty())
         RETURN_ERROR(QString(m_strHelp).append("Syntax error! No path is given\n"));
 
@@ -203,8 +214,82 @@
         creationFlags.push_back(KDirectoryCreateFlag_Parents);
 
-    guestSession.DirectoryCreate(commandData.m_strDirectoryPath, 0 /*ULONG aMode*/, creationFlags);
+    guestSession.DirectoryCreate(commandData.m_strPath, 0 /*ULONG aMode*/, creationFlags);
 
     //startProcess(commandData, guestSession);
     return true;
+}
+
+bool UIGuestControlInterface::handleStat(int argc, char** argv)
+{
+
+    CommandData commandData;
+
+    static const RTGETOPTDEF s_aOptions[] =
+    {
+        GCTLCMD_COMMON_OPTION_DEFS()
+        { "--sessionname",                  GCTLCMD_COMMON_OPT_SESSION_NAME,          RTGETOPT_REQ_STRING  },
+        { "--sessionid",                    GCTLCMD_COMMON_OPT_SESSION_ID,            RTGETOPT_REQ_UINT32  }
+    };
+
+    int ch;
+    bool pathFound = false;
+    RTGETOPTUNION ValueUnion;
+    RTGETOPTSTATE GetState;
+    RTGetOptInit(&GetState, argc, argv, s_aOptions, RT_ELEMENTS(s_aOptions), 1 /* ignore 0th element (command) */, 0);
+    while ((ch = RTGetOpt(&GetState, &ValueUnion)))
+    {
+        switch (ch)
+        {
+            HANDLE_COMMON_OPTION_DEFS()
+            case GCTLCMD_COMMON_OPT_SESSION_NAME:
+                commandData.m_bSessionNameGiven = true;
+                commandData.m_strSessionName  = ValueUnion.psz;
+                break;
+            case GCTLCMD_COMMON_OPT_SESSION_ID:
+                commandData.m_bSessionIdGiven = true;
+                commandData.m_uSessionId  = ValueUnion.i32;
+                break;
+            case 'P':
+                commandData.m_bCreateParentDirectories  = true;
+                break;
+            case VINF_GETOPT_NOT_OPTION:
+                if (!pathFound)
+                {
+                    commandData.m_strPath = ValueUnion.psz;
+                    pathFound = true;
+                }
+                /* Allow only a single NOT_OPTION */
+                else
+                    RETURN_ERROR(generateErrorString(ch, ValueUnion))
+
+                break;
+            default:
+                RETURN_ERROR(generateErrorString(ch, ValueUnion))
+        }
+    }
+    if (commandData.m_strPath.isEmpty())
+        RETURN_ERROR(QString(m_strHelp).append("Syntax error! No path is given\n"));
+
+    CGuestSession guestSession;
+    if (!findOrCreateSession(commandData, guestSession) || !guestSession.isOk())
+        return false;
+
+    bool isADirectory =
+        guestSession.DirectoryExists(commandData.m_strPath, false /*BOOL aFollowSymlinks*/);
+
+    bool isAFile = false;
+    if (!isADirectory)
+        isAFile = guestSession.FileExists(commandData.m_strPath, false /*BOOL aFollowSymlinks*/);
+
+    if (!isADirectory && !isAFile)
+        RETURN_ERROR("Specified object does not exist")
+
+    CGuestFsObjInfo fsObjectInfo = guestSession.FsObjQueryInfo(commandData.m_strPath, false /*BOOL aFollowSymlinks*/);
+    if (!fsObjectInfo.isOk())
+        RETURN_ERROR("Cannot get object info");
+
+    QString strObjectInfo = getFsObjInfoString(fsObjectInfo);
+
+    RETURN_MESSAGE(strObjectInfo);
 }
 
@@ -376,4 +461,5 @@
     m_subCommandHandlers.insert("help" , &UIGuestControlInterface::handleHelp);
     m_subCommandHandlers.insert("mkdir" , &UIGuestControlInterface::handleMkdir);
+    m_subCommandHandlers.insert("stat" , &UIGuestControlInterface::handleStat);
 }
 
@@ -483,2 +569,16 @@
     return true;
 }
+
+QString UIGuestControlInterface::getFsObjInfoString(const CGuestFsObjInfo &fsObjectInfo) const
+{
+    QString strInfo;
+    if (!fsObjectInfo.isOk())
+        return strInfo;
+    strInfo.append(QString("Name %1 \n").arg(fsObjectInfo.GetName()));
+    strInfo.append(QString("Size %1 \n").arg(fsObjectInfo.GetObjectSize()));
+    strInfo.append(QString("User %1 \n").arg(fsObjectInfo.GetUserName()));
+    strInfo.append(QString("BirthTime %1 \n").arg(fsObjectInfo.GetBirthTime()));
+    strInfo.append(QString("ChangeTime %1 ").arg(fsObjectInfo.GetChangeTime()));
+
+    return strInfo;
+}
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/guestctrl/UIGuestControlInterface.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/guestctrl/UIGuestControlInterface.h	(revision 71134)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/guestctrl/UIGuestControlInterface.h	(revision 71135)
@@ -75,4 +75,7 @@
     /* Handles the 'mkdir' session command to create guest directories */
     bool handleMkdir(int, char**);
+    bool handleStat(int, char**);
+
+    QString getFsObjInfoString(const CGuestFsObjInfo &fsObjectInfo) const;
 
     CGuest        m_comGuest;
