Index: trunk/src/VBox/Main/Makefile.kmk
===================================================================
--- trunk/src/VBox/Main/Makefile.kmk	(revision 42083)
+++ trunk/src/VBox/Main/Makefile.kmk	(revision 42084)
@@ -621,4 +621,9 @@
 	src-client/DisplayImpl.cpp \
 	src-client/GuestImpl.cpp \
+	src-client/GuestDirectoryImpl.cpp \
+	src-client/GuestFileImpl.cpp \
+	src-client/GuestFsObjInfoImpl.cpp \
+	src-client/GuestProcessImpl.cpp \
+	src-client/GuestSessionImpl.cpp \
 	src-client/GuestCtrlImpl.cpp \
 	src-client/GuestCtrlIO.cpp \
Index: trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 42083)
+++ trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 42084)
@@ -8668,4 +8668,20 @@
     </const>
   </enum>
+  
+  <enum
+    name="FileSeekType"
+    uuid="1b73f4f3-3515-4073-a506-76878d9e2541"
+    >
+    <desc>
+      TODO
+    </desc>
+
+    <const name="Set"                     value="0">
+      <desc>TODO</desc>
+    </const>    
+    <const name="Current"                 value="1">
+      <desc>TODO</desc>
+    </const>    
+  </enum>
 
   <enum
@@ -8699,4 +8715,63 @@
     </const>
   </enum>
+  
+  <enum
+    name="ProcessWaitForFlag"
+    uuid="858a99aa-4b3c-4863-9726-87386671f408"
+    >
+    <desc>
+      TODO
+    </desc>
+
+    <const name="None"                    value="0">
+      <desc>TODO</desc>
+    </const>    
+    <const name="Exit"                    value="1">
+      <desc>TODO</desc>
+    </const>    
+    <const name="StdIn"                   value="2">
+      <desc>TODO</desc>
+    </const>    
+    <const name="StdOut"                  value="4">
+      <desc>TODO</desc>
+    </const>    
+    <const name="StdErr"                  value="8">
+      <desc>TODO</desc>
+    </const>    
+    <const name="Start"                   value="16">
+      <desc>TODO</desc>
+    </const>    
+    <const name="Status"                  value="32">
+      <desc>TODO</desc>
+    </const>    
+  </enum>
+  
+  <enum
+    name="ProcessWaitReason"
+    uuid="3fcbabf5-27e0-407a-9881-421b36c23978"
+    >
+    <desc>
+      TODO
+    </desc>
+
+    <const name="Status"                 value="0">
+      <desc>TODO</desc>
+    </const>    
+    <const name="Error"                  value="10">
+      <desc>TODO</desc>
+    </const>    
+    <const name="Timeout"                value="50">
+      <desc>TODO</desc>
+    </const>    
+    <const name="StdIn"                  value="100">
+      <desc>TODO</desc>
+    </const>    
+    <const name="StdOut"                 value="150">
+      <desc>TODO</desc>
+    </const>    
+    <const name="StdErr"                 value="200">
+      <desc>TODO</desc>
+    </const>    
+  </enum>
 
   <enum
@@ -8736,4 +8811,205 @@
     </const>
   </enum>
+  
+  <enum
+    name="DirectoryRemoveRecFlag"
+    uuid="455aabf0-7692-48f6-9061-f21579b65769"
+    >
+    <desc>
+      TODO
+    </desc>
+
+    <const name="None"                    value="0">
+      <desc>No flag set.</desc>
+    </const>    
+    <const name="ContentAndDir"           value="1">
+      <desc>TODO</desc>
+    </const>    
+    <const name="ContentOnly"             value="2">
+      <desc>TODO</desc>
+    </const>    
+  </enum>
+  
+  <enum
+    name="PathRenameFlag"
+    uuid="f3baa09f-c758-453d-b91c-c7787d76351d"
+    >
+    <desc>
+      TODO
+    </desc>
+
+    <const name="None"                    value="0">
+      <desc>No flag set.</desc>
+    </const>    
+    <const name="NoReplace"               value="1">
+      <desc>TODO</desc>
+    </const>  
+    <const name="Replace"                 value="2">
+      <desc>TODO</desc>
+    </const>  
+    <const name="NoSymlinks"              value="4">
+      <desc>TODO</desc>
+    </const>  
+  </enum>
+  
+  <enum
+    name="ProcessCreateFlag"
+    uuid="1497c881-70b4-42dd-8b42-2ad76f004e3f"
+    >
+    <desc>
+      Guest process execution flags.
+    </desc>
+
+    <const name="None"                    value="0">
+      <desc>No flag set.</desc>
+    </const>
+    <const name="WaitForProcessStartOnly" value="1">
+      <desc>Only use the specified timeout value to wait for starting the guest process - the guest
+        process itself then uses an infinite timeout.</desc>
+    </const>
+    <const name="IgnoreOrphanedProcesses" value="2">
+      <desc>Do not report an error when executed processes are still alive when VBoxService or the guest OS is shutting down.</desc>
+    </const>
+    <const name="Hidden"                  value="4">
+      <desc>Do not show the started process according to the guest OS guidelines.</desc>
+    </const>
+    <const name="NoProfile"               value="8">
+      <desc>Do not use the user's profile data when exeuting a process. Only available for Windows guests.</desc>
+    </const>
+  </enum>
+  
+  <enum
+    name="ProcessPriority"
+    uuid="ee8cac50-e232-49fe-806b-d1214d9c2e49"
+    >
+    <desc>
+      TODO
+    </desc>
+
+    <const name="Invalid"                 value="0">
+      <desc>TODO</desc>
+    </const>    
+    <const name="Default"                 value="1">
+      <desc>TODO</desc>
+    </const>    
+  </enum>
+  
+  <enum
+    name="SymlinkType"
+    uuid="37794668-f8f1-4714-98a5-6f8fa2ed0118"
+    >
+    <desc>
+      TODO
+    </desc>
+
+    <const name="Unknown"                 value="0">
+      <desc>TODO</desc>
+    </const>    
+    <const name="Directory"               value="1">
+      <desc>TODO</desc>
+    </const>    
+    <const name="File"                    value="2">
+      <desc>TODO</desc>
+    </const>    
+  </enum>
+  
+  <enum
+    name="SymlinkReadFlag"
+    uuid="b7fe2b9d-790e-4b25-8adf-1ca33026931f"
+    >
+    <desc>
+      TODO
+    </desc>
+
+    <const name="None"                    value="0">
+      <desc>TODO.</desc>
+    </const>    
+    <const name="NoSymlinks"              value="1">
+      <desc>TODO</desc>
+    </const>    
+  </enum>
+  
+  <enum
+    name="ProcessStatus"
+    uuid="4d52368f-5b48-4bfe-b486-acf89139b52f"
+    >
+    <desc>
+      Guest process execution status.
+    </desc>
+    <const name="Undefined"               value="0">
+      <desc>Process is in an undefined state.</desc>
+    </const>
+
+    <const name="Starting"                value="10">
+      <desc>TODO</desc>
+    </const>
+    <const name="Started"                 value="100">
+      <desc>Process has been started.</desc>
+    </const>
+    <const name="Paused"                  value="110">
+      <desc>TODO</desc>
+    </const>
+    <const name="Terminating"             value="480">
+      <desc>TODO</desc>
+    </const>
+    <const name="TerminatedNormally"      value="500">
+      <desc>Process terminated normally.</desc>
+    </const>
+    <const name="TerminatedSignal"        value="510">
+      <desc>Process terminated via signal.</desc>
+    </const>
+    <const name="TerminatedAbnormally"    value="511">
+      <desc>Process terminated abnormally.</desc>
+    </const>
+     <const name="TimedOutKilled"         value="512">
+      <desc>Process timed out and was killed.</desc>
+    </const>
+    <const name="TimedOutAbnormally"      value="513">
+      <desc>Process timed out and was not killed successfully.</desc>
+    </const>
+    <const name="Down"                    value="600">
+      <desc>Service/OS is stopping, process was killed.</desc>
+    </const>
+    <const name="Error"                   value="800">
+      <desc>Something went wrong (error code in flags).</desc>
+    </const>
+  </enum>
+  
+  <enum
+    name="FsObjType"
+    uuid="a1ed437c-b3c3-4ca2-b19c-4239d658d5e8"
+    >
+    <desc>
+      TODO
+    </desc>
+
+    <const name="Undefined"               value="0">
+      <desc>TODO</desc>
+    </const>    
+    <const name="FIFO"                    value="1">
+      <desc>TODO</desc>
+    </const>    
+    <const name="DevChar"                 value="10">
+      <desc>TODO</desc>
+    </const>    
+    <const name="DevBlock"                value="11">
+      <desc>TODO</desc>
+    </const>    
+    <const name="Directory"               value="50">
+      <desc>TODO</desc>
+    </const>    
+    <const name="File"                    value="80">
+      <desc>TODO</desc>
+    </const>    
+    <const name="Symlink"                 value="100">
+      <desc>TODO</desc>
+    </const>    
+    <const name="Socket"                  value="200">
+      <desc>TODO</desc>
+    </const>    
+    <const name="Whiteout"                value="400">
+      <desc>TODO</desc>
+    </const>    
+  </enum>
 
   <enum
@@ -8813,8 +9089,1202 @@
     </attribute>
   </interface>
