Index: /trunk/src/VBox/Main/GuestImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/GuestImpl.cpp	(revision 35060)
+++ /trunk/src/VBox/Main/GuestImpl.cpp	(revision 35061)
@@ -346,4 +346,5 @@
                             ULONG uBytesWritten;
                             rc = pGuest->SetProcessInput(uPID, uFlags,
+                                                         5 * 1000 /* Wait 5s for getting the input data transfered. */,
                                                          ComSafeArrayAsInParam(aInputData), &uBytesWritten);
                             if (FAILED(rc))
@@ -606,4 +607,5 @@
                                     ULONG uBytesWritten;
                                     rc = pGuest->SetProcessInput(uPID, uFlags,
+                                                                 5 * 1000 /* Wait 5s for getting the input data transfered. */,
                                                                  ComSafeArrayAsInParam(aInputData), &uBytesWritten);
                                     if (FAILED(rc))
@@ -622,4 +624,10 @@
                                     Assert(cbLength >= uBytesWritten);
                                     cbLength -= uBytesWritten;
+                                }
+                                else if (RT_FAILURE(vrc))
+                                {
+                                    rc = TaskGuest::setProgressErrorInfo(VBOX_E_IPRT_ERROR, aTask->progress,
+                                                                         Guest::tr("Error while reading setup file \"%s\" (To read: %u, Size: %u) from installation medium (%Rrc)"),
+                                                                         installerImage.c_str(), cbToRead, cbLength, vrc);
                                 }
                             }
@@ -2156,5 +2164,5 @@
 }
 
-STDMETHODIMP Guest::SetProcessInput(ULONG aPID, ULONG aFlags, ComSafeArrayIn(BYTE, aData), ULONG *aBytesWritten)
+STDMETHODIMP Guest::SetProcessInput(ULONG aPID, ULONG aFlags, ULONG aTimeoutMS, ComSafeArrayIn(BYTE, aData), ULONG *aBytesWritten)
 {
 #ifndef VBOX_WITH_GUEST_CONTROL
@@ -2217,4 +2225,8 @@
             if (FAILED(rc)) return rc;
 
+            /* Adjust timeout. */
+            if (aTimeoutMS == 0)
+                aTimeoutMS = UINT32_MAX;
+
             PCALLBACKDATAEXECINSTATUS pData = (PCALLBACKDATAEXECINSTATUS)RTMemAlloc(sizeof(CALLBACKDATAEXECINSTATUS));
             AssertReturn(pData, VBOX_E_IPRT_ERROR);
@@ -2278,5 +2290,5 @@
 
                     /* Wait until operation completed. */
-                    rc = it->second.pProgress->WaitForCompletion(UINT32_MAX /* Wait forever */);
+                    rc = it->second.pProgress->WaitForCompletion(aTimeoutMS);
                     if (FAILED(rc)) throw rc;
 
@@ -2385,5 +2397,5 @@
         if (FAILED(rc)) return rc;
 
-        /* Adjust timeout */
+        /* Adjust timeout. */
         if (aTimeoutMS == 0)
             aTimeoutMS = UINT32_MAX;
Index: /trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 35060)
+++ /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 35061)
@@ -7938,5 +7938,5 @@
   <interface
     name="IGuest" extends="$unknown"
-    uuid="1039b0cc-9bc1-4c6d-8d12-864aa48aa5b9"
+    uuid="7ce7e4d8-cdaa-4d83-a0f4-510c8ee70aea"
     wsmap="managed"
     >
@@ -8327,4 +8327,10 @@
         <desc>
           Not used, must be set to zero.
+        </desc>
+      </param>
+      <param name="timeoutMS" type="unsigned long" dir="in">
+        <desc>
+          The maximum timeout value (in msec) to wait for getting the
+          data transfered to the guest. Pass 0 for an infinite timeout.
         </desc>
       </param>
Index: /trunk/src/VBox/Main/include/GuestImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/GuestImpl.h	(revision 35060)
+++ /trunk/src/VBox/Main/include/GuestImpl.h	(revision 35061)
@@ -99,5 +99,5 @@
                               ULONG aTimeoutMS, ULONG *aPID, IProgress **aProgress);
     STDMETHOD(GetProcessOutput)(ULONG aPID, ULONG aFlags, ULONG aTimeoutMS, LONG64 aSize, ComSafeArrayOut(BYTE, aData));
-    STDMETHOD(SetProcessInput)(ULONG aPID, ULONG aFlags, ComSafeArrayIn(BYTE, aData), ULONG *aBytesWritten);
+    STDMETHOD(SetProcessInput)(ULONG aPID, ULONG aFlags, ULONG aTimeoutMS, ComSafeArrayIn(BYTE, aData), ULONG *aBytesWritten);
     STDMETHOD(GetProcessStatus)(ULONG aPID, ULONG *aExitCode, ULONG *aFlags, ULONG *aStatus);
     STDMETHOD(CopyToGuest)(IN_BSTR aSource, IN_BSTR aDest, IN_BSTR aUserName, IN_BSTR aPassword, ULONG aFlags, IProgress **aProgress);
