[PATCH 06/13] reg: Parse data types and import REG_SZ data via the state machine

Hugh McMaster hugh.mcmaster at outlook.com
Fri Aug 18 04:30:28 CDT 2017


Signed-off-by: Hugh McMaster <hugh.mcmaster at outlook.com>
---
 programs/reg/import.c    | 129 +++++++++++++++++-
 programs/reg/tests/reg.c | 330 +++++++++++++++++++++++------------------------
 2 files changed, 290 insertions(+), 169 deletions(-)

diff --git a/programs/reg/import.c b/programs/reg/import.c
index ca09be4deb..e5ed93e5af 100644
--- a/programs/reg/import.c
+++ b/programs/reg/import.c
@@ -17,7 +17,9 @@
  */
 
 #include <windows.h>
+#include <errno.h>
 #include <stdio.h>
+#include <stdlib.h>
 
 #include <wine/unicode.h>
 #include <wine/debug.h>
@@ -52,6 +54,8 @@ enum parser_state
     DEFAULT_VALUE_NAME,  /* parsing a default value name */
     QUOTED_VALUE_NAME,   /* parsing a double-quoted value name */
     DATA_START,          /* preparing for data parsing operations */
+    DATA_TYPE,           /* parsing the registry data type */
+    STRING_DATA,         /* parsing REG_SZ data */
     SET_VALUE,           /* adding a value to the registry */
     NB_PARSER_STATES
 };
@@ -65,6 +69,7 @@ struct parser
     HKEY               hkey;           /* current registry key */
     WCHAR             *key_name;       /* current key name */
     WCHAR             *value_name;     /* value name */
+    DWORD              parse_type;     /* generic data type for parsing */
     DWORD              data_type;      /* data type */
     void              *data;           /* value data */
     DWORD              data_size;      /* size of the data (in bytes) */
@@ -81,6 +86,8 @@ static WCHAR *key_name_state(struct parser *parser, WCHAR *pos);
 static WCHAR *default_value_name_state(struct parser *parser, WCHAR *pos);
 static WCHAR *quoted_value_name_state(struct parser *parser, WCHAR *pos);
 static WCHAR *data_start_state(struct parser *parser, WCHAR *pos);
+static WCHAR *data_type_state(struct parser *parser, WCHAR *pos);
+static WCHAR *string_data_state(struct parser *parser, WCHAR *pos);
 static WCHAR *set_value_state(struct parser *parser, WCHAR *pos);
 
 static const parser_state_func parser_funcs[NB_PARSER_STATES] =
@@ -92,6 +99,8 @@ static const parser_state_func parser_funcs[NB_PARSER_STATES] =
     default_value_name_state,  /* DEFAULT_VALUE_NAME */
     quoted_value_name_state,   /* QUOTED_VALUE_NAME */
     data_start_state,          /* DATA_START */
+    data_type_state,           /* DATA_TYPE */
+    string_data_state,         /* STRING_DATA */
     set_value_state,           /* SET_VALUE */
 };
 
@@ -103,6 +112,62 @@ static inline enum parser_state set_state(struct parser *parser, enum parser_sta
     return ret;
 }
 
+/******************************************************************************
+ * Parses the data type of the registry value being imported and modifies
+ * the input parameter to skip the string representation of the data type.
+ *
+ * Returns TRUE or FALSE to indicate whether a data type was found.
+ */
+static BOOL parse_data_type(struct parser *parser, WCHAR **line)
+{
+    struct data_type { const WCHAR *tag; int len; int type; int parse_type; };
+
+    static const WCHAR quote[] = {'"'};
+    static const WCHAR hex[] = {'h','e','x',':'};
+    static const WCHAR dword[] = {'d','w','o','r','d',':'};
+    static const WCHAR hexp[] = {'h','e','x','('};
+
+    static const struct data_type data_types[] = {
+    /*    tag    len  type         parse type    */
+        { quote,  1,  REG_SZ,      REG_SZ },
+        { hex,    4,  REG_BINARY,  REG_BINARY },
+        { dword,  6,  REG_DWORD,   REG_DWORD },
+        { hexp,   4,  -1,          REG_BINARY }, /* REG_NONE, REG_EXPAND_SZ, REG_MULTI_SZ */
+        { NULL,   0,  0,           0 }
+    };
+
+    const struct data_type *ptr;
+
+    for (ptr = data_types; ptr->tag; ptr++)
+    {
+        if (strncmpW(ptr->tag, *line, ptr->len))
+            continue;
+
+        parser->parse_type = ptr->parse_type;
+        parser->data_type = ptr->parse_type;
+        *line += ptr->len;
+
+        if (ptr->type == -1)
+        {
+            WCHAR *end;
+            DWORD val;
+
+            if (!**line || tolowerW((*line)[1]) == 'x')
+                return FALSE;
+
+            /* "hex(xx):" is special */
+            val = wcstoul(*line, &end, 16);
+            if (*end != ')' || *(end + 1) != ':' || (val == ~0u && errno == ERANGE))
+                return FALSE;
+
+            parser->data_type = val;
+            *line = end + 2;
+        }
+        return TRUE;
+    }
+    return FALSE;
+}
+
 /******************************************************************************
  * Replaces escape sequences with their character equivalents and
  * null-terminates the string on the first non-escaped double quote.
@@ -430,13 +495,69 @@ static WCHAR *data_start_state(struct parser *parser, WCHAR *pos)
     while (len > 0 && (p[len - 1] == ' ' || p[len - 1] == '\t')) len--;
     p[len] = 0;
 
-    /* FIXME: data parsing not yet implemented */
+    if (*p == '-')
+    {
+        FIXME("value deletion not yet implemented\n");
+        goto invalid;
+    }
+    else
+        set_state(parser, DATA_TYPE);
+    return p;
 
 invalid:
     set_state(parser, LINE_START);
     return p;
 }
 
+/* handler for parser DATA_TYPE state */
+static WCHAR *data_type_state(struct parser *parser, WCHAR *pos)
+{
+    WCHAR *line = pos;
+
+    if (!parse_data_type(parser, &line))
+    {
+        set_state(parser, LINE_START);
+        return line;
+    }
+
+    switch (parser->parse_type)
+    {
+    case REG_SZ:
+        set_state(parser, STRING_DATA);
+        break;
+    case REG_DWORD:
+    case REG_BINARY: /* all hex data types, including undefined */
+    default:
+        set_state(parser, LINE_START);
+    }
+
+    return line;
+}
+
+/* handler for parser STRING_DATA state */
+static WCHAR *string_data_state(struct parser *parser, WCHAR *pos)
+{
+    WCHAR *line;
+
+    parser->data = pos;
+
+    if (!unescape_string(parser->data, &line))
+        goto invalid;
+
+    while (*line == ' ' || *line == '\t') line++;
+    if (*line && *line != ';') goto invalid;
+
+    parser->data_size = (lstrlenW(parser->data) + 1) * sizeof(WCHAR);
+
+    set_state(parser, SET_VALUE);
+    return line;
+
+invalid:
+    free_parser_data(parser);
+    set_state(parser, LINE_START);
+    return line;
+}
+
 /* handler for parser SET_VALUE state */
 static WCHAR *set_value_state(struct parser *parser, WCHAR *pos)
 {
@@ -445,7 +566,10 @@ static WCHAR *set_value_state(struct parser *parser, WCHAR *pos)
 
     free_parser_data(parser);
 
-    set_state(parser, PARSE_WIN31_LINE);
+    if (parser->reg_version == REG_VERSION_31)
+        set_state(parser, PARSE_WIN31_LINE);
+    else
+        set_state(parser, LINE_START);
 
     return pos;
 }
@@ -591,6 +715,7 @@ int reg_import(const WCHAR *filename)
     parser.hkey          = NULL;
     parser.key_name      = NULL;
     parser.value_name    = NULL;
+    parser.parse_type    = 0;
     parser.data_type     = 0;
     parser.data          = NULL;
     parser.data_size     = 0;
diff --git a/programs/reg/tests/reg.c b/programs/reg/tests/reg.c
index 8969e9dbb8..d2e1f151a0 100644
--- a/programs/reg/tests/reg.c
+++ b/programs/reg/tests/reg.c
@@ -822,7 +822,7 @@ static void test_import(void)
     ok(err == ERROR_SUCCESS, "got %d, expected 0\n", err);
 
     todo_wine verify_reg(hkey, "Wine", REG_DWORD, &dword, sizeof(dword), 0);
-    todo_wine verify_reg(hkey, "", REG_SZ, test_string, sizeof(test_string), 0);
+    verify_reg(hkey, "", REG_SZ, test_string, sizeof(test_string), 0);
 
     err = RegCloseKey(hkey);
     ok(err == ERROR_SUCCESS, "got %d, expected 0\n", err);
