diff --git a/block/vhdx.c b/block/vhdx.c
index 5390ba6..106ea7a 100644
--- a/block/vhdx.c
+++ b/block/vhdx.c
@@ -1708,8 +1708,7 @@ exit:
  *    .---- ~ ----------- ~ ------------ ~ ---------------- ~ -----------.
  *   1MB
  */
-static int vhdx_create(const char *filename, QEMUOptionParameter *options,
-                       Error **errp)
+static int vhdx_create(const char *filename, QemuOpts *options, Error **errp)
 {
     int ret = 0;
     uint64_t image_size = (uint64_t) 2 * GiB;
@@ -1726,20 +1725,11 @@ static int vhdx_create(const char *filename, QEMUOptionParameter *options,
     VHDXImageType image_type;
     Error *local_err = NULL;
 
-    while (options && options->name) {
-        if (!strcmp(options->name, BLOCK_OPT_SIZE)) {
-            image_size = options->value.n;
-        } else if (!strcmp(options->name, VHDX_BLOCK_OPT_LOG_SIZE)) {
-            log_size = options->value.n;
-        } else if (!strcmp(options->name, VHDX_BLOCK_OPT_BLOCK_SIZE)) {
-            block_size = options->value.n;
-        } else if (!strcmp(options->name, BLOCK_OPT_SUBFMT)) {
-            type = options->value.s;
-        } else if (!strcmp(options->name, VHDX_BLOCK_OPT_ZERO)) {
-            use_zero_blocks = options->value.n != 0;
-        }
-        options++;
-    }
+    image_size = qemu_opt_get_size(options, BLOCK_OPT_SIZE, 0);
+    log_size = qemu_opt_get_size(options, VHDX_BLOCK_OPT_LOG_SIZE, 0);
+    block_size = qemu_opt_get_size(options, VHDX_BLOCK_OPT_BLOCK_SIZE, 0);
+    type = qemu_opt_get(options, BLOCK_OPT_SUBFMT);
+    use_zero_blocks = qemu_opt_get_bool(options, VHDX_BLOCK_OPT_ZERO, false);
 
     if (image_size > VHDX_MAX_IMAGE_SIZE) {
         error_setg_errno(errp, EINVAL, "Image size too large; max of 64TB");
@@ -1870,37 +1860,41 @@ static int vhdx_check(BlockDriverState *bs, BdrvCheckResult *result,
     return 0;
 }
 
-static QEMUOptionParameter vhdx_create_options[] = {
-    {
-        .name = BLOCK_OPT_SIZE,
-        .type = OPT_SIZE,
-        .help = "Virtual disk size; max of 64TB."
-    },
-    {
-        .name = VHDX_BLOCK_OPT_LOG_SIZE,
-        .type = OPT_SIZE,
-        .value.n = 1 * MiB,
-        .help = "Log size; min 1MB."
-    },
-    {
-        .name = VHDX_BLOCK_OPT_BLOCK_SIZE,
-        .type = OPT_SIZE,
-        .value.n = 0,
-        .help = "Block Size; min 1MB, max 256MB. " \
-                "0 means auto-calculate based on image size."
-    },
-    {
-        .name = BLOCK_OPT_SUBFMT,
-        .type = OPT_STRING,
-        .help = "VHDX format type, can be either 'dynamic' or 'fixed'. "\
-                "Default is 'dynamic'."
-    },
-    {
-        .name = VHDX_BLOCK_OPT_ZERO,
-        .type = OPT_FLAG,
-        .help = "Force use of payload blocks of type 'ZERO'.  Non-standard."
+static QemuOptsList vhdx_create_options = {
+    .name = "vhdx_create_options",
+    .head = QTAILQ_HEAD_INITIALIZER(vhdx_create_options.head),
+    .desc = {
+        {
+            .name = BLOCK_OPT_SIZE,
+            .type = QEMU_OPT_SIZE,
+            .help = "Virtual disk size; max of 64TB."
+        },
+        {
+            .name = VHDX_BLOCK_OPT_LOG_SIZE,
+            .type = QEMU_OPT_SIZE,
+            .def_val = QEMU_OPT_VAL_SIZE(1 * MiB),
+            .help = "Log size; min 1MB."
+        },
+        {
+            .name = VHDX_BLOCK_OPT_BLOCK_SIZE,
+            .type = QEMU_OPT_SIZE,
+            .def_val = QEMU_OPT_VAL_SIZE(0),
+            .help = "Block Size; min 1MB, max 256MB. " \
+            "0 means auto-calculate based on image size."
+        },
+        {
+            .name = BLOCK_OPT_SUBFMT,
+            .type = QEMU_OPT_STRING,
+            .help = "VHDX format type, can be either 'dynamic' or 'fixed'. "\
+            "Default is 'dynamic'."
+        },
+        {
+            .name = VHDX_BLOCK_OPT_ZERO,
+            .type = QEMU_OPT_BOOL,
+            .help = "Force use of payload blocks of type 'ZERO'.  Non-standard."
+        },
+        { NULL }
     },
-    { NULL }
 };
 
 static BlockDriver bdrv_vhdx = {
@@ -1916,7 +1910,7 @@ static BlockDriver bdrv_vhdx = {
     .bdrv_get_info          = vhdx_get_info,
     .bdrv_check             = vhdx_check,
 
-    .create_options         = vhdx_create_options,
+    .create_options         = &vhdx_create_options,
 };
 
 static void bdrv_vhdx_init(void)