-
+  
+  <interface
+    name="IGuestSession" extends="$unknown"
+    uuid="158aff3c-5258-4994-88cb-6fd679c7e3ed"
+    wsmap="managed"
+    >
+    
+    <attribute name="user" type="wstring" readonly="yes">
+      <desc>
+        TODO
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>
+    
+    <attribute name="domain" type="wstring" readonly="yes">
+      <desc>
+        TODO
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>
+    
+    <attribute name="name" type="wstring" readonly="yes">
+      <desc>
+        TODO
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>
+    
+    <attribute name="id" type="unsigned long" readonly="yes">
+      <desc>
+        TODO
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>
+    
+    <attribute name="timeout" type="unsigned long" readonly="yes">
+      <desc>
+        TODO
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>
+    
+    <attribute name="environment" type="wstring" readonly="yes" safearray="yes">
+      <desc>
+        TODO
+      </desc>
+    </attribute>
+    
+    <attribute name="processes" type="IGuestProcess" readonly="yes" safearray="yes">
+      <desc>
+        TODO
+      </desc>
+    </attribute>
+    
+    <attribute name="directories" type="IGuestDirectory" readonly="yes" safearray="yes">
+      <desc>
+        TODO
+      </desc>
+    </attribute>
+    
+    <attribute name="files" type="IGuestFile" readonly="yes" safearray="yes">
+      <desc>
+        TODO
+      </desc>
+    </attribute>
+    
+    <method name="Close">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+    </method>
+    
+    <method name="CopyFrom">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="source" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="dest" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="flags" type="CopyFileFlag" dir="in" safearray="yes">
+        <desc>TODO</desc>
+      </param>
+      <param name="progress" type="IProgress" dir="return">
+        <desc>Progress object to track the operation completion.</desc>
+      </param>
+    </method>
+    
+    <method name="CopyTo">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="source" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="dest" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="flags" type="CopyFileFlag" dir="in" safearray="yes">
+        <desc>TODO</desc>
+      </param>
+      <param name="progress" type="IProgress" dir="return">
+        <desc>Progress object to track the operation completion.</desc>
+      </param>
+    </method>
+    
+    <method name="DirectoryCreate">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="path" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="mode" type="unsigned long" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="flags" type="unsigned long" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="directory" type="IGuestDirectory" dir="return">
+        <desc>Optional.</desc>
+      </param>
+    </method>
+    
+    <method name="DirectoryCreateTemp">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="templateName" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="mode" type="unsigned long" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="path" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="directory" type="IGuestDirectory" dir="return">
+        <desc>TODO</desc>
+      </param>
+    </method>
+    
+    <method name="DirectoryExists">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="path" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="exists" type="boolean" dir="return">
+        <desc>TODO</desc>
+      </param>
+    </method>
+    
+    <method name="DirectoryOpen">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="path" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="filter" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="flags" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="directory" type="IGuestDirectory" dir="return">
+        <desc>TODO</desc>
+      </param>
+    </method>
+    
+    <method name="DirectoryQueryInfo">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="path" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="info" type="IGuestFsObjInfo" dir="return">
+        <desc>TODO</desc>
+      </param>
+    </method>
+    
+    <method name="DirectoryRemove">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="path" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+    </method>
+    
+    <method name="DirectoryRemoveRecursive">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="path" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="flags" type="DirectoryRemoveRecFlag" dir="in" safearray="yes">
+        <desc>TODO</desc>
+      </param>
+      <param name="progress" type="IProgress" dir="return">
+        <desc>TODO</desc>
+      </param>
+    </method>
+    
+    <method name="DirectoryRename">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="source" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="dest" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="flags" type="PathRenameFlag" dir="in" safearray="yes"> 
+        <desc>TODO</desc>
+      </param>
+    </method>
+    
+    <method name="DirectorySetACL">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="path" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="acl" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+    </method>
+    
+    <method name="EnvironmentClear">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+    </method>
+    
+    <method name="EnvironmentSet">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="name" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="value" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+    </method>
+    
+    <method name="EnvironmentSetArray">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="environment" type="wstring" dir="in" safearray="yes">
+        <desc>TODO</desc>
+      </param>
+    </method>
+    
+    <method name="EnvironmentUnset">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="name" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+    </method>
+    
+    <method name="FileCreateTemp">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="templateName" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="mode" type="unsigned long" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="path" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="file" type="IGuestFile" dir="return">
+        <desc>Optional.</desc>
+      </param>
+    </method>
+    
+    <method name="FileExists">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="path" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="exists" type="boolean" dir="return">
+        <desc>TODO</desc>
+      </param>
+    </method>
+    
+    <method name="FileOpen">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="path" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="openMode" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="disposition" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="creationMode" type="unsigned long" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="offset" type="long long" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="file" type="IGuestFile" dir="return">
+        <desc>TODO</desc>
+      </param>
+    </method>
+    
+    <method name="FileQueryInfo">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="path" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="info" type="IGuestFsObjInfo" dir="return">
+        <desc>TODO</desc>
+      </param>
+    </method>
+    
+    <method name="FileQuerySize">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="path" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="size" type="long long" dir="return">
+        <desc>TODO</desc>
+      </param>
+    </method>
+    
+    <method name="FileRename">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="source" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="dest" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="flags" type="PathRenameFlag" dir="in" safearray="yes">
+        <desc>TODO</desc>
+      </param>
+    </method>
+    
+    <method name="FileSetACL">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="file" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="acl" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+    </method>
+    
+    <method name="ProcessCreate">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="command" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="arguments" type="wstring" dir="in" safearray="yes">
+        <desc>TODO</desc>
+      </param>
+      <param name="environment" type="wstring" dir="in" safearray="yes">
+        <desc>TODO</desc>
+      </param>
+      <param name="flags" type="ProcessCreateFlag" dir="in" safearray="yes">
+        <desc>TODO</desc>
+      </param>
+      <param name="timeoutMS" type="unsigned long" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="guestProcess" type="IGuestProcess" dir="return">
+        <desc>TODO</desc>
+      </param>
+    </method>
+    
+    <method name="ProcessCreateEx">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="command" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="arguments" type="wstring" dir="in" safearray="yes">
+        <desc>TODO</desc>
+      </param>
+      <param name="environment" type="wstring" dir="in" safearray="yes">
+        <desc>TODO</desc>
+      </param>
+      <param name="flags" type="ProcessCreateFlag" dir="in" safearray="yes">
+        <desc>TODO</desc>
+      </param>
+      <param name="timeoutMS" type="unsigned long" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="priority" type="ProcessPriority" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="affinity" type="long" dir="in" safearray="yes">
+        <desc>TODO</desc>
+      </param>
+      <param name="guestProcess" type="IGuestProcess" dir="return">
+        <desc>TODO</desc>
+      </param>
+    </method>
+    
+    <method name="ProcessGet">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="pid" type="unsigned long" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="guestProcess" type="IGuestProcess" dir="return">
+        <desc>TODO</desc>
+      </param>
+    </method>
+    
+    <method name="SetTimeout">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="timeoutMS" type="unsigned long" dir="in">
+        <desc>TODO</desc>
+      </param>
+    </method>
+    
+    <method name="SymlinkCreate">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="source" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="target" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="type" type="SymlinkType" dir="in">
+        <desc>TODO</desc>
+      </param>
+    </method>
+    
+    <method name="SymlinkExists">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="symlink" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="exists" type="boolean" dir="return">
+        <desc>TODO</desc>
+      </param>
+    </method>
+    
+    <method name="SymlinkRead">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="symlink" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="flags" type="SymlinkReadFlag" dir="in" safearray="yes">
+        <desc>TODO</desc>
+      </param>
+      <param name="target" type="wstring" dir="return">
+        <desc>TODO</desc>
+      </param>
+    </method>
+    
+    <method name="SymlinkRemoveDirectory">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="path" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+    </method>
+    
+    <method name="SymlinkRemoveFile">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="file" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+    </method>
+    
+  </interface>    
+
+  <interface
+    name="IProcess" extends="$unknown"
+    uuid="47b9d1f3-6728-4d29-830b-6a31bf5581d8"
+    wsmap="suppress"
+    >
+    <desc>
+      TODO
+    </desc>
+    <attribute name="pid" type="unsigned long" readonly="yes">
+      <desc>
+        TODO
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>
+    <attribute name="status" type="ProcessStatus" readonly="yes">
+      <desc>
+        TODO
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>
+    <attribute name="exitCode" type="long" readonly="yes">
+      <desc>
+        TODO
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>
+    <attribute name="environment" type="wstring" readonly="yes" safearray="yes">
+      <desc>
+        TODO
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>
+    <attribute name="arguments" type="wstring" readonly="yes" safearray="yes">
+      <desc>
+        TODO
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>
+    <attribute name="executablePath" type="wstring" readonly="yes">
+      <desc>
+        TODO
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>
+    
+    <method name="WaitFor">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="waitFor" type="ProcessWaitForFlag" dir="in" safearray="yes">
+        <desc>TODO</desc>
+      </param>
+      <param name="timeoutMS" type="unsigned long" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="reason" type="ProcessWaitReason" dir="return">
+        <desc>TODO</desc>
+      </param>
+    </method>
+    
+    <method name="Read">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="handle" type="unsigned long" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="size" type="unsigned long" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="timeoutMS" type="unsigned long" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="data" type="octet" dir="return" safearray="yes">
+        <desc>TODO</desc>
+      </param>
+    </method>
+    
+    <method name="Write">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="handle" type="unsigned long" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="size" type="unsigned long" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="timeoutMS" type="unsigned long" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="written" type="unsigned long" dir="out">
+        <desc>TODO</desc>
+      </param>
+      <param name="data" type="octet" dir="return" safearray="yes">
+        <desc>TODO</desc>
+      </param>
+    </method>
+    
+    <method name="Terminate">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+    </method>
+  </interface>
+  
+  <interface
+    name="IGuestProcess" extends="IProcess"
+    uuid="dfa39a36-5d43-4840-a025-67ea956b3111"
+    wsmap="managed"
+    >
+    <desc>
+      TODO
+    </desc>
+  </interface>
+  
+  <interface
+    name="IDirectory" extends="$unknown"
+    uuid="9659f46a-32f2-40e0-ab27-cc2e23fa5def"
+    wsmap="suppress"
+    >
+    <desc>
+      TODO
+    </desc>
+    
+    <attribute name="directoryName" type="wstring" readonly="yes">
+      <desc>
+        Full path of directory.
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>
+    
+    <method name="Read">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="objInfo" type="IFsObjInfo" dir="return">
+        <desc>TODO</desc>
+      </param>
+    </method>
+  </interface>
+  
+  <interface
+    name="IGuestDirectory" extends="IDirectory"
+    uuid="af4a8ce0-0725-42b7-8826-46e3c7ba7357"
+    wsmap="managed"
+    >
+    <desc>
+      TODO
+    </desc>
+  </interface>
+    
+  <interface
+    name="IFile" extends="$unknown"
+    uuid="df475838-6898-4bd7-bcb5-75f91d85c239"
+    wsmap="suppress"
+    >
+    <desc>
+      TODO
+    </desc>
+    
+    <attribute name="fileName" type="wstring" readonly="yes">
+      <desc>
+        TODO
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>
+    <attribute name="initialSize" type="long long" readonly="yes">
+      <desc>
+        TODO
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>
+    <attribute name="openMode" type="unsigned long" readonly="yes">
+      <desc>
+        TODO
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>
+    <attribute name="offset" type="long long" readonly="yes">
+      <desc>
+        TODO
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>
+    
+    <method name="Close">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+    </method>
+    
+    <method name="QueryInfo">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="objInfo" type="IFsObjInfo" dir="return">
+        <desc>TODO</desc>
+      </param>
+    </method>  
+        
+    <method name="Read">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="toRead" type="unsigned long" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="read" type="unsigned long" dir="out">
+        <desc>TODO</desc>
+      </param>
+      <param name="data" type="octet" dir="return" safearray="yes">
+        <desc>TODO</desc>
+      </param>
+    </method>
+        
+    <method name="ReadAt">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="offset" type="long long" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="toRead" type="unsigned long" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="read" type="unsigned long" dir="out">
+        <desc>TODO</desc>
+      </param>
+      <param name="data" type="octet" dir="return" safearray="yes">
+        <desc>TODO</desc>
+      </param>
+    </method>
+    
+    <method name="Seek">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="offset" type="long long" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="whence" type="FileSeekType" dir="in">
+        <desc>TODO</desc>
+      </param>
+    </method>
+    
+    <method name="SetACL">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="acl" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+    </method>
+    
+    <method name="Write">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="data" type="octet" dir="in" safearray="yes">
+        <desc>TODO</desc>
+      </param>
+      <param name="written" type="unsigned long" dir="return">
+        <desc>TODO</desc>
+      </param>
+    </method>
+    
+    <method name="WriteAt">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="offset" type="long long" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="data" type="octet" dir="in" safearray="yes">
+        <desc>TODO</desc>
+      </param>
+      <param name="written" type="unsigned long" dir="return">
+        <desc>TODO</desc>
+      </param>
+    </method>
+
+  </interface>
+  
+  <interface
+    name="IGuestFile" extends="IFile"
+    uuid="60661aec-145f-4d11-b80e-8ea151598093"
+    wsmap="managed"
+    >
+    <desc>
+      TODO
+    </desc>
+  </interface>
+  
+  <interface
+    name="IFsObjInfo" extends="$unknown"
+    uuid="0b53ef38-2462-4796-a680-7f6f0dd3680a"
+    wsmap="suppress"
+    >
+    <desc>
+      TODO
+    </desc>
+    
+    <attribute name="accessTime" type="long long" readonly="yes">
+      <desc>
+        TODO
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>
+    <attribute name="allocatedSize" type="long long" readonly="yes">
+      <desc>
+        TODO
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>
+    <attribute name="birthTime" type="long long" readonly="yes">
+      <desc>
+        TODO
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>
+        <attribute name="changeTime" type="long long" readonly="yes">
+      <desc>
+        TODO
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>
+    <attribute name="deviceNumber" type="unsigned long" readonly="yes">
+      <desc>
+        TODO
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>
+    <attribute name="fileAtttributes" type="wstring" readonly="yes">
+      <desc>
+        TODO
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>
+    <attribute name="generationId" type="unsigned long" readonly="yes">
+      <desc>
+        TODO
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>
+    <attribute name="gid" type="unsigned long" readonly="yes">
+      <desc>
+        TODO
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>
+    <attribute name="groupName" type="wstring" readonly="yes">
+      <desc>
+        TODO
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>
+    <attribute name="hardLinks" type="unsigned long" readonly="yes">
+      <desc>
+        TODO
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>
+    <attribute name="modificationTime" type="long long" readonly="yes">
+      <desc>
+        TODO
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>
+    <attribute name="name" type="wstring" readonly="yes">
+      <desc>
+        TODO
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>
+    <attribute name="nodeId" type="long long" readonly="yes">
+      <desc>
+        TODO
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>
+    <attribute name="nodeIdDevice" type="unsigned long" readonly="yes">
+      <desc>
+        TODO
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>      
+    <attribute name="objectSize" type="long long" readonly="yes">
+      <desc>
+        TODO
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>
+    <attribute name="type" type="FsObjType" readonly="yes">
+      <desc>
+        TODO
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>      
+    <attribute name="uid" type="unsigned long" readonly="yes">
+      <desc>
+        TODO
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>
+    <attribute name="userFlags" type="unsigned long" readonly="yes">
+      <desc>
+        TODO
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>
+    <attribute name="userName" type="wstring" readonly="yes">
+      <desc>
+        TODO
+        <note>
+          TODO
+        </note>
+      </desc>
+    </attribute>  
+    
+  </interface>
+  
+  <interface
+    name="IGuestFsObjInfo" extends="IFsObjInfo"
+    uuid="d5cf678e-3484-4e4a-ac55-329e15462e18"
+    wsmap="managed"
+    >
+    <desc>
+      TODO
+    </desc>
+  </interface>
+  
   <interface
     name="IGuest" extends="$unknown"