@@ -977,19 +977,19 @@ static void test_import(void)
                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                     "\"Test1\"=\"Value1\"\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Test1", REG_SZ, "Value1", 7, 0);
+    verify_reg(hkey, "Test1", REG_SZ, "Value1", 7, 0);
 
     test_import_str("REGEDIT4\n"
                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                     "\"Test2\"=\"Value2\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Test2", REG_SZ, "Value2", 7, 0);
+    verify_reg(hkey, "Test2", REG_SZ, "Value2", 7, 0);
 
     test_import_str("REGEDIT4\n\n"
                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                     "\"Test3\"=\"Value3\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Test3", REG_SZ, "Value3", 7, 0);
+    verify_reg(hkey, "Test3", REG_SZ, "Value3", 7, 0);
 
     test_import_str("Windows Registry Editor Version 4.00\n", &r);
     ok(r == REG_EXIT_FAILURE || broken(r == REG_EXIT_SUCCESS) /* WinXP */,
@@ -1002,19 +1002,19 @@ static void test_import(void)
                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                     "\"Test4\"=\"Value4\"\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Test4", REG_SZ, "Value4", 7, 0);
+    verify_reg(hkey, "Test4", REG_SZ, "Value4", 7, 0);
 
     test_import_str("Windows Registry Editor Version 5.00\n"
                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                     "\"Test5\"=\"Value5\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Test5", REG_SZ, "Value5", 7, 0);
+    verify_reg(hkey, "Test5", REG_SZ, "Value5", 7, 0);
 
     test_import_str("Windows Registry Editor Version 5.00\n\n"
                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                     "\"Test6\"=\"Value6\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Test6", REG_SZ, "Value6", 7, 0);
+    verify_reg(hkey, "Test6", REG_SZ, "Value6", 7, 0);
 
     test_import_str("REGEDIT4\n\n"
                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -1023,10 +1023,10 @@ static void test_import(void)
                     "\"Line3\"=\"Value3\"\n\n\n\n"
                     "\"Line4\"=\"Value4\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Line1", REG_SZ, "Value1", 7, TODO_REG_TYPE|TODO_REG_SIZE|TODO_REG_DATA);
