Index: /trunk/src/VBox/Storage/testcase/vbox-img.cpp
===================================================================
--- /trunk/src/VBox/Storage/testcase/vbox-img.cpp	(revision 43602)
+++ /trunk/src/VBox/Storage/testcase/vbox-img.cpp	(revision 43603)
@@ -65,4 +65,5 @@
                  "                [--format VDI|VMDK|VHD] (default: VDI)\n"
                  "                [--variant Standard,Fixed,Split2G,Stream,ESX]\n"
+                 "                [--dataalignment <alignment in bytes>]\n"
                  "\n"
                  "   repair       --filename <filename>\n"
@@ -1297,4 +1298,40 @@
 }
 
+static DECLCALLBACK(bool) vdIfCfgCreateBaseAreKeysValid(void *pvUser, const char *pszzValid)
+{
+    return VINF_SUCCESS; /** @todo: Implement. */
+}
+
+static DECLCALLBACK(int) vdIfCfgCreateBaseQuerySize(void *pvUser, const char *pszName, size_t *pcbValue)
+{
+    AssertReturn(VALID_PTR(pcbValue), VERR_INVALID_POINTER);
+
+    AssertPtrReturn(pvUser, VERR_GENERAL_FAILURE);
+
+    if (RTStrCmp(pszName, "DataAlignment"))
+        return VERR_CFGM_VALUE_NOT_FOUND;
+
+    *pcbValue = strlen((const char *)pvUser) + 1 /* include terminator */;
+
+    return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vdIfCfgCreateBaseQuery(void *pvUser, const char *pszName, char *pszValue, size_t cchValue)
+{
+    AssertReturn(VALID_PTR(pszValue), VERR_INVALID_POINTER);
+
+    AssertPtrReturn(pvUser, VERR_GENERAL_FAILURE);
+
+    if (RTStrCmp(pszName, "DataAlignment"))
+        return VERR_CFGM_VALUE_NOT_FOUND;
+
+    if (strlen((const char *)pvUser) >= cchValue)
+        return VERR_CFGM_NOT_ENOUGH_SPACE;
+
+    memcpy(pszValue, pvUser, strlen((const char *)pvUser) + 1);
+
+    return VINF_SUCCESS;
+
+}
 
 int handleCreateBase(HandlerArg *a)
@@ -1307,5 +1344,8 @@
     unsigned uImageFlags = VD_IMAGE_FLAGS_NONE;
     uint64_t cbSize = 0;
+    const char *pszDataAlignment = NULL;
     VDGEOMETRY LCHSGeometry, PCHSGeometry;
+    PVDINTERFACE pVDIfsOperation = NULL;
+    VDINTERFACECONFIG vdIfCfg;
 
     memset(&LCHSGeometry, 0, sizeof(VDGEOMETRY));
@@ -1315,8 +1355,9 @@
     static const RTGETOPTDEF s_aOptions[] =
     {
-        { "--filename", 'f', RTGETOPT_REQ_STRING },
-        { "--size",     's', RTGETOPT_REQ_UINT64 },
-        { "--format",   'b', RTGETOPT_REQ_STRING },
-        { "--variant",  'v', RTGETOPT_REQ_STRING }
+        { "--filename",       'f', RTGETOPT_REQ_STRING },
+        { "--size",           's', RTGETOPT_REQ_UINT64 },
+        { "--format",         'b', RTGETOPT_REQ_STRING },
+        { "--variant",        'v', RTGETOPT_REQ_STRING },
+        { "--dataalignment",  'a', RTGETOPT_REQ_STRING }
     };
     int ch;
@@ -1344,4 +1385,8 @@
                 break;
 
+            case 'a':   // --dataalignment
+                pszDataAlignment = ValueUnion.psz;
+                break;
+
             default:
                 ch = RTGetOptPrintError(ch, &ValueUnion);
@@ -1365,4 +1410,14 @@
     }
 
+    /* Setup the config interface if required. */
+    if (pszDataAlignment)
+    {
+        vdIfCfg.pfnAreKeysValid = vdIfCfgCreateBaseAreKeysValid;
+        vdIfCfg.pfnQuerySize    = vdIfCfgCreateBaseQuerySize;
+        vdIfCfg.pfnQuery        = vdIfCfgCreateBaseQuery;
+        VDInterfaceAdd(&vdIfCfg.Core, "Config", VDINTERFACETYPE_CONFIG, (void *)pszDataAlignment,
+                       sizeof(vdIfCfg), &pVDIfsOperation);
+    }
+
     /* just try it */
     rc = VDCreate(pVDIfs, VDTYPE_HDD, &pDisk);
@@ -1372,5 +1427,5 @@
     rc = VDCreateBase(pDisk, pszBackend, pszFilename, cbSize, uImageFlags,
                       NULL, &PCHSGeometry, &LCHSGeometry, NULL, VD_OPEN_FLAGS_NORMAL,
-                      NULL, NULL);
+                      NULL, pVDIfsOperation);
     if (RT_FAILURE(rc))
         return errorRuntime("Error while creating the virtual disk: %Rrc\n", rc);