-    uuid="88696240-7411-4fe6-bb5e-ef56fb8a61f3"
+    uuid="a115744a-0e0b-4193-b40c-40e0d66d0f8d"
     wsmap="managed"
     >
@@ -8871,4 +10341,8 @@
     </attribute>
 
+    <attribute name="sessions" type="IGuestSession" readonly="yes" safearray="yes">
+      <desc>TODO</desc>
+    </attribute>
+    
     <attribute name="memoryBalloonSize" type="unsigned long">
       <desc>Guest system memory balloon size in megabytes (transient property).</desc>
@@ -9200,4 +10674,35 @@
     </method>
 
+    <method name="openSession">
+      <desc>
+        TODO
+      </desc>
+      <param name="user" type="wstring" dir="in">
+        <desc>
+          TODO
+        </desc>
+      </param>
+      <param name="password" type="wstring" dir="in">
+        <desc>
+          TODO
+        </desc>
+      </param>
+      <param name="domain" type="wstring" dir="in">
+        <desc>
+          TODO
+        </desc>
+      </param>
+      <param name="sessionName" type="wstring" dir="in">
+        <desc>
+          TODO
+        </desc>
+      </param>
+      <param name="guestSession" type="IGuestSession" dir="return">
+        <desc>
+          TODO
+        </desc>
+      </param>
+    </method>    
+    
     <method name="executeProcess">
       <desc>