-    todo_wine verify_reg(hkey, "Line2", REG_SZ, "Value2", 7, TODO_REG_TYPE|TODO_REG_SIZE|TODO_REG_DATA);
-    todo_wine verify_reg(hkey, "Line3", REG_SZ, "Value3", 7, TODO_REG_TYPE|TODO_REG_SIZE|TODO_REG_DATA);
-    todo_wine verify_reg(hkey, "Line4", REG_SZ, "Value4", 7, TODO_REG_TYPE|TODO_REG_SIZE|TODO_REG_DATA);
+    verify_reg(hkey, "Line1", REG_SZ, "Value1", 7, 0);
+    verify_reg(hkey, "Line2", REG_SZ, "Value2", 7, 0);
+    verify_reg(hkey, "Line3", REG_SZ, "Value3", 7, 0);
+    verify_reg(hkey, "Line4", REG_SZ, "Value4", 7, 0);
 
     test_import_str("REGEDIT4\n\n"
                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -1042,12 +1042,10 @@ static void test_import(void)
     dword = 0x782;
     todo_wine verify_reg(hkey, "Wine1", REG_DWORD, &dword, sizeof(dword),
                          TODO_REG_TYPE|TODO_REG_SIZE|TODO_REG_DATA);
-    todo_wine verify_reg(hkey, "Wine2", REG_SZ, "Test Value", 11,
-                         TODO_REG_TYPE|TODO_REG_SIZE|TODO_REG_DATA);
+    verify_reg(hkey, "Wine2", REG_SZ, "Test Value", 11, 0);
     todo_wine verify_reg(hkey, "Wine3", REG_MULTI_SZ, "Line concatenation\0", 20,
                          TODO_REG_TYPE|TODO_REG_SIZE|TODO_REG_DATA);
-    todo_wine verify_reg(hkey, "", REG_SZ, "Test", 5,
-                         TODO_REG_TYPE|TODO_REG_SIZE|TODO_REG_DATA);
+    verify_reg(hkey, "", REG_SZ, "Test", 5, 0);
     dword = 0x12345678;
     todo_wine verify_reg(hkey, "Wine4", REG_DWORD, &dword, sizeof(dword),
                          TODO_REG_TYPE|TODO_REG_SIZE|TODO_REG_DATA);
@@ -1057,7 +1055,7 @@ static void test_import(void)
                     "\"Wine5\"=\"No newline\"", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
     err = RegQueryValueExA(hkey, "Wine5", NULL, NULL, NULL, NULL);
-    todo_wine ok(err == ERROR_SUCCESS || broken(err == ERROR_FILE_NOT_FOUND /* WinXP */),
+    ok(err == ERROR_SUCCESS || broken(err == ERROR_FILE_NOT_FOUND /* WinXP */),
        "got %d, expected 0\n", err);
     if (err == ERROR_SUCCESS)
         verify_reg(hkey, "Wine5", REG_SZ, "No newline", 11, 0);
@@ -1071,7 +1069,7 @@ static void test_import(void)
     todo_wine verify_reg(hkey, "Wine6", REG_DWORD, &dword, sizeof(dword),
                          TODO_REG_TYPE|TODO_REG_SIZE|TODO_REG_DATA);
     err = RegQueryValueExA(hkey, "Wine7", NULL, NULL, NULL, NULL);
-    todo_wine ok(err == ERROR_SUCCESS || broken(err == ERROR_FILE_NOT_FOUND /* WinXP */),
+    ok(err == ERROR_SUCCESS || broken(err == ERROR_FILE_NOT_FOUND /* WinXP */),
        "got %d, expected 0\n", err);
     if (err == ERROR_SUCCESS)
         verify_reg(hkey, "Wine7", REG_SZ, "No newline", 11, 0);
@@ -1083,8 +1081,8 @@ static void test_import(void)
                     ";comment\\\n"
                     "\"Wine9\"=\"Line 2\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Wine8", REG_SZ, "Line 1", 7, 0);
-    todo_wine verify_reg(hkey, "Wine9", REG_SZ, "Line 2", 7, 0);
+    verify_reg(hkey, "Wine8", REG_SZ, "Line 1", 7, 0);
+    verify_reg(hkey, "Wine9", REG_SZ, "Line 2", 7, 0);
 
     test_import_str("REGEDIT4\n\n"
                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -1094,7 +1092,7 @@ static void test_import(void)
                     "\"Wine13\"=dword:02040608 ;comment\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
     verify_reg_nonexist(hkey, "Wine10");
-    todo_wine verify_reg(hkey, "Wine11", REG_SZ, "Value 2", 8, 0);
+    verify_reg(hkey, "Wine11", REG_SZ, "Value 2", 8, 0);
     verify_reg_nonexist(hkey, "Wine12");
     dword = 0x2040608;
     todo_wine verify_reg(hkey, "Wine13", REG_DWORD, &dword, sizeof(dword), 0);
@@ -1111,9 +1109,9 @@ static void test_import(void)
                     "\"Wine17\"=\"Another valid line\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
     verify_reg_nonexist(hkey, "Wine14");
-    todo_wine verify_reg(hkey, "Wine15", REG_SZ, "A valid line", 13, 0);
+    verify_reg(hkey, "Wine15", REG_SZ, "A valid line", 13, 0);
     todo_wine verify_reg(hkey, "Wine16", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
-    todo_wine verify_reg(hkey, "Wine17", REG_SZ, "Another valid line", 19, 0);
+    verify_reg(hkey, "Wine17", REG_SZ, "Another valid line", 19, 0);
 
     test_import_str("REGEDIT4\n\n"
                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -1130,7 +1128,7 @@ static void test_import(void)
     verify_reg_nonexist(hkey, "Comment4");
     verify_reg_nonexist(hkey, "Wine18");
     verify_reg_nonexist(hkey, "Comment5");
-    todo_wine verify_reg(hkey, "Wine19", REG_SZ, "Value 7", 8, TODO_REG_SIZE|TODO_REG_DATA);
+    verify_reg(hkey, "Wine19", REG_SZ, "Value 7", 8, 0);
     verify_reg_nonexist(hkey, "Comment6");
 
     test_import_str("REGEDIT4\n\n"
@@ -1150,12 +1148,12 @@ static void test_import(void)
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
     verify_reg_nonexist(hkey, "Wine20");
     verify_reg_nonexist(hkey, "Wine21");
-    todo_wine verify_reg(hkey, "Wine22", REG_SZ, "#comment1", 10, 0);
-    todo_wine verify_reg(hkey, "Wine23", REG_SZ, ";comment2", 10, 0);
-    todo_wine verify_reg(hkey, "Wine24", REG_SZ, "Value#comment3", 15, 0);
-    todo_wine verify_reg(hkey, "Wine25", REG_SZ, "Value;comment4", 15, 0);
-    todo_wine verify_reg(hkey, "Wine26", REG_SZ, "Value #comment5", 16, 0);
-    todo_wine verify_reg(hkey, "Wine27", REG_SZ, "Value ;comment6", 16, 0);
+    verify_reg(hkey, "Wine22", REG_SZ, "#comment1", 10, 0);
+    verify_reg(hkey, "Wine23", REG_SZ, ";comment2", 10, 0);
+    verify_reg(hkey, "Wine24", REG_SZ, "Value#comment3", 15, 0);
+    verify_reg(hkey, "Wine25", REG_SZ, "Value;comment4", 15, 0);
+    verify_reg(hkey, "Wine26", REG_SZ, "Value #comment5", 16, 0);
+    verify_reg(hkey, "Wine27", REG_SZ, "Value ;comment6", 16, 0);
     verify_reg_nonexist(hkey, "Wine28");
     verify_reg_nonexist(hkey, "Wine29");
     verify_reg_nonexist(hkey, "Wine30");
@@ -1316,8 +1314,8 @@ static void test_import(void)
                     "\"Empty string\"=\"\"\n"
                     "\"\"=\"Default Value Name\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Empty string", REG_SZ, "", 1, 0);
-    todo_wine verify_reg(hkey, NULL, REG_SZ, "Default Value Name", 19, 0);
+    verify_reg(hkey, "Empty string", REG_SZ, "", 1, 0);
+    verify_reg(hkey, NULL, REG_SZ, "Default Value Name", 19, 0);
 
     test_import_str("REGEDIT4\n\n"
                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -1338,8 +1336,8 @@ static void test_import(void)
                     "\"Wine39c\"=\"Value3\"  #comment\n"
                     "\"Wine39d\"=\"Value4\"\t\t#comment\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Wine39a", REG_SZ, "Value1", 7, 0);
-    todo_wine verify_reg(hkey, "Wine39b", REG_SZ, "Value2", 7, 0);
+    verify_reg(hkey, "Wine39a", REG_SZ, "Value1", 7, 0);
+    verify_reg(hkey, "Wine39b", REG_SZ, "Value2", 7, 0);
     verify_reg_nonexist(hkey, "Wine39c");
     verify_reg_nonexist(hkey, "Wine39d");
 
@@ -1397,12 +1395,12 @@ static void test_import(void)
                     "\"Wine40g\"=\"Value 4\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
     todo_wine verify_reg(hkey, "Wine40a", REG_EXPAND_SZ, "Line", 5, 0);
-    todo_wine verify_reg(hkey, "Wine40b", REG_SZ, "Value 1", 8, 0);
+    verify_reg(hkey, "Wine40b", REG_SZ, "Value 1", 8, 0);
     verify_reg_nonexist(hkey, "Wine40c");
-    todo_wine verify_reg(hkey, "Wine40d", REG_SZ, "Value 2", 8, 0);
+    verify_reg(hkey, "Wine40d", REG_SZ, "Value 2", 8, 0);
     verify_reg_nonexist(hkey, "Wine40e");
-    verify_reg_nonexist(hkey, "Wine40f");
-    todo_wine verify_reg(hkey, "Wine40g", REG_SZ, "Value 4", 8, 0);
+    todo_wine verify_reg_nonexist(hkey, "Wine40f");
+    verify_reg(hkey, "Wine40g", REG_SZ, "Value 4", 8, 0);
 
     test_import_str("REGEDIT4\n\n"
                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -1419,7 +1417,7 @@ static void test_import(void)
                     "\"double\\\"quote\"=\"valid \\\"or\\\" not\"\n"
                     "\"single'quote\"=dword:00000008\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "double\"quote", REG_SZ, "valid \"or\" not", 15, 0);
+    verify_reg(hkey, "double\"quote", REG_SZ, "valid \"or\" not", 15, 0);
     dword = 0x00000008;
     todo_wine verify_reg(hkey, "single'quote", REG_DWORD, &dword, sizeof(dword), 0);
 
@@ -1445,7 +1443,7 @@ static void test_import(void)
                     "\\42c\"=\"Value 3\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
     verify_reg_nonexist(hkey, "Wine42a");
-    todo_wine verify_reg(hkey, "Wine42b", REG_SZ, "Value 2", 8, 0);
+    verify_reg(hkey, "Wine42b", REG_SZ, "Value 2", 8, 0);
     verify_reg_nonexist(hkey, "Wine42c");
 
     /* Test hex data concatenation for REG_NONE, REG_EXPAND_SZ and REG_BINARY */
@@ -1592,7 +1590,7 @@ static void test_import(void)
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
     err = RegOpenKeyExA(hkey, "Subkey\"1", 0, KEY_READ, &subkey);
     ok(err == ERROR_SUCCESS, "got %d, expected 0\n", err);
-    todo_wine verify_reg(subkey, "Wine\\31", REG_SZ, "Test value", 11, 0);
+    verify_reg(subkey, "Wine\\31", REG_SZ, "Test value", 11, 0);
     err = RegCloseKey(subkey);
     ok(err == ERROR_SUCCESS, "got %d, expected 0\n", err);
     err = RegDeleteKeyA(HKEY_CURRENT_USER, KEY_BASE "\\Subkey\"1");
@@ -1604,7 +1602,7 @@ static void test_import(void)
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
     err = RegOpenKeyExA(hkey, "Subkey/2", 0, KEY_READ, &subkey);
     ok(err == ERROR_SUCCESS, "got %d, expected 0\n", err);
-    todo_wine verify_reg(subkey, "123/\"4;'5", REG_SZ, "Random value name", 18, 0);
+    verify_reg(subkey, "123/\"4;'5", REG_SZ, "Random value name", 18, 0);
     err = RegCloseKey(subkey);
     ok(err == ERROR_SUCCESS, "got %d, expected 0\n", err);
     err = RegDeleteKeyA(HKEY_CURRENT_USER, KEY_BASE "\\Subkey/2");
@@ -1653,7 +1651,7 @@ static void test_import(void)
     verify_key(hkey, "Subkey1e");
     err = RegOpenKeyExA(hkey, "Subkey1e", 0, KEY_READ, &subkey);
     ok(err == ERROR_SUCCESS, "RegOpenKeyExA failed: got %u, expected 0\n", err);
-    todo_wine verify_reg(subkey, "Wine", REG_SZ, "Test value", 11, 0);
+    verify_reg(subkey, "Wine", REG_SZ, "Test value", 11, 0);
     RegCloseKey(subkey);
     err = RegDeleteKeyA(hkey, "Subkey1e");
     ok(err == ERROR_SUCCESS, "RegDeleteKeyA failed: got %u, expected 0\n", err);
@@ -1667,7 +1665,7 @@ static void test_import(void)
     verify_key(hkey, "Subkey1f");
     err = RegOpenKeyExA(hkey, "Subkey1f\\\\", 0, KEY_READ, &subkey);
     ok(err == ERROR_SUCCESS, "RegOpenKeyExA failed: got %u, expected 0\n", err);
-    todo_wine verify_reg(subkey, "Wine", REG_SZ, "Test value", 11, 0);
+    verify_reg(subkey, "Wine", REG_SZ, "Test value", 11, 0);
     RegCloseKey(subkey);
     err = RegDeleteKeyA(hkey, "Subkey1f\\\\");
     ok(err == ERROR_SUCCESS, "RegDeleteKeyA failed: got %u, expected 0\n", err);
@@ -1682,7 +1680,7 @@ static void test_import(void)
     verify_key(hkey, "Subkey1g");
     err = RegOpenKeyExA(hkey, "Subkey1g\\\\", 0, KEY_READ, &subkey);
     ok(err == ERROR_SUCCESS, "RegOpenKeyExA failed: got %u, expected 0\n", err);
-    todo_wine verify_reg(subkey, "Wine", REG_SZ, "Test value", 11, 0);
+    verify_reg(subkey, "Wine", REG_SZ, "Test value", 11, 0);
     RegCloseKey(subkey);
     err = RegDeleteKeyA(hkey, "Subkey1g\\\\");
     ok(err == ERROR_SUCCESS, "RegDeleteKeyA failed: got %u, expected 0\n", err);
@@ -1748,7 +1746,7 @@ static void test_import(void)
                     "\"Wine46e\"=hex(2):25,50,41,54,48,25,00\n"
                     "\"Wine46f\"=hex(0):56,00,61,00,6c,00,75,00,65,00,00,00\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Wine46a", REG_SZ, "Test Value", 11, 0);
+    verify_reg(hkey, "Wine46a", REG_SZ, "Test Value", 11, 0);
     todo_wine verify_reg(hkey, "Wine46b", REG_DWORD, &dword, sizeof(dword), 0);
     todo_wine verify_reg(hkey, "Wine46c", REG_BINARY, hex, 4, 0);
     todo_wine verify_reg(hkey, "Wine46d", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
@@ -1764,7 +1762,7 @@ static void test_import(void)
                     "\"Wine46e\"=- ;comment\n"
                     "\"Wine46f\"=- #comment\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    verify_reg_nonexist(hkey, "Wine46a");
+    todo_wine verify_reg_nonexist(hkey, "Wine46a");
     verify_reg_nonexist(hkey, "Wine46b");
     verify_reg_nonexist(hkey, "Wine46c");
     todo_wine verify_reg(hkey, "Wine46d", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
@@ -1931,15 +1929,15 @@ static void test_import(void)
                     "\"Wine55j\"=\"Test value\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
     verify_reg_nonexist(hkey, "Wine55a");
-    verify_reg_nonexist(hkey, "Wine55b");
+    todo_wine verify_reg_nonexist(hkey, "Wine55b");
     verify_reg_nonexist(hkey, "Wine55c");
-    verify_reg_nonexist(hkey, "Wine55d");
+    todo_wine verify_reg_nonexist(hkey, "Wine55d");
     verify_reg_nonexist(hkey, "Wine55e");
-    todo_wine verify_reg(hkey, "Wine55f", REG_SZ, "Test value", 11, 0);
+    verify_reg(hkey, "Wine55f", REG_SZ, "Test value", 11, 0);
     verify_reg_nonexist(hkey, "Wine55g");
-    verify_reg_nonexist(hkey, "Wine55h");
+    todo_wine verify_reg_nonexist(hkey, "Wine55h");
     verify_reg_nonexist(hkey, "Wine55i");
-    todo_wine verify_reg(hkey, "Wine55j", REG_SZ, "Test value", 11, 0);
+    verify_reg(hkey, "Wine55j", REG_SZ, "Test value", 11, 0);
 
     test_import_str("REGEDIT4\n\n"
                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -2002,7 +2000,7 @@ static void test_import(void)
     todo_wine verify_reg(hkey, "Wine57j", REG_EXPAND_SZ, "%PATH%", 7, 0);
 
     err = RegDeleteValueW(hkey, NULL);
-    todo_wine ok(err == ERROR_SUCCESS, "RegDeleteValue failed: %u\n", err);
+    ok(err == ERROR_SUCCESS, "RegDeleteValue failed: %u\n", err);
 
     test_import_str("REGEDIT4\n\n"
                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -2010,7 +2008,7 @@ static void test_import(void)
                     "@=\"Default value 1\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
     verify_reg_nonexist(hkey, "Wine58a");
-    verify_reg_nonexist(hkey, NULL);
+    todo_wine verify_reg_nonexist(hkey, NULL);
 
     test_import_str("REGEDIT4\n\n"
                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -2019,7 +2017,7 @@ static void test_import(void)
                     "@=\"Default value 2\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
     verify_reg_nonexist(hkey, "Wine58b");
-    verify_reg_nonexist(hkey, NULL);
+    todo_wine verify_reg_nonexist(hkey, NULL);
 
     test_import_str("REGEDIT4\n\n"
                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -2028,10 +2026,10 @@ static void test_import(void)
                     "@=\"Default value 3\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
     verify_reg_nonexist(hkey, "Wine58c");
-    todo_wine verify_reg(hkey, NULL, REG_SZ, "Default value 3", 16, 0);
+    verify_reg(hkey, NULL, REG_SZ, "Default value 3", 16, 0);
 
     err = RegDeleteValueW(hkey, NULL);
-    todo_wine ok(err == ERROR_SUCCESS, "RegDeleteValue failed: %u\n", err);
+    ok(err == ERROR_SUCCESS, "RegDeleteValue failed: %u\n", err);
 
     test_import_str("REGEDIT4\n\n"
                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -2039,7 +2037,7 @@ static void test_import(void)
                     "@=\"Default value 4\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
     verify_reg_nonexist(hkey, "Wine58d");
-    verify_reg_nonexist(hkey, NULL);
+    todo_wine verify_reg_nonexist(hkey, NULL);
 
     test_import_str("REGEDIT4\n\n"
                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -2047,7 +2045,7 @@ static void test_import(void)
                     "@=\"Default value 5\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
     verify_reg_nonexist(hkey, "Wine58e");
-    todo_wine verify_reg(hkey, NULL, REG_SZ, "Default value 5", 16, 0);
+    verify_reg(hkey, NULL, REG_SZ, "Default value 5", 16, 0);
 
     test_import_str("REGEDIT4\n\n"
                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -2336,39 +2334,39 @@ static void test_unicode_import(void)
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                      "\"Test1\"=\"Value\"\n", &r);
     ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    verify_reg_nonexist(hkey, "Test1");
+    todo_wine verify_reg_nonexist(hkey, "Test1");
 
     test_import_wstr("\xef\xbb\xbfregedit4\n\n"
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                      "\"Test2\"=\"Value\"\n", &r);
     ok(r == REG_EXIT_FAILURE || broken(r == REG_EXIT_SUCCESS) /* WinXP */,
        "got exit code %d, expected 1\n", r);
-    verify_reg_nonexist(hkey, "Test2");
+    todo_wine verify_reg_nonexist(hkey, "Test2");
 
     test_import_wstr("\xef\xbb\xbfRegedit4\n\n"
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                      "\"Test3\"=\"Value\"\n", &r);
     ok(r == REG_EXIT_FAILURE || broken(r == REG_EXIT_SUCCESS) /* WinXP */,
        "got exit code %d, expected 1\n", r);
-    verify_reg_nonexist(hkey, "Test3");
+    todo_wine verify_reg_nonexist(hkey, "Test3");
 
     test_import_wstr("\xef\xbb\xbfREGEDIT 4\n\n"
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                      "\"Test4\"=\"Value\"\n", &r);
     ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    verify_reg_nonexist(hkey, "Test4");
+    todo_wine verify_reg_nonexist(hkey, "Test4");
 
     test_import_wstr("\xef\xbb\xbfREGEDIT4FOO\n\n"
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                      "\"Test5\"=\"Value\"\n", &r);
     ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    verify_reg_nonexist(hkey, "Test5");
+    todo_wine verify_reg_nonexist(hkey, "Test5");
 
     test_import_wstr("\xef\xbb\xbfREGEDIT4 FOO\n\n"
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                      "\"Test6\"=\"Value\"\n", &r);
     ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    verify_reg_nonexist(hkey, "Test6");
+    todo_wine verify_reg_nonexist(hkey, "Test6");
 
     test_import_wstr("\xef\xbb\xbfREGEDIT5\n\n"
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -2386,19 +2384,19 @@ static void test_unicode_import(void)
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                      "\"Unicode1\"=\"Value1\"\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Unicode1", REG_SZ, "Value1", 7, 0);
+    verify_reg(hkey, "Unicode1", REG_SZ, "Value1", 7, 0);
 
     test_import_wstr("\xef\xbb\xbfREGEDIT4\n"
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                      "\"Unicode2\"=\"Value2\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Unicode2", REG_SZ, "Value2", 7, 0);
+    verify_reg(hkey, "Unicode2", REG_SZ, "Value2", 7, 0);
 
     test_import_wstr("\xef\xbb\xbfREGEDIT4\n\n"
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                      "\"Unicode3\"=\"Value3\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Unicode3", REG_SZ, "Value3", 7, 0);
+    verify_reg(hkey, "Unicode3", REG_SZ, "Value3", 7, 0);
 
     test_import_wstr("Windows Registry Editor Version 4.00\n", &r);
     ok(r == REG_EXIT_FAILURE || broken(r == REG_EXIT_SUCCESS) /* WinXP */,
@@ -2464,19 +2462,19 @@ static void test_unicode_import(void)
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                      "\"Unicode4\"=\"Value4\"\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Unicode4", REG_SZ, "Value4", 7, 0);
+    verify_reg(hkey, "Unicode4", REG_SZ, "Value4", 7, 0);
 
     test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n"
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                      "\"Unicode5\"=\"Value5\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Unicode5", REG_SZ, "Value5", 7, 0);
+    verify_reg(hkey, "Unicode5", REG_SZ, "Value5", 7, 0);
 
     test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                      "\"Unicode6\"=\"Value6\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Unicode6", REG_SZ, "Value6", 7, 0);
+    verify_reg(hkey, "Unicode6", REG_SZ, "Value6", 7, 0);
 
     test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -2485,10 +2483,10 @@ static void test_unicode_import(void)
                      "\"Line3\"=\"Value3\"\n\n\n\n"
                      "\"Line4\"=\"Value4\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Line1", REG_SZ, "Value1", 7, TODO_REG_TYPE|TODO_REG_SIZE|TODO_REG_DATA);
-    todo_wine verify_reg(hkey, "Line2", REG_SZ, "Value2", 7, TODO_REG_TYPE|TODO_REG_SIZE|TODO_REG_DATA);
-    todo_wine verify_reg(hkey, "Line3", REG_SZ, "Value3", 7, TODO_REG_TYPE|TODO_REG_SIZE|TODO_REG_DATA);
-    todo_wine verify_reg(hkey, "Line4", REG_SZ, "Value4", 7, TODO_REG_TYPE|TODO_REG_SIZE|TODO_REG_DATA);
+    verify_reg(hkey, "Line1", REG_SZ, "Value1", 7, 0);
+    verify_reg(hkey, "Line2", REG_SZ, "Value2", 7, 0);
+    verify_reg(hkey, "Line3", REG_SZ, "Value3", 7, 0);
+    verify_reg(hkey, "Line4", REG_SZ, "Value4", 7, 0);
 
     test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -2504,12 +2502,10 @@ static void test_unicode_import(void)
     dword = 0x782;
     todo_wine verify_reg(hkey, "Wine1", REG_DWORD, &dword, sizeof(dword),
                          TODO_REG_TYPE|TODO_REG_SIZE|TODO_REG_DATA);
-    todo_wine verify_reg(hkey, "Wine2", REG_SZ, "Test Value", 11,
-                         TODO_REG_TYPE|TODO_REG_SIZE|TODO_REG_DATA);
+    verify_reg(hkey, "Wine2", REG_SZ, "Test Value", 11, 0);
     todo_wine verify_reg(hkey, "Wine3", REG_MULTI_SZ, "Line concatenation\0", 20,
                          TODO_REG_TYPE|TODO_REG_SIZE|TODO_REG_DATA);
-    todo_wine verify_reg(hkey, "", REG_SZ, "Test", 5,
-                         TODO_REG_TYPE|TODO_REG_SIZE|TODO_REG_DATA);
+    verify_reg(hkey, "", REG_SZ, "Test", 5, 0);
     dword = 0x12345678;
     todo_wine verify_reg(hkey, "Wine4", REG_DWORD, &dword, sizeof(dword),
                          TODO_REG_TYPE|TODO_REG_SIZE|TODO_REG_DATA);
@@ -2519,7 +2515,7 @@ static void test_unicode_import(void)
                      "\"Wine5\"=\"No newline\"", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
     err = RegQueryValueExA(hkey, "Wine5", NULL, NULL, NULL, NULL);
-    todo_wine ok(err == ERROR_SUCCESS || broken(err == ERROR_FILE_NOT_FOUND /* WinXP */),
+    ok(err == ERROR_SUCCESS || broken(err == ERROR_FILE_NOT_FOUND /* WinXP */),
        "got %d, expected 0\n", err);
     if (err == ERROR_SUCCESS)
         verify_reg(hkey, "Wine5", REG_SZ, "No newline", 11, 0);
@@ -2533,7 +2529,7 @@ static void test_unicode_import(void)
     todo_wine verify_reg(hkey, "Wine6", REG_DWORD, &dword, sizeof(dword),
                          TODO_REG_TYPE|TODO_REG_SIZE|TODO_REG_DATA);
     err = RegQueryValueExA(hkey, "Wine7", NULL, NULL, NULL, NULL);
-    todo_wine ok(err == ERROR_SUCCESS || broken(err == ERROR_FILE_NOT_FOUND /* WinXP */),
+    ok(err == ERROR_SUCCESS || broken(err == ERROR_FILE_NOT_FOUND /* WinXP */),
        "got %d, expected 0\n", err);
     if (err == ERROR_SUCCESS)
         verify_reg(hkey, "Wine7", REG_SZ, "No newline", 11, 0);
@@ -2545,8 +2541,8 @@ static void test_unicode_import(void)
                      ";comment\\\n"
                      "\"Wine9\"=\"Line 2\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Wine8", REG_SZ, "Line 1", 7, 0);
-    todo_wine verify_reg(hkey, "Wine9", REG_SZ, "Line 2", 7, 0);
+    verify_reg(hkey, "Wine8", REG_SZ, "Line 1", 7, 0);
+    verify_reg(hkey, "Wine9", REG_SZ, "Line 2", 7, 0);
 
     test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -2556,7 +2552,7 @@ static void test_unicode_import(void)
                      "\"Wine13\"=dword:02040608 ;comment\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
     verify_reg_nonexist(hkey, "Wine10");
-    todo_wine verify_reg(hkey, "Wine11", REG_SZ, "Value 2", 8, 0);
+    verify_reg(hkey, "Wine11", REG_SZ, "Value 2", 8, 0);
     verify_reg_nonexist(hkey, "Wine12");
     dword = 0x2040608;
     todo_wine verify_reg(hkey, "Wine13", REG_DWORD, &dword, sizeof(dword), 0);
@@ -2573,9 +2569,9 @@ static void test_unicode_import(void)
                      "\"Wine17\"=\"Another valid line\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
     verify_reg_nonexist(hkey, "Wine14");
-    todo_wine verify_reg(hkey, "Wine15", REG_SZ, "A valid line", 13, 0);
+    verify_reg(hkey, "Wine15", REG_SZ, "A valid line", 13, 0);
     todo_wine verify_reg(hkey, "Wine16", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
-    todo_wine verify_reg(hkey, "Wine17", REG_SZ, "Another valid line", 19, 0);
+    verify_reg(hkey, "Wine17", REG_SZ, "Another valid line", 19, 0);
 
     test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -2592,7 +2588,7 @@ static void test_unicode_import(void)
     verify_reg_nonexist(hkey, "Comment4");
     verify_reg_nonexist(hkey, "Wine18");
     verify_reg_nonexist(hkey, "Comment5");
-    todo_wine verify_reg(hkey, "Wine19", REG_SZ, "Value 7", 8, TODO_REG_SIZE|TODO_REG_DATA);
+    verify_reg(hkey, "Wine19", REG_SZ, "Value 7", 8, 0);
     verify_reg_nonexist(hkey, "Comment6");
 
     test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
@@ -2612,12 +2608,12 @@ static void test_unicode_import(void)
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
     verify_reg_nonexist(hkey, "Wine20");
     verify_reg_nonexist(hkey, "Wine21");
-    todo_wine verify_reg(hkey, "Wine22", REG_SZ, "#comment1", 10, 0);
-    todo_wine verify_reg(hkey, "Wine23", REG_SZ, ";comment2", 10, 0);
-    todo_wine verify_reg(hkey, "Wine24", REG_SZ, "Value#comment3", 15, 0);
-    todo_wine verify_reg(hkey, "Wine25", REG_SZ, "Value;comment4", 15, 0);
-    todo_wine verify_reg(hkey, "Wine26", REG_SZ, "Value #comment5", 16, 0);
-    todo_wine verify_reg(hkey, "Wine27", REG_SZ, "Value ;comment6", 16, 0);
+    verify_reg(hkey, "Wine22", REG_SZ, "#comment1", 10, 0);
+    verify_reg(hkey, "Wine23", REG_SZ, ";comment2", 10, 0);
+    verify_reg(hkey, "Wine24", REG_SZ, "Value#comment3", 15, 0);
+    verify_reg(hkey, "Wine25", REG_SZ, "Value;comment4", 15, 0);
+    verify_reg(hkey, "Wine26", REG_SZ, "Value #comment5", 16, 0);
+    verify_reg(hkey, "Wine27", REG_SZ, "Value ;comment6", 16, 0);
     verify_reg_nonexist(hkey, "Wine28");
     verify_reg_nonexist(hkey, "Wine29");
     verify_reg_nonexist(hkey, "Wine30");
@@ -2692,8 +2688,8 @@ static void test_unicode_import(void)
                      "\"Empty string\"=\"\"\n"
                      "\"\"=\"Default registry value\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Empty string", REG_SZ, "", 1, 0);
-    todo_wine verify_reg(hkey, NULL, REG_SZ, "Default registry value", 23, 0);
+    verify_reg(hkey, "Empty string", REG_SZ, "", 1, 0);
+    verify_reg(hkey, NULL, REG_SZ, "Default registry value", 23, 0);
 
     test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -2714,8 +2710,8 @@ static void test_unicode_import(void)
                      "\"Wine39c\"=\"Value3\"  #comment\n"
                      "\"Wine39d\"=\"Value4\"\t\t#comment\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Wine39a", REG_SZ, "Value1", 7, 0);
-    todo_wine verify_reg(hkey, "Wine39b", REG_SZ, "Value2", 7, 0);
+    verify_reg(hkey, "Wine39a", REG_SZ, "Value1", 7, 0);
+    verify_reg(hkey, "Wine39b", REG_SZ, "Value2", 7, 0);
     verify_reg_nonexist(hkey, "Wine39c");
     verify_reg_nonexist(hkey, "Wine39d");
 
@@ -2773,12 +2769,12 @@ static void test_unicode_import(void)
                      "\"Wine40g\"=\"Value 4\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
     todo_wine verify_reg(hkey, "Wine40a", REG_EXPAND_SZ, "Line", 5, 0);
-    todo_wine verify_reg(hkey, "Wine40b", REG_SZ, "Value 1", 8, 0);
+    verify_reg(hkey, "Wine40b", REG_SZ, "Value 1", 8, 0);
     verify_reg_nonexist(hkey, "Wine40c");
-    todo_wine verify_reg(hkey, "Wine40d", REG_SZ, "Value 2", 8, 0);
+    verify_reg(hkey, "Wine40d", REG_SZ, "Value 2", 8, 0);
     verify_reg_nonexist(hkey, "Wine40e");
-    verify_reg_nonexist(hkey, "Wine40f");
-    todo_wine verify_reg(hkey, "Wine40g", REG_SZ, "Value 4", 8, 0);
+    todo_wine verify_reg_nonexist(hkey, "Wine40f");
+    verify_reg(hkey, "Wine40g", REG_SZ, "Value 4", 8, 0);
 
     test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -2881,7 +2877,7 @@ static void test_unicode_import(void)
                      "\"double\\\"quote\"=\"valid \\\"or\\\" not\"\n"
                      "\"single'quote\"=dword:00000008\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "double\"quote", REG_SZ, "valid \"or\" not", 15, 0);
+    verify_reg(hkey, "double\"quote", REG_SZ, "valid \"or\" not", 15, 0);
     dword = 0x00000008;
     todo_wine verify_reg(hkey, "single'quote", REG_DWORD, &dword, sizeof(dword), 0);
 
@@ -2907,7 +2903,7 @@ static void test_unicode_import(void)
                      "\\42c\"=\"Value 3\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
     verify_reg_nonexist(hkey, "Wine42a");
-    todo_wine verify_reg(hkey, "Wine42b", REG_SZ, "Value 2", 8, 0);
+    verify_reg(hkey, "Wine42b", REG_SZ, "Value 2", 8, 0);
     verify_reg_nonexist(hkey, "Wine42c");
 
     /* Test hex data concatenation for REG_NONE, REG_EXPAND_SZ and REG_BINARY */
@@ -3054,7 +3050,7 @@ static void test_unicode_import(void)
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
     err = RegOpenKeyExA(hkey, "Subkey\"1", 0, KEY_READ, &subkey);
     ok(err == ERROR_SUCCESS, "got %d, expected 0\n", err);
-    todo_wine verify_reg(subkey, "Wine\\31", REG_SZ, "Test value", 11, 0);
+    verify_reg(subkey, "Wine\\31", REG_SZ, "Test value", 11, 0);
     err = RegCloseKey(subkey);
     ok(err == ERROR_SUCCESS, "got %d, expected 0\n", err);
     err = RegDeleteKeyA(HKEY_CURRENT_USER, KEY_BASE "\\Subkey\"1");
@@ -3066,7 +3062,7 @@ static void test_unicode_import(void)
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
     err = RegOpenKeyExA(hkey, "Subkey/2", 0, KEY_READ, &subkey);
     ok(err == ERROR_SUCCESS, "got %d, expected 0\n", err);
-    todo_wine verify_reg(subkey, "123/\"4;'5", REG_SZ, "Random value name", 18, 0);
+    verify_reg(subkey, "123/\"4;'5", REG_SZ, "Random value name", 18, 0);
     err = RegCloseKey(subkey);
     ok(err == ERROR_SUCCESS, "got %d, expected 0\n", err);
     err = RegDeleteKeyA(HKEY_CURRENT_USER, KEY_BASE "\\Subkey/2");
@@ -3115,7 +3111,7 @@ static void test_unicode_import(void)
     verify_key(hkey, "Subkey1e");
     err = RegOpenKeyExA(hkey, "Subkey1e", 0, KEY_READ, &subkey);
     ok(err == ERROR_SUCCESS, "RegOpenKeyExA failed: got %u, expected 0\n", err);
-    todo_wine verify_reg(subkey, "Wine", REG_SZ, "Test value", 11, 0);
+    verify_reg(subkey, "Wine", REG_SZ, "Test value", 11, 0);
     RegCloseKey(subkey);
     err = RegDeleteKeyA(hkey, "Subkey1e");
     ok(err == ERROR_SUCCESS, "RegDeleteKeyA failed: got %u, expected 0\n", err);
@@ -3129,7 +3125,7 @@ static void test_unicode_import(void)
     verify_key(hkey, "Subkey1f");
     err = RegOpenKeyExA(hkey, "Subkey1f\\\\", 0, KEY_READ, &subkey);
     ok(err == ERROR_SUCCESS, "RegOpenKeyExA failed: got %u, expected 0\n", err);
-    todo_wine verify_reg(subkey, "Wine", REG_SZ, "Test value", 11, 0);
+    verify_reg(subkey, "Wine", REG_SZ, "Test value", 11, 0);
     RegCloseKey(subkey);
     err = RegDeleteKeyA(hkey, "Subkey1f\\\\");
     ok(err == ERROR_SUCCESS, "RegDeleteKeyA failed: got %u, expected 0\n", err);
@@ -3144,7 +3140,7 @@ static void test_unicode_import(void)
     verify_key(hkey, "Subkey1g");
     err = RegOpenKeyExA(hkey, "Subkey1g\\\\", 0, KEY_READ, &subkey);
     ok(err == ERROR_SUCCESS, "RegOpenKeyExA failed: got %u, expected 0\n", err);
-    todo_wine verify_reg(subkey, "Wine", REG_SZ, "Test value", 11, 0);
+    verify_reg(subkey, "Wine", REG_SZ, "Test value", 11, 0);
     RegCloseKey(subkey);
     err = RegDeleteKeyA(hkey, "Subkey1g\\\\");
     ok(err == ERROR_SUCCESS, "RegDeleteKeyA failed: got %u, expected 0\n", err);
@@ -3211,7 +3207,7 @@ static void test_unicode_import(void)
                      "\"Wine46e\"=hex(2):25,00,50,00,41,00,54,00,48,00,25,00,00,00\n"
                      "\"Wine46f\"=hex(0):56,00,61,00,6c,00,75,00,65,00,00,00\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Wine46a", REG_SZ, "Test Value", 11, 0);
+    verify_reg(hkey, "Wine46a", REG_SZ, "Test Value", 11, 0);
     todo_wine verify_reg(hkey, "Wine46b", REG_DWORD, &dword, sizeof(dword), 0);
     todo_wine verify_reg(hkey, "Wine46c", REG_BINARY, hex, 4, 0);
     todo_wine verify_reg(hkey, "Wine46d", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
@@ -3227,7 +3223,7 @@ static void test_unicode_import(void)
                      "\"Wine46e\"=- ;comment\n"
                      "\"Wine46f\"=- #comment\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    verify_reg_nonexist(hkey, "Wine46a");
+    todo_wine verify_reg_nonexist(hkey, "Wine46a");
     verify_reg_nonexist(hkey, "Wine46b");
     verify_reg_nonexist(hkey, "Wine46c");
     todo_wine verify_reg(hkey, "Wine46d", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
@@ -3396,15 +3392,15 @@ static void test_unicode_import(void)
                      "\"Wine55j\"=\"Test value\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
     verify_reg_nonexist(hkey, "Wine55a");
-    verify_reg_nonexist(hkey, "Wine55b");
+    todo_wine verify_reg_nonexist(hkey, "Wine55b");
     verify_reg_nonexist(hkey, "Wine55c");
-    verify_reg_nonexist(hkey, "Wine55d");
+    todo_wine verify_reg_nonexist(hkey, "Wine55d");
     verify_reg_nonexist(hkey, "Wine55e");
-    todo_wine verify_reg(hkey, "Wine55f", REG_SZ, "Test value", 11, 0);
+    verify_reg(hkey, "Wine55f", REG_SZ, "Test value", 11, 0);
     verify_reg_nonexist(hkey, "Wine55g");
-    verify_reg_nonexist(hkey, "Wine55h");
+    todo_wine verify_reg_nonexist(hkey, "Wine55h");
     verify_reg_nonexist(hkey, "Wine55i");
-    todo_wine verify_reg(hkey, "Wine55j", REG_SZ, "Test value", 11, 0);
+    verify_reg(hkey, "Wine55j", REG_SZ, "Test value", 11, 0);
 
     test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -3467,7 +3463,7 @@ static void test_unicode_import(void)
     todo_wine verify_reg(hkey, "Wine57j", REG_EXPAND_SZ, "%PATH%", 7, 0);
 
     err = RegDeleteValueW(hkey, NULL);
-    todo_wine ok(err == ERROR_SUCCESS, "RegDeleteValue failed: %u\n", err);
+    ok(err == ERROR_SUCCESS, "RegDeleteValue failed: %u\n", err);
 
     test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -3475,7 +3471,7 @@ static void test_unicode_import(void)
                      "@=\"Default value 1\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
     verify_reg_nonexist(hkey, "Wine58a");
-    verify_reg_nonexist(hkey, NULL);
+    todo_wine verify_reg_nonexist(hkey, NULL);
 
     test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -3484,7 +3480,7 @@ static void test_unicode_import(void)
                      "@=\"Default value 2\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
     verify_reg_nonexist(hkey, "Wine58b");
-    verify_reg_nonexist(hkey, NULL);
+    todo_wine verify_reg_nonexist(hkey, NULL);
 
     test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -3493,10 +3489,10 @@ static void test_unicode_import(void)
                      "@=\"Default value 3\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
     verify_reg_nonexist(hkey, "Wine58c");
-    todo_wine verify_reg(hkey, NULL, REG_SZ, "Default value 3", 16, 0);
+    verify_reg(hkey, NULL, REG_SZ, "Default value 3", 16, 0);
 
     err = RegDeleteValueW(hkey, NULL);
-    todo_wine ok(err == ERROR_SUCCESS, "RegDeleteValue failed: %u\n", err);
+    ok(err == ERROR_SUCCESS, "RegDeleteValue failed: %u\n", err);
 
     test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -3504,7 +3500,7 @@ static void test_unicode_import(void)
                      "@=\"Default value 4\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
     verify_reg_nonexist(hkey, "Wine58d");
-    verify_reg_nonexist(hkey, NULL);
+    todo_wine verify_reg_nonexist(hkey, NULL);
 
     test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -3512,7 +3508,7 @@ static void test_unicode_import(void)
                      "@=\"Default value 5\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
     verify_reg_nonexist(hkey, "Wine58e");
-    todo_wine verify_reg(hkey, NULL, REG_SZ, "Default value 5", 16, 0);
+    verify_reg(hkey, NULL, REG_SZ, "Default value 5", 16, 0);
 
     test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -3776,55 +3772,55 @@ static void test_import_with_whitespace(void)
                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                     "\"Wine1a\"=\"Value\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %u, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Wine1a", REG_SZ, "Value", 6, 0);
+    verify_reg(hkey, "Wine1a", REG_SZ, "Value", 6, 0);
 
     test_import_str("\tREGEDIT4\n\n"
                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                     "\"Wine1b\"=\"Value\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %u, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Wine1b", REG_SZ, "Value", 6, 0);
+    verify_reg(hkey, "Wine1b", REG_SZ, "Value", 6, 0);
 
     test_import_str(" \t REGEDIT4\n\n"
                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                     "\"Wine1c\"=\"Value\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %u, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Wine1c", REG_SZ, "Value", 6, 0);
+    verify_reg(hkey, "Wine1c", REG_SZ, "Value", 6, 0);
 
     test_import_str("REGEDIT4\n\n"
                     "  [HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                     "\"Wine2a\"=\"Value\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %u, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Wine2a", REG_SZ, "Value", 6, 0);
+    verify_reg(hkey, "Wine2a", REG_SZ, "Value", 6, 0);
 
     test_import_str("REGEDIT4\n\n"
                     "\t[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                     "\"Wine2b\"=\"Value\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %u, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Wine2b", REG_SZ, "Value", 6, 0);
+    verify_reg(hkey, "Wine2b", REG_SZ, "Value", 6, 0);
 
     test_import_str("REGEDIT4\n\n"
                     " \t [HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                     "\"Wine2c\"=\"Value\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %u, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Wine2c", REG_SZ, "Value", 6, 0);
+    verify_reg(hkey, "Wine2c", REG_SZ, "Value", 6, 0);
 
     test_import_str("REGEDIT4\n\n"
                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                     "  \"Wine3a\"=\"Two leading spaces\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %u, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Wine3a", REG_SZ, "Two leading spaces", 19, 0);
+    verify_reg(hkey, "Wine3a", REG_SZ, "Two leading spaces", 19, 0);
 
     test_import_str("REGEDIT4\n\n"
                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                     "\t\"Wine3b\"=\"One leading tab\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %u, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Wine3b", REG_SZ, "One leading tab", 16, 0);
+    verify_reg(hkey, "Wine3b", REG_SZ, "One leading tab", 16, 0);
 
     test_import_str("REGEDIT4\n\n"
                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                     " \t \"Wine3c\"=\"Space, tab, space\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %u, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Wine3c", REG_SZ, "Space, tab, space", 18, 0);
+    verify_reg(hkey, "Wine3c", REG_SZ, "Space, tab, space", 18, 0);
 
     test_import_str("                    REGEDIT4\n\n"
                     "\t\t\t[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -3835,7 +3831,7 @@ static void test_import_with_whitespace(void)
                     "\t\t\t\t63,61,74,\\;comment\n"
                     "  \t65,6e,61,74,69,6f,6e,00,00\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Wine4a", REG_SZ, "Tab and four spaces", 20, 0);
+    verify_reg(hkey, "Wine4a", REG_SZ, "Tab and four spaces", 20, 0);
     dword = 0x112233;
     todo_wine verify_reg(hkey, "Wine4b", REG_DWORD, &dword, sizeof(dword), 0);
     todo_wine verify_reg(hkey, "Wine4c", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
@@ -3847,10 +3843,10 @@ static void test_import_with_whitespace(void)
                     "\t  \"Wine5c\"=\t  \"Tabs and spaces\"\n"
                     "    \"Wine5d\"    \t    =    \t    \"More whitespace\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Wine5a", REG_SZ, "Leading spaces", 15, 0);
-    todo_wine verify_reg(hkey, "Wine5b", REG_SZ, "Leading tabs", 13, 0);
-    todo_wine verify_reg(hkey, "Wine5c", REG_SZ, "Tabs and spaces", 16, 0);
-    todo_wine verify_reg(hkey, "Wine5d", REG_SZ, "More whitespace", 16, 0);
+    verify_reg(hkey, "Wine5a", REG_SZ, "Leading spaces", 15, 0);
+    verify_reg(hkey, "Wine5b", REG_SZ, "Leading tabs", 13, 0);
+    verify_reg(hkey, "Wine5c", REG_SZ, "Tabs and spaces", 16, 0);
+    verify_reg(hkey, "Wine5d", REG_SZ, "More whitespace", 16, 0);
 
     test_import_str("REGEDIT4\n\n"
                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -3858,25 +3854,25 @@ static void test_import_with_whitespace(void)
                     "\"\t\tWine6b\"=\"Leading tabs\"\n"
                     "  \"  Wine6c  \"  =  \"  Spaces everywhere  \"  \n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "  Wine6a", REG_SZ, "Leading spaces", 15, 0);
-    todo_wine verify_reg(hkey, "\t\tWine6b", REG_SZ, "Leading tabs", 13, 0);
-    todo_wine verify_reg(hkey, "  Wine6c  ", REG_SZ, "  Spaces everywhere  ", 22, 0);
+    verify_reg(hkey, "  Wine6a", REG_SZ, "Leading spaces", 15, 0);
+    verify_reg(hkey, "\t\tWine6b", REG_SZ, "Leading tabs", 13, 0);
+    verify_reg(hkey, "  Wine6c  ", REG_SZ, "  Spaces everywhere  ", 22, 0);
 
     test_import_str("REGEDIT4\n\n"
                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                     "\"Wine7a\"=\"    Four spaces in the data\"\n"
                     "\"Wine7b\"=\"\t\tTwo tabs in the data\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Wine7a", REG_SZ, "    Four spaces in the data", 28, 0);
-    todo_wine verify_reg(hkey, "Wine7b", REG_SZ, "\t\tTwo tabs in the data", 23, 0);
+    verify_reg(hkey, "Wine7a", REG_SZ, "    Four spaces in the data", 28, 0);
+    verify_reg(hkey, "Wine7b", REG_SZ, "\t\tTwo tabs in the data", 23, 0);
 
     test_import_str("REGEDIT4\n\n"
                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                     "\"Wine8a\"=\"Trailing spaces\"    \n"
                     "\"Wine8b\"=\"Trailing tabs and spaces\"\t  \t\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Wine8a", REG_SZ, "Trailing spaces", 16, 0);
-    todo_wine verify_reg(hkey, "Wine8b", REG_SZ, "Trailing tabs and spaces", 25, 0);
+    verify_reg(hkey, "Wine8a", REG_SZ, "Trailing spaces", 16, 0);
+    verify_reg(hkey, "Wine8b", REG_SZ, "Trailing tabs and spaces", 25, 0);
 
     test_import_str("REGEDIT4\n\n"
                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -3891,13 +3887,13 @@ static void test_import_with_whitespace(void)
                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                     "@  =  \"Test Value\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "", REG_SZ, "Test Value", 11, 0);
+    verify_reg(hkey, "", REG_SZ, "Test Value", 11, 0);
 
     test_import_str("REGEDIT4\n\n"
                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                     "\t@\t=\tdword:\t00000008\t\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "", REG_DWORD, &dword, sizeof(DWORD), 0);
+    verify_reg(hkey, "", REG_DWORD, &dword, sizeof(DWORD), TODO_REG_TYPE|TODO_REG_SIZE|TODO_REG_DATA);
 
     err = RegCloseKey(hkey);
     ok(err == ERROR_SUCCESS, "RegCloseKey failed: got %d, expected 0\n", err);
@@ -3923,55 +3919,55 @@ static void test_unicode_import_with_whitespace(void)
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                      "\"Wine1a\"=\"Value\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %u, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Wine1a", REG_SZ, "Value", 6, 0);
+    verify_reg(hkey, "Wine1a", REG_SZ, "Value", 6, 0);
 
     test_import_wstr("\xef\xbb\xbf\tWindows Registry Editor Version 5.00\n\n"
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                      "\"Wine1b\"=\"Value\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %u, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Wine1b", REG_SZ, "Value", 6, 0);
+    verify_reg(hkey, "Wine1b", REG_SZ, "Value", 6, 0);
 
     test_import_wstr("\xef\xbb\xbf \t Windows Registry Editor Version 5.00\n\n"
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                      "\"Wine1c\"=\"Value\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %u, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Wine1c", REG_SZ, "Value", 6, 0);
+    verify_reg(hkey, "Wine1c", REG_SZ, "Value", 6, 0);
 
     test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
                      "  [HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                      "\"Wine2a\"=\"Value\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %u, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Wine2a", REG_SZ, "Value", 6, 0);
+    verify_reg(hkey, "Wine2a", REG_SZ, "Value", 6, 0);
 
     test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
                      "\t[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                      "\"Wine2b\"=\"Value\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %u, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Wine2b", REG_SZ, "Value", 6, 0);
+    verify_reg(hkey, "Wine2b", REG_SZ, "Value", 6, 0);
 
     test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
                     " \t [HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                     "\"Wine2c\"=\"Value\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %u, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Wine2c", REG_SZ, "Value", 6, 0);
+    verify_reg(hkey, "Wine2c", REG_SZ, "Value", 6, 0);
 
     test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                      "  \"Wine3a\"=\"Two leading spaces\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %u, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Wine3a", REG_SZ, "Two leading spaces", 19, 0);
+    verify_reg(hkey, "Wine3a", REG_SZ, "Two leading spaces", 19, 0);
 
     test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                      "\t\"Wine3b\"=\"One leading tab\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %u, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Wine3b", REG_SZ, "One leading tab", 16, 0);
+    verify_reg(hkey, "Wine3b", REG_SZ, "One leading tab", 16, 0);
 
     test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                      " \t \"Wine3c\"=\"Space, tab, space\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %u, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Wine3c", REG_SZ, "Space, tab, space", 18, 0);
+    verify_reg(hkey, "Wine3c", REG_SZ, "Space, tab, space", 18, 0);
 
     test_import_wstr("\xef\xbb\xbf                    Windows Registry Editor Version 5.00\n\n"
                      "\t\t\t[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -3982,7 +3978,7 @@ static void test_unicode_import_with_whitespace(void)
                      "\t\t\t\t63,00,61,00,74,00,\\;comment\n"
                      "  \t65,00,6e,00,61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Wine4a", REG_SZ, "Tab and four spaces", 20, 0);
+    verify_reg(hkey, "Wine4a", REG_SZ, "Tab and four spaces", 20, 0);
     dword = 0x112233;
     todo_wine verify_reg(hkey, "Wine4b", REG_DWORD, &dword, sizeof(dword), 0);
     todo_wine verify_reg(hkey, "Wine4c", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
@@ -3994,10 +3990,10 @@ static void test_unicode_import_with_whitespace(void)
                      "\t  \"Wine5c\"=\t  \"Tabs and spaces\"\n"
                      "    \"Wine5d\"    \t    =    \t    \"More whitespace\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Wine5a", REG_SZ, "Leading spaces", 15, 0);
-    todo_wine verify_reg(hkey, "Wine5b", REG_SZ, "Leading tabs", 13, 0);
-    todo_wine verify_reg(hkey, "Wine5c", REG_SZ, "Tabs and spaces", 16, 0);
-    todo_wine verify_reg(hkey, "Wine5d", REG_SZ, "More whitespace", 16, 0);
+    verify_reg(hkey, "Wine5a", REG_SZ, "Leading spaces", 15, 0);
+    verify_reg(hkey, "Wine5b", REG_SZ, "Leading tabs", 13, 0);
+    verify_reg(hkey, "Wine5c", REG_SZ, "Tabs and spaces", 16, 0);
+    verify_reg(hkey, "Wine5d", REG_SZ, "More whitespace", 16, 0);
 
     test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -4005,25 +4001,25 @@ static void test_unicode_import_with_whitespace(void)
                      "\"\t\tWine6b\"=\"Leading tabs\"\n"
                      "  \"  Wine6c  \"  =  \"  Spaces everywhere  \"  \n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "  Wine6a", REG_SZ, "Leading spaces", 15, 0);
-    todo_wine verify_reg(hkey, "\t\tWine6b", REG_SZ, "Leading tabs", 13, 0);
-    todo_wine verify_reg(hkey, "  Wine6c  ", REG_SZ, "  Spaces everywhere  ", 22, 0);
+    verify_reg(hkey, "  Wine6a", REG_SZ, "Leading spaces", 15, 0);
+    verify_reg(hkey, "\t\tWine6b", REG_SZ, "Leading tabs", 13, 0);
+    verify_reg(hkey, "  Wine6c  ", REG_SZ, "  Spaces everywhere  ", 22, 0);
 
     test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                      "\"Wine7a\"=\"    Four spaces in the data\"\n"
                      "\"Wine7b\"=\"\t\tTwo tabs in the data\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Wine7a", REG_SZ, "    Four spaces in the data", 28, 0);
-    todo_wine verify_reg(hkey, "Wine7b", REG_SZ, "\t\tTwo tabs in the data", 23, 0);
+    verify_reg(hkey, "Wine7a", REG_SZ, "    Four spaces in the data", 28, 0);
+    verify_reg(hkey, "Wine7b", REG_SZ, "\t\tTwo tabs in the data", 23, 0);
 
     test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                      "\"Wine8a\"=\"Trailing spaces\"    \n"
                      "\"Wine8b\"=\"Trailing tabs and spaces\"\t  \t\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "Wine8a", REG_SZ, "Trailing spaces", 16, 0);
-    todo_wine verify_reg(hkey, "Wine8b", REG_SZ, "Trailing tabs and spaces", 25, 0);
+    verify_reg(hkey, "Wine8a", REG_SZ, "Trailing spaces", 16, 0);
+    verify_reg(hkey, "Wine8b", REG_SZ, "Trailing tabs and spaces", 25, 0);
 
     test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -4038,13 +4034,13 @@ static void test_unicode_import_with_whitespace(void)
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                      "@  =  \"Test Value\"\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "", REG_SZ, "Test Value", 11, 0);
+    verify_reg(hkey, "", REG_SZ, "Test Value", 11, 0);
 
     test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
                      "\t@\t=\tdword:\t00000008\t\n\n", &r);
     todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
-    todo_wine verify_reg(hkey, "", REG_DWORD, &dword, sizeof(DWORD), 0);
+    verify_reg(hkey, "", REG_DWORD, &dword, sizeof(DWORD), TODO_REG_TYPE|TODO_REG_SIZE|TODO_REG_DATA);
 
     err = RegCloseKey(hkey);
     ok(err == ERROR_SUCCESS, "RegCloseKey failed: got %d, expected 0\n", err);
-- 
2.14.1




More information about the wine-patches mailing list