Index: /trunk/src/VBox/Additions/common/VBoxService/VBoxServiceControl.h
===================================================================
--- /trunk/src/VBox/Additions/common/VBoxService/VBoxServiceControl.h	(revision 84149)
+++ /trunk/src/VBox/Additions/common/VBoxService/VBoxServiceControl.h	(revision 84150)
@@ -337,4 +337,5 @@
  * @{ */
 extern int                      VgsvcGstCtrlSessionStartupInfoInit(PVBOXSERVICECTRLSESSIONSTARTUPINFO pStartupInfo);
+extern int                      VgsvcGstCtrlSessionStartupInfoInitEx(PVBOXSERVICECTRLSESSIONSTARTUPINFO pStartupInfo, size_t cbUser, size_t cbPassword, size_t cbDomain);
 extern void                     VgsvcGstCtrlSessionStartupInfoDestroy(PVBOXSERVICECTRLSESSIONSTARTUPINFO pStartupInfo);
 
@@ -352,5 +353,5 @@
  * @{ */
 extern int                      VgsvcGstCtrlProcessStartupInfoInit(PVBOXSERVICECTRLPROCSTARTUPINFO pStartupInfo);
-extern int                      VgsvcGstCtrlProcessStartupInfoInitEx(PVBOXSERVICECTRLPROCSTARTUPINFO pStartupInfo, size_t cbEnv, size_t cbArgs);
+extern int                      VgsvcGstCtrlProcessStartupInfoInitEx(PVBOXSERVICECTRLPROCSTARTUPINFO pStartupInfo, size_t cbCmd, size_t cbUser, size_t cbPassword, size_t cbDomain, size_t cbArgs, size_t cbEnv);
 extern void                     VgsvcGstCtrlProcessStartupInfoDestroy(PVBOXSERVICECTRLPROCSTARTUPINFO pStartupInfo);
 extern void                     VgsvcGstCtrlProcessStartupInfoFree(PVBOXSERVICECTRLPROCSTARTUPINFO pStartupInfo);
Index: /trunk/src/VBox/Additions/common/VBoxService/VBoxServiceControlProcess.cpp
===================================================================
--- /trunk/src/VBox/Additions/common/VBoxService/VBoxServiceControlProcess.cpp	(revision 84149)
+++ /trunk/src/VBox/Additions/common/VBoxService/VBoxServiceControlProcess.cpp	(revision 84150)
@@ -66,11 +66,21 @@
  * @returns VBox status code.
  * @param   pStartupInfo        Process startup info to initializes.
+ * @param   cbCmd               Size (in bytes) to use for the command buffer.
+ * @param   cbUser              Size (in bytes) to use for the user name buffer.
+ * @param   cbPassword          Size (in bytes) to use for the password buffer.
+ * @param   cbDomain            Size (in bytes) to use for the domain buffer.
  * @param   cbArgs              Size (in bytes) to use for the arguments buffer.
  * @param   cbEnv               Size (in bytes) to use for the environment buffer.
  */
 int VgsvcGstCtrlProcessStartupInfoInitEx(PVBOXSERVICECTRLPROCSTARTUPINFO pStartupInfo,
+                                         size_t cbCmd,
+                                         size_t cbUser, size_t cbPassword, size_t cbDomain,
                                          size_t cbArgs, size_t cbEnv)
 {
     AssertPtrReturn(pStartupInfo, VERR_INVALID_POINTER);
+    AssertReturn(cbCmd,           VERR_INVALID_PARAMETER);
+    AssertReturn(cbUser,          VERR_INVALID_PARAMETER);
+    AssertReturn(cbPassword,      VERR_INVALID_PARAMETER);
+    AssertReturn(cbDomain,        VERR_INVALID_PARAMETER);
     AssertReturn(cbArgs,          VERR_INVALID_PARAMETER);
     AssertReturn(cbEnv,           VERR_INVALID_PARAMETER);
@@ -88,10 +98,10 @@
     do
     {
-        ALLOC_STR(Cmd,      sizeof(char) * GUESTPROCESS_MAX_CMD_LEN);
+        ALLOC_STR(Cmd,      cbCmd);
         ALLOC_STR(Args,     cbArgs);
         ALLOC_STR(Env,      cbEnv);
-        ALLOC_STR(User,     sizeof(char) * GUESTPROCESS_MAX_USER_LEN);
-        ALLOC_STR(Password, sizeof(char) * GUESTPROCESS_MAX_PASSWORD_LEN);
-        ALLOC_STR(Domain,   sizeof(char) * GUESTPROCESS_MAX_DOMAIN_LEN);
+        ALLOC_STR(User,     cbUser);
+        ALLOC_STR(Password, cbPassword);
+        ALLOC_STR(Domain,   cbDomain);
 
         return VINF_SUCCESS;
@@ -113,4 +123,7 @@
 {
     return VgsvcGstCtrlProcessStartupInfoInitEx(pStartupInfo,
+                                                GUESTPROCESS_MAX_CMD_LEN,
+                                                GUESTPROCESS_MAX_USER_LEN,  GUESTPROCESS_MAX_PASSWORD_LEN,
+                                                GUESTPROCESS_MAX_DOMAIN_LEN,
                                                 GUESTPROCESS_MAX_ARGS_LEN, GUESTPROCESS_MAX_ENV_LEN);
 }
@@ -179,4 +192,12 @@
     if (pStartupInfo->cb##a_Str) \
     { \
+        pStartupInfoDup->psz##a_Str = (char *)RTStrDup(pStartupInfo->psz##a_Str); \
+        AssertPtrBreak(pStartupInfoDup->psz##a_Str); \
+        pStartupInfoDup->cb##a_Str  = strlen(pStartupInfoDup->psz##a_Str) + 1 /* Include terminator */; \
+    }
+
+#define DUP_MEM(a_Str) \
+    if (pStartupInfo->cb##a_Str) \
+    { \
         pStartupInfoDup->psz##a_Str = (char *)RTMemDup(pStartupInfo->psz##a_Str, pStartupInfo->cb##a_Str); \
         AssertPtrBreak(pStartupInfoDup->psz##a_Str); \
@@ -185,6 +206,6 @@
 
             DUP_STR(Cmd);
-            DUP_STR(Args);
-            DUP_STR(Env);
+            DUP_MEM(Args);
+            DUP_MEM(Env);
             DUP_STR(User);
             DUP_STR(Password);
@@ -192,4 +213,5 @@
 
 #undef DUP_STR
+#undef DUP_MEM
 
             return pStartupInfoDup;
Index: /trunk/src/VBox/Additions/common/VBoxService/VBoxServiceControlSession.cpp
===================================================================
--- /trunk/src/VBox/Additions/common/VBoxService/VBoxServiceControlSession.cpp	(revision 84149)
+++ /trunk/src/VBox/Additions/common/VBoxService/VBoxServiceControlSession.cpp	(revision 84150)
@@ -1035,10 +1035,14 @@
 
 /**
- * Initializes a session startup info.
+ * Initializes a session startup info, extended version.
  *
  * @returns VBox status code.
  * @param   pStartupInfo        Session startup info to initializes.
- */
-int VgsvcGstCtrlSessionStartupInfoInit(PVBOXSERVICECTRLSESSIONSTARTUPINFO pStartupInfo)
+ * @param   cbUser              Size (in bytes) to use for the user name buffer.
+ * @param   cbPassword          Size (in bytes) to use for the password buffer.
+ * @param   cbDomain            Size (in bytes) to use for the domain name buffer.
+ */
+int VgsvcGstCtrlSessionStartupInfoInitEx(PVBOXSERVICECTRLSESSIONSTARTUPINFO pStartupInfo,
+                                         size_t cbUser, size_t cbPassword, size_t cbDomain)
 {
     AssertPtrReturn(pStartupInfo, VERR_INVALID_POINTER);
@@ -1056,7 +1060,7 @@
     do
     {
-        ALLOC_STR(User,     sizeof(char) * GUESTPROCESS_MAX_USER_LEN);
-        ALLOC_STR(Password, sizeof(char) * GUESTPROCESS_MAX_PASSWORD_LEN);
-        ALLOC_STR(Domain,   sizeof(char) * GUESTPROCESS_MAX_DOMAIN_LEN);
+        ALLOC_STR(User,     cbUser);
+        ALLOC_STR(Password, cbPassword);
+        ALLOC_STR(Domain,   cbDomain);
 
         return VINF_SUCCESS;
@@ -1068,4 +1072,17 @@
     VgsvcGstCtrlSessionStartupInfoDestroy(pStartupInfo);
     return VERR_NO_MEMORY;
+}
+
+/**
+ * Initializes a session startup info.
+ *
+ * @returns VBox status code.
+ * @param   pStartupInfo        Session startup info to initializes.
+ */
+int VgsvcGstCtrlSessionStartupInfoInit(PVBOXSERVICECTRLSESSIONSTARTUPINFO pStartupInfo)
+{
+    return VgsvcGstCtrlSessionStartupInfoInitEx(pStartupInfo,
+                                                GUESTPROCESS_MAX_USER_LEN, GUESTPROCESS_MAX_PASSWORD_LEN,
+                                                GUESTPROCESS_MAX_DOMAIN_LEN);
 }
 
@@ -1127,7 +1144,7 @@
     if (pStartupInfo->cb##a_Str) \
     { \
-        pStartupInfoDup->psz##a_Str = (char *)RTMemDup(pStartupInfo->psz##a_Str, pStartupInfo->cb##a_Str); \
+        pStartupInfoDup->psz##a_Str = (char *)RTStrDup(pStartupInfo->psz##a_Str); \
         AssertPtrBreak(pStartupInfoDup->psz##a_Str); \
-        pStartupInfoDup->cb##a_Str  = pStartupInfo->cb##a_Str; \
+        pStartupInfoDup->cb##a_Str  = strlen(pStartupInfoDup->psz##a_Str) + 1 /* Include terminator */; \
     }
             DUP_STR(User);