Index: trunk/src/VBox/Main/include/GuestDirectoryImpl.h
===================================================================
--- trunk/src/VBox/Main/include/GuestDirectoryImpl.h	(revision 42084)
+++ trunk/src/VBox/Main/include/GuestDirectoryImpl.h	(revision 42084)
@@ -0,0 +1,71 @@
+
+/* $Id$ */
+/** @file
+ * VirtualBox Main - XXX.
+ */
+
+/*
+ * Copyright (C) 2012 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef ____H_GUESTDIRECTORYIMPL
+#define ____H_GUESTDIRECTORYIMPL
+
+#include "VirtualBoxBase.h"
+
+/**
+ * TODO
+ */
+class ATL_NO_VTABLE GuestDirectory :
+    public VirtualBoxBase,
+    VBOX_SCRIPTABLE_IMPL(IGuestDirectory)
+{
+public:
+    /** @name COM and internal init/term/mapping cruft.
+     * @{ */
+    VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(GuestDirectory, IGuestDirectory)
+    DECLARE_NOT_AGGREGATABLE(GuestDirectory)
+    DECLARE_PROTECT_FINAL_CONSTRUCT()
+    BEGIN_COM_MAP(GuestDirectory)
+        VBOX_DEFAULT_INTERFACE_ENTRIES(IGuestDirectory)
+        COM_INTERFACE_ENTRY(IDirectory)
+    END_COM_MAP()
+    DECLARE_EMPTY_CTOR_DTOR(GuestDirectory)
+
+    HRESULT init(void);
+    void    uninit(void);
+    HRESULT FinalConstruct(void);
+    void    FinalRelease(void);
+    /** @}  */
+
+    /** @name IDirectory interface.
+     * @{ */
+    STDMETHOD(COMGETTER(DirectoryName))(BSTR *aName);
+
+    STDMETHOD(Read)(IGuestFsObjInfo **aInfo);
+    /** @}  */
+
+public:
+    /** @name Public internal methods.
+     * @{ */
+    /** @}  */
+
+private:
+
+    struct Data
+    {
+        Utf8Str                 mName;
+        ComPtr<IGuestFsObjInfo> mFsObjInfo;
+    } mData;
+};
+
+#endif /* !____H_GUESTDIRECTORYIMPL */
+
Index: trunk/src/VBox/Main/include/GuestFileImpl.h
===================================================================
--- trunk/src/VBox/Main/include/GuestFileImpl.h	(revision 42084)
+++ trunk/src/VBox/Main/include/GuestFileImpl.h	(revision 42084)
@@ -0,0 +1,80 @@
+
+/* $Id$ */
+/** @file
+ * VirtualBox Main - XXX.
+ */
+
+/*
+ * Copyright (C) 2012 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef ____H_GUESTFILEIMPL
+#define ____H_GUESTFILEIMPL
+
+#include "VirtualBoxBase.h"
+
+#include "GuestFsObjInfoImpl.h"
+
+/**
+ * TODO
+ */
+class ATL_NO_VTABLE GuestFile :
+    public VirtualBoxBase,
+    VBOX_SCRIPTABLE_IMPL(IGuestFile)
+{
+public:
+    /** @name COM and internal init/term/mapping cruft.
+     * @{ */
+    VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(GuestFile, IGuestFile)
+    DECLARE_NOT_AGGREGATABLE(GuestFile)
+    DECLARE_PROTECT_FINAL_CONSTRUCT()
+    BEGIN_COM_MAP(GuestFile)
+        VBOX_DEFAULT_INTERFACE_ENTRIES(IGuestFile)
+        COM_INTERFACE_ENTRY(IFile)
+    END_COM_MAP()
+    DECLARE_EMPTY_CTOR_DTOR(GuestFile)
+
+    HRESULT init(void);
+    void    uninit(void);
+    HRESULT FinalConstruct(void);
+    void    FinalRelease(void);
+    /** @}  */
+
+    /** @name IDirectory interface.
+     * @{ */
+    STDMETHOD(COMGETTER(FileName))(BSTR *aFileName);
+    STDMETHOD(COMGETTER(InitialSize))(LONG64 *aInitialSize);
+    STDMETHOD(COMGETTER(Offset))(LONG64 *aOffset);
+    STDMETHOD(COMGETTER(OpenMode))(ULONG *aOpenMode);
+
+    STDMETHOD(Close)(void);
+    STDMETHOD(QueryInfo)(IGuestFsObjInfo **aInfo);
+    STDMETHOD(Read)(ULONG aToRead, ULONG *aRead, ComSafeArrayOut(BYTE, aData));
+    STDMETHOD(ReadAt)(LONG64 aOffset, ULONG aToRead, ULONG *aRead, ComSafeArrayOut(BYTE, aData));
+    STDMETHOD(Seek)(LONG64 aOffset, FileSeekType aType);
+    STDMETHOD(SetACL)(BSTR aACL);
+    STDMETHOD(Write)(ComSafeArrayIn(BYTE, aData), ULONG *aWritten);
+    STDMETHOD(WriteAt)(LONG64 aOffset, ComSafeArrayIn(BYTE, aData), ULONG *aWritten);
+    /** @}  */
+
+private:
+
+    struct Data
+    {
+        Utf8Str              mFileName;
+        LONG64               mInitialSize;
+        ULONG                mOpenMode;
+        LONG64               mOffset;
+    } mData;
+};
+
+#endif /* !____H_GUESTFILEIMPL */
+
Index: trunk/src/VBox/Main/include/GuestFsObjInfoImpl.h
===================================================================
--- trunk/src/VBox/Main/include/GuestFsObjInfoImpl.h	(revision 42084)
+++ trunk/src/VBox/Main/include/GuestFsObjInfoImpl.h	(revision 42084)
@@ -0,0 +1,106 @@
+
+/* $Id$ */
+/** @file
+ * VirtualBox Main - XXX.
+ */
+
+/*
+ * Copyright (C) 2012 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef ____H_GUESTFSOBJINFOIMPL
+#define ____H_GUESTFSOBJINFOIMPL
+
+#include "VirtualBoxBase.h"
+
+/**
+ * TODO
+ */
+class ATL_NO_VTABLE GuestFsObjInfo :
+    public VirtualBoxBase,
+    VBOX_SCRIPTABLE_IMPL(IGuestFsObjInfo)
+{
+public:
+    /** @name COM and internal init/term/mapping cruft.
+     * @{ */
+    VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(GuestFsObjInfo, IGuestFsObjInfo)
+    DECLARE_NOT_AGGREGATABLE(GuestFsObjInfo)
+    DECLARE_PROTECT_FINAL_CONSTRUCT()
+    BEGIN_COM_MAP(GuestFsObjInfo)
+        VBOX_DEFAULT_INTERFACE_ENTRIES(IGuestFsObjInfo)
+        COM_INTERFACE_ENTRY(IFsObjInfo)
+    END_COM_MAP()
+    DECLARE_EMPTY_CTOR_DTOR(GuestFsObjInfo)
+
+    HRESULT init(void);
+    void    uninit(void);
+    HRESULT FinalConstruct(void);
+    void    FinalRelease(void);
+    /** @}  */
+
+    /** @name IFsObjInfo interface.
+     * @{ */
+    STDMETHOD(COMGETTER(AccessTime))(LONG64 *aAccessTime);
+    STDMETHOD(COMGETTER(AllocatedSize))(LONG64 *aAllocatedSize);
+    STDMETHOD(COMGETTER(BirthTime))(LONG64 *aBirthTime);
+    STDMETHOD(COMGETTER(ChangeTime))(LONG64 *aChangeTime);
+    STDMETHOD(COMGETTER(DeviceNumber))(ULONG *aDeviceNumber);
+    STDMETHOD(COMGETTER(FileAttrs))(BSTR *aFileAttrs);
+    STDMETHOD(COMGETTER(GenerationID))(ULONG *aGenerationID);
+    STDMETHOD(COMGETTER(GID))(ULONG *aGID);
+    STDMETHOD(COMGETTER(GroupName))(BSTR *aGroupName);
+    STDMETHOD(COMGETTER(HardLinks))(ULONG *aHardLinks);
+    STDMETHOD(COMGETTER(ModificationTime))(LONG64 *aModificationTime);
+    STDMETHOD(COMGETTER(Name))(BSTR *aName);
+    STDMETHOD(COMGETTER(NodeID))(LONG64 *aNodeID);
+    STDMETHOD(COMGETTER(NodeIDDevice))(ULONG *aNodeIDDevice);
+    STDMETHOD(COMGETTER(ObjectSize))(ULONG *aObjectSize);
+    STDMETHOD(COMGETTER(Type))(FsObjType *aType);
+    STDMETHOD(COMGETTER(UID))(ULONG *aUID);
+    STDMETHOD(COMGETTER(UserFlags))(ULONG *aUserFlags);
+    STDMETHOD(COMGETTER(UserName))(BSTR *aUserName);
+    STDMETHOD(COMGETTER(ACL))(BSTR *aACL);
+    /** @}  */
+
+public:
+    /** @name Public internal methods.
+     * @{ */
+    /** @}  */
+
+private:
+
+    struct Data
+    {
+        LONG64               mAccessTime;
+        LONG64               mAllocatedSize;
+        LONG64               mBirthTime;
+        LONG64               mChangeTime;
+        ULONG                mDeviceNumber;
+        Utf8Str              mFileAttrs;
+        ULONG                mGenerationID;
+        ULONG                mGID;
+        Utf8Str              mGroupName;
+        ULONG                mNumHardLinks;
+        LONG64               mModificationTime;
+        Utf8Str              mName;
+        LONG64               mNodeID;
+        ULONG                mNodeIDDevice;
+        LONG64               mObjectSize;
+        FsObjType            mType;
+        ULONG                mUID;
+        ULONG                mUserFlags;
+        Utf8Str              mUserName;
+        Utf8Str              mACL;
+    } mData;
+};
+
+#endif /* !____H_GUESTFSOBJINFOIMPL */
+
Index: trunk/src/VBox/Main/include/GuestImpl.h
===================================================================
--- trunk/src/VBox/Main/include/GuestImpl.h	(revision 42083)
+++ trunk/src/VBox/Main/include/GuestImpl.h	(revision 42084)
@@ -25,4 +25,5 @@
 #include "AdditionsFacilityImpl.h"
 #include "GuestCtrlImplPrivate.h"
+#include "GuestSessionImpl.h"
 #include "HGCM.h"
 #ifdef VBOX_WITH_GUEST_CONTROL
@@ -84,5 +85,6 @@
     STDMETHOD(COMGETTER(AdditionsVersion))(BSTR *a_pbstrAdditionsVersion);
     STDMETHOD(COMGETTER(AdditionsRevision))(ULONG *a_puAdditionsRevision);
-    STDMETHOD(COMGETTER(Facilities)) (ComSafeArrayOut(IAdditionsFacility*, aFacilities));
+    STDMETHOD(COMGETTER(Facilities)) (ComSafeArrayOut(IAdditionsFacility *, aFacilities));
+    STDMETHOD(COMGETTER(Sessions)) (ComSafeArrayOut(IGuestSession *, aSessions));
     STDMETHOD(COMGETTER(MemoryBalloonSize)) (ULONG *aMemoryBalloonSize);
     STDMETHOD(COMSETTER(MemoryBalloonSize)) (ULONG aMemoryBalloonSize);
@@ -131,4 +133,5 @@
                                      ULONG *aPageTotal, ULONG *aMemAllocTotal, ULONG *aMemFreeTotal, ULONG *aMemBalloonTotal, ULONG *aMemSharedTotal);
     STDMETHOD(UpdateGuestAdditions)(IN_BSTR aSource, ULONG aFlags, IProgress **aProgress);
+    STDMETHOD(OpenSession)(IN_BSTR aUser, IN_BSTR aPassword, IN_BSTR aDomain, IN_BSTR aSessionName, IGuestSession **aGuestSession);
 
     // Public methods that are not in IDL (only called internally).
@@ -294,4 +297,6 @@
     typedef std::map< AdditionsFacilityType_T, ComObjPtr<AdditionsFacility> >::const_iterator FacilityMapIterConst;
 
+    typedef std::list <ComObjPtr<GuestSession> > GuestSessions;
+
     struct Data
     {
@@ -308,4 +313,5 @@
         uint32_t                mAdditionsFeatures;
         Bstr                    mInterfaceVersion;
+        GuestSessions           mGuestSessions;
     };
 
Index: trunk/src/VBox/Main/include/GuestProcessImpl.h
===================================================================
--- trunk/src/VBox/Main/include/GuestProcessImpl.h	(revision 42084)
+++ trunk/src/VBox/Main/include/GuestProcessImpl.h	(revision 42084)
@@ -0,0 +1,79 @@
+
+/* $Id$ */
+/** @file
+ * VirtualBox Main - XXX.
+ */
+
+/*
+ * Copyright (C) 2012 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef ____H_GUESTPROCESSIMPL
+#define ____H_GUESTPROCESSIMPL
+
+#include "VirtualBoxBase.h"
+
+/**
+ * TODO
+ */
+class ATL_NO_VTABLE GuestProcess :
+    public VirtualBoxBase,
+    VBOX_SCRIPTABLE_IMPL(IGuestProcess)
+{
+public:
+    /** @name COM and internal init/term/mapping cruft.
+     * @{ */
+    VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(GuestProcess, IGuestProcess)
+    DECLARE_NOT_AGGREGATABLE(GuestProcess)
+    DECLARE_PROTECT_FINAL_CONSTRUCT()
+    BEGIN_COM_MAP(GuestProcess)
+        VBOX_DEFAULT_INTERFACE_ENTRIES(IGuestProcess)
+        COM_INTERFACE_ENTRY(IProcess)
+    END_COM_MAP()
+    DECLARE_EMPTY_CTOR_DTOR(GuestProcess)
+    HRESULT init(void);
+    void    uninit(void);
+    HRESULT FinalConstruct(void);
+    void    FinalRelease(void);
+    /** @}  */
+
+    /** @name IProcess interface.
+     * @{ */
+    STDMETHOD(COMGETTER(Arguments))(ComSafeArrayOut(BSTR, aArguments));
+    STDMETHOD(COMGETTER(Environment))(ComSafeArrayOut(BSTR, aEnvironment));
+    STDMETHOD(COMGETTER(ExecutablePath))(BSTR *aExecutablePath);
+    STDMETHOD(COMGETTER(ExitCode))(LONG *aExitCode);
+    STDMETHOD(COMGETTER(PID))(ULONG *aPID);
+    STDMETHOD(COMGETTER(Status))(ProcessStatus *aStatus);
+
+    STDMETHOD(Read)(ULONG aHandle, ULONG aSize, ULONG aTimeoutMS, ComSafeArrayOut(BYTE, aData));
+    STDMETHOD(Terminate)(void);
+    STDMETHOD(WaitFor)(ComSafeArrayOut(ProcessWaitForFlag, aFlags), ULONG aTimeoutMS, ProcessWaitReason *aReason);
+    STDMETHOD(Write)(ULONG aHandle, ComSafeArrayIn(BYTE, aData), ULONG aTimeoutMS, ULONG *aWritten);
+    /** @}  */
+
+public:
+    /** @name Public internal methods.
+     * @{ */
+    /** @}  */
+
+private:
+
+    typedef std::map <Utf8Str, Utf8Str> MyStringMap;
+
+    struct Data
+    {
+        Bstr                 mName;
+    } mData;
+};
+
+#endif /* !____H_GUESTPROCESSIMPL */
+
Index: trunk/src/VBox/Main/include/GuestSessionImpl.h
===================================================================
--- trunk/src/VBox/Main/include/GuestSessionImpl.h	(revision 42084)
+++ trunk/src/VBox/Main/include/GuestSessionImpl.h	(revision 42084)
@@ -0,0 +1,135 @@
+
+/* $Id$ */
+/** @file
+ * VirtualBox Main - XXX.
+ */
+
+/*
+ * Copyright (C) 2012 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef ____H_GUESTSESSIONIMPL
+#define ____H_GUESTSESSIONIMPL
+
+#include "VirtualBoxBase.h"
+
+#include "GuestProcessImpl.h"
+#include "GuestDirectoryImpl.h"
+#include "GuestFileImpl.h"
+
+/**
+ * TODO
+ */
+class ATL_NO_VTABLE GuestSession :
+    public VirtualBoxBase,
+    VBOX_SCRIPTABLE_IMPL(IGuestSession)
+{
+public:
+    /** @name COM and internal init/term/mapping cruft.
+     * @{ */
+    VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(GuestSession, IGuestSession)
+    DECLARE_NOT_AGGREGATABLE(GuestSession)
+    DECLARE_PROTECT_FINAL_CONSTRUCT()
+    BEGIN_COM_MAP(GuestSession)
+        VBOX_DEFAULT_INTERFACE_ENTRIES(IGuestSession)
+    END_COM_MAP()
+    DECLARE_EMPTY_CTOR_DTOR(GuestSession)
+
+    HRESULT init(const ComPtr<IGuest> pGuest, Utf8Str aUser, Utf8Str aPassword, Utf8Str aDomain, Utf8Str aName);
+    void    uninit(void);
+    HRESULT FinalConstruct(void);
+    void    FinalRelease(void);
+    /** @}  */
+
+    /** @name IGuestSession properties.
+     * @{ */
+    STDMETHOD(COMGETTER(User))(BSTR *aName);
+    STDMETHOD(COMGETTER(Domain))(BSTR *aDomain);
+    STDMETHOD(COMGETTER(Name))(BSTR *aName);
+    STDMETHOD(COMGETTER(Id))(ULONG *aId);
+    STDMETHOD(COMGETTER(Timeout))(ULONG *aTimeout);
+    STDMETHOD(COMGETTER(Environment))(ComSafeArrayOut(BSTR, aEnvironment));
+    STDMETHOD(COMGETTER(Processes))(ComSafeArrayOut(IGuestProcess *, aProcesses));
+    STDMETHOD(COMGETTER(Directories))(ComSafeArrayOut(IGuestDirectory *, aDirectories));
+    STDMETHOD(COMGETTER(Files))(ComSafeArrayOut(IGuestFile *, aFiles));
+    /** @}  */
+
+    /** @name IGuestSession methods.
+     * @{ */
+    STDMETHOD(Close)(void);
+    STDMETHOD(CopyFrom)(BSTR aSource, BSTR aDest, ComSafeArrayIn(ULONG, aFlags), IProgress **aProgress);
+    STDMETHOD(CopyTo)(BSTR aSource, BSTR aDest, ComSafeArrayIn(ULONG, aFlags), IProgress **aProgress);
+    STDMETHOD(DirectoryCreate)(BSTR aPath, ULONG aMode, ULONG aFlags, IGuestDirectory **aDirectory);
+    STDMETHOD(DirectoryCreateTemp)(BSTR aTemplate, ULONG aMode, BSTR aName, IGuestDirectory **aDirectory);
+    STDMETHOD(DirectoryExists)(BSTR aPath, BOOL *aExists);
+    STDMETHOD(DirectoryOpen)(BSTR aPath, BSTR aFilter, BSTR aFlags, IGuestDirectory **aDirectory);
+    STDMETHOD(DirectoryQueryInfo)(BSTR aPath, IGuestFsObjInfo **aInfo);
+    STDMETHOD(DirectoryRemove)(BSTR aPath);
+    STDMETHOD(DirectoryRemoveRecursive)(BSTR aPath, ComSafeArrayIn(DirectoryRemoveRecFlag, aFlags), IProgress **aProgress);
+    STDMETHOD(DirectoryRename)(BSTR aSource, BSTR aDest, ComSafeArrayIn(DirectoryRenameFlag, aFlags));
+    STDMETHOD(DirectorySetACL)(BSTR aPath, BSTR aACL);
+    STDMETHOD(EnvironmentClear)(void);
+    STDMETHOD(EnvironmentSet)(BSTR aName, BSTR aValue);
+    STDMETHOD(EnvironmentSetArray)(ComSafeArrayIn(BSTR, aValues));
+    STDMETHOD(EnvironmentUnset)(BSTR aName);
+    STDMETHOD(FileCreateTemp)(BSTR aTemplate, ULONG aMode, BSTR aName, IGuestFile **aFile);
+    STDMETHOD(FileExists)(BSTR aPath, BOOL *aExists);
+    STDMETHOD(FileOpen)(BSTR aPath, BSTR aOpenMode, BSTR aDisposition, ULONG aCreationMode, LONG64 aOffset, IGuestFile **aFile);
+    STDMETHOD(FileQueryInfo)(BSTR aPath, IGuestFsObjInfo **aInfo);
+    STDMETHOD(FileQuerySize)(BSTR aPath, LONG64 *aSize);
+    STDMETHOD(FileRemove)(BSTR aPath);
+    STDMETHOD(FileRename)(BSTR aSource, BSTR aDest, ComSafeArrayIn(DirectoryRenameFlag, aFlags));
+    STDMETHOD(FileSetACL)(BSTR aPath, BSTR aACL);
+    STDMETHOD(ProcessCreate)(BSTR aCommand, ComSafeArrayIn(BSTR, aArguments), ComSafeArrayIn(BSTR, aEnvironment),
+                             ComSafeArrayIn(ProcessCreateFlag, aFlags), ULONG aTimeoutMS, IGuestProcess **IGuestProcess);
+    STDMETHOD(ProcessCreateEx)(BSTR aCommand, ComSafeArrayIn(BSTR, aArguments), ComSafeArrayIn(BSTR, aEnvironment),
+                               ComSafeArrayIn(ProcessCreateFlag, aFlags), ULONG aTimeoutMS,
+                               ProcessPriority aPriority, ComSafeArrayIn(ULONG, aAffinity),
+                               IGuestProcess **IGuestProcess);
+    STDMETHOD(ProcessGet)(ULONG aPID, IGuestProcess **IGuestProcess);
+    STDMETHOD(SetTimeout)(ULONG aTimeoutMS);
+    STDMETHOD(SymlinkCreate)(BSTR aSource, BSTR aTarget, SymlinkType aType);
+    STDMETHOD(SymlinkExists)(BSTR aSymlink, BOOL *aExists);
+    STDMETHOD(SymlinkRead)(BSTR aSymlink, ComSafeArrayIn(SymlinkReadFlag, aFlags), BSTR *aTarget);
+    STDMETHOD(SymlinkRemoveDirectory)(BSTR aPath);
+    STDMETHOD(SymlinkRemoveFile)(BSTR aFile);
+    /** @}  */
+
+public:
+    /** @name Public internal methods.
+     * @{ */
+    /** @}  */
+
+private:
+
+    typedef std::map <Utf8Str, Utf8Str> SessionEnvironment;
+    typedef std::list <ComObjPtr<GuestProcess> > SessionProcesses;
+    typedef std::list <ComObjPtr<GuestDirectory> > SessionDirectories;
+    typedef std::list <ComObjPtr<GuestFile> > SessionFiles;
+
+    struct Data
+    {
+        ComPtr<IGuest>       mParent;
+        Utf8Str              mUser;
+        Utf8Str              mDomain;
+        Utf8Str              mPassword;
+        Utf8Str              mName;
+        ULONG                mId;
+        ULONG                mTimeout;
+        SessionEnvironment   mEnvironment;
+        SessionProcesses     mProcesses;
+        SessionDirectories   mDirectories;
+        SessionFiles         mFiles;
+    } mData;
+};
+
+#endif /* !____H_GUESTSESSIONIMPL */
+
Index: trunk/src/VBox/Main/src-client/GuestCtrlImpl.cpp
===================================================================
--- trunk/src/VBox/Main/src-client/GuestCtrlImpl.cpp	(revision 42083)
+++ trunk/src/VBox/Main/src-client/GuestCtrlImpl.cpp	(revision 42084)
@@ -5,5 +5,5 @@
 
 /*
- * Copyright (C) 2006-2011 Oracle Corporation
+ * Copyright (C) 2006-2012 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -2661,2 +2661,44 @@
 }
 
+STDMETHODIMP Guest::OpenSession(IN_BSTR aUser, IN_BSTR aPassword, IN_BSTR aDomain, IN_BSTR aSessionName, IGuestSession **aGuestSession)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else /* VBOX_WITH_GUEST_CONTROL */
+
+    /* Do not allow anonymous sessions (with system rights). */
+    if (RT_UNLIKELY((aUser) == NULL || *(aUser) == '\0'))
+        return setError(E_INVALIDARG, tr("No user name specified"));
+    CheckComArgOutPointerValid(aSessionName);
+
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    HRESULT hr;
+    ComObjPtr<GuestSession> pGuestSession;
+    try
+    {
+        /* Create the session object. */
+        hr = pGuestSession.createObject();
+        if (FAILED(hr)) throw hr;
+
+        hr = pGuestSession->init(static_cast<IGuest*>(this),
+                                 aUser, aPassword, aDomain, aSessionName);
+        if (FAILED(hr)) throw hr;
+
+        mData.mGuestSessions.push_back(pGuestSession);
+
+        /* Return guest session to the caller. */
+        hr = pGuestSession.queryInterfaceTo(aGuestSession);
+    }
+    catch (HRESULT aRC)
+    {
+        hr = aRC;
+    }
+
+    return hr;
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
Index: trunk/src/VBox/Main/src-client/GuestDirectoryImpl.cpp
===================================================================
--- trunk/src/VBox/Main/src-client/GuestDirectoryImpl.cpp	(revision 42084)
+++ trunk/src/VBox/Main/src-client/GuestDirectoryImpl.cpp	(revision 42084)
@@ -0,0 +1,113 @@
+
+/* $Id$ */
+/** @file
+ * VirtualBox Main - XXX.
+ */
+
+/*
+ * Copyright (C) 2012 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+
+/*******************************************************************************
+*   Header Files                                                               *
+*******************************************************************************/
+#include "GuestDirectoryImpl.h"
+
+#include "Global.h"
+#include "AutoCaller.h"
+#include "Logging.h"
+
+#include <VBox/com/array.h>
+
+
+// constructor / destructor
+/////////////////////////////////////////////////////////////////////////////
+
+DEFINE_EMPTY_CTOR_DTOR(GuestDirectory)
+
+HRESULT GuestDirectory::FinalConstruct()
+{
+    LogFlowThisFunc(("\n"));
+    return BaseFinalConstruct();
+}
+
+void GuestDirectory::FinalRelease(void)
+{
+    LogFlowThisFuncEnter();
+    uninit();
+    BaseFinalRelease();
+    LogFlowThisFuncLeave();
+}
+
+// public initializer/uninitializer for internal purposes only
+/////////////////////////////////////////////////////////////////////////////
+
+HRESULT GuestDirectory::init(void)
+{
+    /* Enclose the state transition NotReady->InInit->Ready. */
+    AutoInitSpan autoInitSpan(this);
+    AssertReturn(autoInitSpan.isOk(), E_FAIL);
+
+    /* Confirm a successful initialization when it's the case. */
+    autoInitSpan.setSucceeded();
+
+    return S_OK;
+}
+
+/**
+ * Uninitializes the instance.
+ * Called from FinalRelease().
+ */
+void GuestDirectory::uninit(void)
+{
+    LogFlowThisFunc(("\n"));
+
+    /* Enclose the state transition Ready->InUninit->NotReady. */
+    AutoUninitSpan autoUninitSpan(this);
+    if (autoUninitSpan.uninitDone())
+        return;
+}
+
+// implementation of public getters/setters for attributes
+/////////////////////////////////////////////////////////////////////////////
+
+STDMETHODIMP GuestDirectory::COMGETTER(DirectoryName)(BSTR *aName)
+{
+    LogFlowThisFuncEnter();
+
+    CheckComArgOutPointerValid(aName);
+
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    mData.mName.cloneTo(aName);
+
+    return S_OK;
+}
+
+// implementation of public methods
+/////////////////////////////////////////////////////////////////////////////
+
+STDMETHODIMP GuestDirectory::Read(IGuestFsObjInfo **aInfo)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
Index: trunk/src/VBox/Main/src-client/GuestFileImpl.cpp
===================================================================
--- trunk/src/VBox/Main/src-client/GuestFileImpl.cpp	(revision 42084)
+++ trunk/src/VBox/Main/src-client/GuestFileImpl.cpp	(revision 42084)
@@ -0,0 +1,229 @@
+
+/* $Id$ */
+/** @file
+ * VirtualBox Main - XXX.
+ */
+
+/*
+ * Copyright (C) 2012 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+
+/*******************************************************************************
+*   Header Files                                                               *
+*******************************************************************************/
+#include "GuestFileImpl.h"
+
+#include "Global.h"
+#include "AutoCaller.h"
+#include "Logging.h"
+
+#include <VBox/com/array.h>
+
+
+// constructor / destructor
+/////////////////////////////////////////////////////////////////////////////
+
+DEFINE_EMPTY_CTOR_DTOR(GuestFile)
+
+HRESULT GuestFile::FinalConstruct()
+{
+    LogFlowThisFunc(("\n"));
+    return BaseFinalConstruct();
+}
+
+void GuestFile::FinalRelease(void)
+{
+    LogFlowThisFuncEnter();
+    uninit();
+    BaseFinalRelease();
+    LogFlowThisFuncLeave();
+}
+
+// public initializer/uninitializer for internal purposes only
+/////////////////////////////////////////////////////////////////////////////
+
+HRESULT GuestFile::init(void)
+{
+    /* Enclose the state transition NotReady->InInit->Ready. */
+    AutoInitSpan autoInitSpan(this);
+    AssertReturn(autoInitSpan.isOk(), E_FAIL);
+
+    /* Confirm a successful initialization when it's the case. */
+    autoInitSpan.setSucceeded();
+
+    return S_OK;
+}
+
+/**
+ * Uninitializes the instance.
+ * Called from FinalRelease().
+ */
+void GuestFile::uninit(void)
+{
+    LogFlowThisFunc(("\n"));
+
+    /* Enclose the state transition Ready->InUninit->NotReady. */
+    AutoUninitSpan autoUninitSpan(this);
+    if (autoUninitSpan.uninitDone())
+        return;
+}
+
+// implementation of public getters/setters for attributes
+/////////////////////////////////////////////////////////////////////////////
+
+STDMETHODIMP GuestFile::COMGETTER(FileName)(BSTR *aFileName)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestFile::COMGETTER(InitialSize)(LONG64 *aInitialSize)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestFile::COMGETTER(Offset)(LONG64 *aOffset)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestFile::COMGETTER(OpenMode)(ULONG *aOpenMode)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+// implementation of public methods
+/////////////////////////////////////////////////////////////////////////////
+
+STDMETHODIMP GuestFile::Close(void)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestFile::QueryInfo(IGuestFsObjInfo **aInfo)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestFile::Read(ULONG aToRead, ULONG *aRead, ComSafeArrayOut(BYTE, aData))
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestFile::ReadAt(LONG64 aOffset, ULONG aToRead, ULONG *aRead, ComSafeArrayOut(BYTE, aData))
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestFile::Seek(LONG64 aOffset, FileSeekType aType)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestFile::SetACL(BSTR aACL)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestFile::Write(ComSafeArrayIn(BYTE, aData), ULONG *aWritten)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestFile::WriteAt(LONG64 aOffset, ComSafeArrayIn(BYTE, aData), ULONG *aWritten)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
Index: trunk/src/VBox/Main/src-client/GuestFsObjInfoImpl.cpp
===================================================================
--- trunk/src/VBox/Main/src-client/GuestFsObjInfoImpl.cpp	(revision 42084)
+++ trunk/src/VBox/Main/src-client/GuestFsObjInfoImpl.cpp	(revision 42084)
@@ -0,0 +1,315 @@
+
+/* $Id$ */
+/** @file
+ * VirtualBox Main - XXX.
+ */
+
+/*
+ * Copyright (C) 2012 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+
+/*******************************************************************************
+*   Header Files                                                               *
+*******************************************************************************/
+#include "GuestFsObjInfoImpl.h"
+
+#include "Global.h"
+#include "AutoCaller.h"
+#include "Logging.h"
+
+#include <VBox/com/array.h>
+
+
+// constructor / destructor
+/////////////////////////////////////////////////////////////////////////////
+
+DEFINE_EMPTY_CTOR_DTOR(GuestFsObjInfo)
+
+HRESULT GuestFsObjInfo::FinalConstruct()
+{
+    LogFlowThisFunc(("\n"));
+    return BaseFinalConstruct();
+}
+
+void GuestFsObjInfo::FinalRelease(void)
+{
+    LogFlowThisFuncEnter();
+    uninit();
+    BaseFinalRelease();
+    LogFlowThisFuncLeave();
+}
+
+// public initializer/uninitializer for internal purposes only
+/////////////////////////////////////////////////////////////////////////////
+
+HRESULT GuestFsObjInfo::init(void)
+{
+    return S_OK;
+}
+
+/**
+ * Uninitializes the instance.
+ * Called from FinalRelease().
+ */
+void GuestFsObjInfo::uninit(void)
+{
+    LogFlowThisFunc(("\n"));
+
+    /* Enclose the state transition Ready->InUninit->NotReady. */
+    AutoUninitSpan autoUninitSpan(this);
+    if (autoUninitSpan.uninitDone())
+        return;
+}
+
+// implementation of public getters/setters for attributes
+/////////////////////////////////////////////////////////////////////////////
+
+STDMETHODIMP GuestFsObjInfo::COMGETTER(AccessTime)(LONG64 *aAccessTime)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestFsObjInfo::COMGETTER(AllocatedSize)(LONG64 *aAllocatedSize)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestFsObjInfo::COMGETTER(BirthTime)(LONG64 *aBirthTime)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestFsObjInfo::COMGETTER(ChangeTime)(LONG64 *aChangeTime)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestFsObjInfo::COMGETTER(DeviceNumber)(ULONG *aDeviceNumber)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestFsObjInfo::COMGETTER(FileAttrs)(BSTR *aFileAttrs)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestFsObjInfo::COMGETTER(GenerationID)(ULONG *aGenerationID)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestFsObjInfo::COMGETTER(GID)(ULONG *aGID)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestFsObjInfo::COMGETTER(GroupName)(BSTR *aGroupName)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestFsObjInfo::COMGETTER(HardLinks)(ULONG *aHardLinks)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestFsObjInfo::COMGETTER(ModificationTime)(LONG64 *aModificationTime)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestFsObjInfo::COMGETTER(Name)(BSTR *aName)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestFsObjInfo::COMGETTER(NodeID)(LONG64 *aNodeID)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestFsObjInfo::COMGETTER(NodeIDDevice)(ULONG *aNodeIDDevice)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestFsObjInfo::COMGETTER(ObjectSize)(ULONG *aObjectSize)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestFsObjInfo::COMGETTER(Type)(FsObjType *aType)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestFsObjInfo::COMGETTER(UID)(ULONG *aUID)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestFsObjInfo::COMGETTER(UserFlags)(ULONG *aUserFlags)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestFsObjInfo::COMGETTER(UserName)(BSTR *aUserName)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestFsObjInfo::COMGETTER(ACL)(BSTR *aACL)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
Index: trunk/src/VBox/Main/src-client/GuestImpl.cpp
===================================================================
--- trunk/src/VBox/Main/src-client/GuestImpl.cpp	(revision 42083)
+++ trunk/src/VBox/Main/src-client/GuestImpl.cpp	(revision 42084)
@@ -17,4 +17,5 @@
 
 #include "GuestImpl.h"
+#include "GuestSessionImpl.h"
 
 #include "Global.h"
@@ -418,5 +419,5 @@
 }
 
-STDMETHODIMP Guest::COMGETTER(Facilities)(ComSafeArrayOut(IAdditionsFacility*, aFacilities))
+STDMETHODIMP Guest::COMGETTER(Facilities)(ComSafeArrayOut(IAdditionsFacility *, aFacilities))
 {
     CheckComArgOutSafeArrayPointerValid(aFacilities);
@@ -429,4 +430,19 @@
     SafeIfaceArray<IAdditionsFacility> fac(mData.mFacilityMap);
     fac.detachTo(ComSafeArrayOutArg(aFacilities));
+
+    return S_OK;
+}
+
+STDMETHODIMP Guest::COMGETTER(Sessions)(ComSafeArrayOut(IGuestSession *, aSessions))
+{
+    CheckComArgOutSafeArrayPointerValid(aSessions);
+
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    SafeIfaceArray<IGuestSession> collection(mData.mGuestSessions);
+    collection.detachTo(ComSafeArrayOutArg(aSessions));
 
     return S_OK;
@@ -1120,3 +1136,3 @@
                    0 /*fFlags*/, &TimeSpecTS);
 }
-/* vi: set tabstop=4 shiftwidth=4 expandtab: */
+
Index: trunk/src/VBox/Main/src-client/GuestProcessImpl.cpp
===================================================================
--- trunk/src/VBox/Main/src-client/GuestProcessImpl.cpp	(revision 42084)
+++ trunk/src/VBox/Main/src-client/GuestProcessImpl.cpp	(revision 42084)
@@ -0,0 +1,207 @@
+
+/* $Id$ */
+/** @file
+ * VirtualBox Main - XXX.
+ */
+
+/*
+ * Copyright (C) 2012 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+
+/*******************************************************************************
+*   Header Files                                                               *
+*******************************************************************************/
+#include "GuestProcessImpl.h"
+
+#include "Global.h"
+#include "AutoCaller.h"
+#include "Logging.h"
+
+
+// constructor / destructor
+/////////////////////////////////////////////////////////////////////////////
+
+DEFINE_EMPTY_CTOR_DTOR(GuestProcess)
+
+HRESULT GuestProcess::FinalConstruct(void)
+{
+    LogFlowThisFunc(("\n"));
+    return BaseFinalConstruct();
+}
+
+void GuestProcess::FinalRelease(void)
+{
+    LogFlowThisFuncEnter();
+    uninit();
+    BaseFinalRelease();
+    LogFlowThisFuncLeave();
+}
+
+// public initializer/uninitializer for internal purposes only
+/////////////////////////////////////////////////////////////////////////////
+
+HRESULT GuestProcess::init(void)
+{
+    /* Enclose the state transition NotReady->InInit->Ready. */
+    AutoInitSpan autoInitSpan(this);
+    AssertReturn(autoInitSpan.isOk(), E_FAIL);
+
+    /* Confirm a successful initialization when it's the case. */
+    autoInitSpan.setSucceeded();
+
+    return S_OK;
+}
+
+/**
+ * Uninitializes the instance.
+ * Called from FinalRelease().
+ */
+void GuestProcess::uninit(void)
+{
+    LogFlowThisFunc(("\n"));
+
+    /* Enclose the state transition Ready->InUninit->NotReady. */
+    AutoUninitSpan autoUninitSpan(this);
+    if (autoUninitSpan.uninitDone())
+        return;
+}
+
+// implementation of public getters/setters for attributes
+/////////////////////////////////////////////////////////////////////////////
+
+STDMETHODIMP GuestProcess::COMGETTER(Arguments)(ComSafeArrayOut(BSTR, aArguments))
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    CheckComArgOutSafeArrayPointerValid(aArguments);
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestProcess::COMGETTER(Environment)(ComSafeArrayOut(BSTR, aEnvironment))
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    CheckComArgOutSafeArrayPointerValid(aEnvironment);
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestProcess::COMGETTER(ExecutablePath)(BSTR *aExecutablePath)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestProcess::COMGETTER(ExitCode)(LONG *aExitCode)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestProcess::COMGETTER(PID)(ULONG *aPID)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestProcess::COMGETTER(Status)(ProcessStatus *aStatus)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+// implementation of public methods
+/////////////////////////////////////////////////////////////////////////////
+
+STDMETHODIMP GuestProcess::Read(ULONG aHandle, ULONG aSize, ULONG aTimeoutMS, ComSafeArrayOut(BYTE, aData))
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestProcess::Terminate(void)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestProcess::WaitFor(ComSafeArrayOut(ProcessWaitForFlag, aFlags), ULONG aTimeoutMS, ProcessWaitReason *aReason)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestProcess::Write(ULONG aHandle, ComSafeArrayIn(BYTE, aData), ULONG aTimeoutMS, ULONG *aWritten)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
Index: trunk/src/VBox/Main/src-client/GuestSessionImpl.cpp
===================================================================
--- trunk/src/VBox/Main/src-client/GuestSessionImpl.cpp	(revision 42084)
+++ trunk/src/VBox/Main/src-client/GuestSessionImpl.cpp	(revision 42084)
@@ -0,0 +1,667 @@
+
+/* $Id$ */
+/** @file
+ * VirtualBox Main - XXX.
+ */
+
+/*
+ * Copyright (C) 2012 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+
+/*******************************************************************************
+*   Header Files                                                               *
+*******************************************************************************/
+#include "GuestSessionImpl.h"
+
+#include "Global.h"
+#include "AutoCaller.h"
+#include "Logging.h"
+
+#include <VBox/com/array.h>
+
+
+// constructor / destructor
+/////////////////////////////////////////////////////////////////////////////
+
+DEFINE_EMPTY_CTOR_DTOR(GuestSession)
+
+HRESULT GuestSession::FinalConstruct(void)
+{
+    LogFlowThisFunc(("\n"));
+    return BaseFinalConstruct();
+}
+
+void GuestSession::FinalRelease(void)
+{
+    LogFlowThisFuncEnter();
+    uninit();
+    BaseFinalRelease();
+    LogFlowThisFuncLeave();
+}
+
+// public initializer/uninitializer for internal purposes only
+/////////////////////////////////////////////////////////////////////////////
+
+HRESULT GuestSession::init(const ComPtr<IGuest> pGuest,
+                           Utf8Str aUser, Utf8Str aPassword, Utf8Str aDomain, Utf8Str aName)
+{
+    /* Enclose the state transition NotReady->InInit->Ready. */
+    AutoInitSpan autoInitSpan(this);
+    AssertReturn(autoInitSpan.isOk(), E_FAIL);
+
+    mData.mParent = pGuest;
+
+    mData.mUser = aUser;
+    mData.mPassword = aPassword;
+    mData.mDomain = aDomain;
+    mData.mName = aName;
+
+    /* Confirm a successful initialization when it's the case. */
+    autoInitSpan.setSucceeded();
+
+    return S_OK;
+}
+
+/**
+ * Uninitializes the instance.
+ * Called from FinalRelease().
+ */
+void GuestSession::uninit(void)
+{
+    LogFlowThisFunc(("\n"));
+
+    /* Enclose the state transition Ready->InUninit->NotReady. */
+    AutoUninitSpan autoUninitSpan(this);
+    if (autoUninitSpan.uninitDone())
+        return;
+}
+
+// implementation of public getters/setters for attributes
+/////////////////////////////////////////////////////////////////////////////
+
+STDMETHODIMP GuestSession::COMGETTER(User)(BSTR *aUser)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    CheckComArgOutPointerValid(aUser);
+
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    mData.mUser.cloneTo(aUser);
+
+    return S_OK;
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::COMGETTER(Domain)(BSTR *aDomain)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    CheckComArgOutPointerValid(aDomain);
+
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    mData.mDomain.cloneTo(aDomain);
+
+    return S_OK;
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::COMGETTER(Name)(BSTR *aName)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    CheckComArgOutPointerValid(aName);
+
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    mData.mName.cloneTo(aName);
+
+    return S_OK;
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::COMGETTER(Id)(ULONG *aId)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    CheckComArgOutPointerValid(aId);
+
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    *aId = mData.mId;
+
+    return S_OK;
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::COMGETTER(Timeout)(ULONG *aTimeout)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    CheckComArgOutPointerValid(aTimeout);
+
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    *aTimeout = mData.mTimeout;
+
+    return S_OK;
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::COMGETTER(Environment)(ComSafeArrayOut(BSTR, aEnvironment))
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    CheckComArgOutSafeArrayPointerValid(aEnvironment);
+
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    com::SafeArray<BSTR> collection(mData.mEnvironment.size());
+    size_t s = 0;
+    for (SessionEnvironment::const_iterator it = mData.mEnvironment.begin();
+         it != mData.mEnvironment.end();
+         ++it, ++s)
+    {
+        /** @todo */
+    }
+
+    collection.detachTo(ComSafeArrayOutArg(aEnvironment));
+
+    return S_OK;
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::COMGETTER(Processes)(ComSafeArrayOut(IGuestProcess *, aProcesses))
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    CheckComArgOutSafeArrayPointerValid(aProcesses);
+
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    SafeIfaceArray<IGuestProcess> collection(mData.mProcesses);
+    collection.detachTo(ComSafeArrayOutArg(aProcesses));
+
+    return S_OK;
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::COMGETTER(Directories)(ComSafeArrayOut(IGuestDirectory *, aDirectories))
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    CheckComArgOutSafeArrayPointerValid(aDirectories);
+
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    SafeIfaceArray<IGuestDirectory> collection(mData.mDirectories);
+    collection.detachTo(ComSafeArrayOutArg(aDirectories));
+
+    return S_OK;
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::COMGETTER(Files)(ComSafeArrayOut(IGuestFile *, aFiles))
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    CheckComArgOutSafeArrayPointerValid(aFiles);
+
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    SafeIfaceArray<IGuestFile> collection(mData.mFiles);
+    collection.detachTo(ComSafeArrayOutArg(aFiles));
+
+    return S_OK;
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+// implementation of public methods
+/////////////////////////////////////////////////////////////////////////////
+
+STDMETHODIMP GuestSession::Close(void)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::CopyFrom(BSTR aSource, BSTR aDest, ComSafeArrayIn(ULONG, aFlags), IProgress **aProgress)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::CopyTo(BSTR aSource, BSTR aDest, ComSafeArrayIn(ULONG, aFlags), IProgress **aProgress)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::DirectoryCreate(BSTR aPath, ULONG aMode, ULONG aFlags, IGuestDirectory **aProgress)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::DirectoryCreateTemp(BSTR aTemplate, ULONG aMode, BSTR aName, IGuestDirectory **aDirectory)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::DirectoryExists(BSTR aPath, BOOL *aExists)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::DirectoryOpen(BSTR aPath, BSTR aFilter, BSTR aFlags, IGuestDirectory **aDirectory)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::DirectoryQueryInfo(BSTR aPath, IGuestFsObjInfo **aInfo)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::DirectoryRemove(BSTR aPath)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::DirectoryRemoveRecursive(BSTR aPath, ComSafeArrayIn(DirectoryRemoveRecFlag, aFlags), IProgress **aProgress)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::DirectoryRename(BSTR aSource, BSTR aDest, ComSafeArrayIn(DirectoryRenameFlag, aFlags))
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::DirectorySetACL(BSTR aPath, BSTR aACL)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::EnvironmentClear(void)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::EnvironmentSet(BSTR aName, BSTR aValue)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::EnvironmentSetArray(ComSafeArrayIn(BSTR, aValues))
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::EnvironmentUnset(BSTR aName)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::FileCreateTemp(BSTR aTemplate, ULONG aMode, BSTR aName, IGuestFile **aFile)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::FileExists(BSTR aPath, BOOL *aExists)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::FileOpen(BSTR aPath, BSTR aOpenMode, BSTR aDisposition, ULONG aCreationMode, LONG64 aOffset, IGuestFile **aFile)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::FileQueryInfo(BSTR aPath, IGuestFsObjInfo **aInfo)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::FileQuerySize(BSTR aPath, LONG64 *aSize)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::FileRemove(BSTR aPath)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::FileRename(BSTR aSource, BSTR aDest, ComSafeArrayIn(DirectoryRenameFlag, aFlags))
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::FileSetACL(BSTR aPath, BSTR aACL)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::ProcessCreate(BSTR aCommand, ComSafeArrayIn(BSTR, aArguments), ComSafeArrayIn(BSTR, aEnvironment),
+                                         ComSafeArrayIn(ProcessCreateFlag, aFlags), ULONG aTimeoutMS, IGuestProcess **IGuestProcess)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::ProcessCreateEx(BSTR aCommand, ComSafeArrayIn(BSTR, aArguments), ComSafeArrayIn(BSTR, aEnvironment),
+                                           ComSafeArrayIn(ProcessCreateFlag, aFlags), ULONG aTimeoutMS,
+                                           ProcessPriority aPriority, ComSafeArrayIn(ULONG, aAffinity),
+                                           IGuestProcess **IGuestProcess)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::ProcessGet(ULONG aPID, IGuestProcess **IGuestProcess)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::SetTimeout(ULONG aTimeoutMS)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::SymlinkCreate(BSTR aSource, BSTR aTarget, SymlinkType aType)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::SymlinkExists(BSTR aSymlink, BOOL *aExists)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::SymlinkRead(BSTR aSymlink, ComSafeArrayIn(SymlinkReadFlag, aFlags), BSTR *aTarget)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::SymlinkRemoveDirectory(BSTR aPath)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::SymlinkRemoveFile(BSTR aFile)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
Index: trunk/src/VBox/Main/src-client/SessionImpl.cpp
===================================================================
--- trunk/src/VBox/Main/src-client/SessionImpl.cpp	(revision 42083)
+++ trunk/src/VBox/Main/src-client/SessionImpl.cpp	(revision 42084)
@@ -493,6 +493,8 @@
         }
 
+#ifndef DEBUG_andy /* Don't bug me -- now time to fix this at the moment. */
         AssertReturn(mState == SessionState_Locked ||
-                      mState == SessionState_Spawning, VBOX_E_INVALID_VM_STATE);
+                     mState == SessionState_Spawning, VBOX_E_INVALID_VM_STATE);
+#endif
 
         /* close ourselves */
