1 /*
2  * Copyright 2010 Andrew Eikum for CodeWeavers
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17  */
18 
19 #include <windows.h>
20 #include <stdio.h>
21 #include "wine/test.h"
22 
23 #define lok ok_(__FILE__,line)
24 
25 #define run_regedit_exe(c) run_regedit_exe_(__LINE__,c)
run_regedit_exe_(unsigned line,const char * cmd)26 static BOOL run_regedit_exe_(unsigned line, const char *cmd)
27 {
28     STARTUPINFOA si = {sizeof(STARTUPINFOA)};
29     PROCESS_INFORMATION pi;
30     DWORD ret;
31     char cmdline[256];
32 
33     si.dwFlags = STARTF_USESTDHANDLES;
34     si.hStdInput  = INVALID_HANDLE_VALUE;
35     si.hStdOutput = INVALID_HANDLE_VALUE;
36     si.hStdError  = INVALID_HANDLE_VALUE;
37 
38     strcpy(cmdline, cmd);
39     if (!CreateProcessA(NULL, cmdline, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi))
40         return FALSE;
41 
42     ret = WaitForSingleObject(pi.hProcess, 10000);
43     if (ret == WAIT_TIMEOUT)
44         TerminateProcess(pi.hProcess, 1);
45 
46     CloseHandle(pi.hThread);
47     CloseHandle(pi.hProcess);
48     return (ret != WAIT_TIMEOUT);
49 }
50 
write_file(const void * str,DWORD size)51 static BOOL write_file(const void *str, DWORD size)
52 {
53     HANDLE file;
54     BOOL ret;
55     DWORD written;
56 
57     file = CreateFileA("test.reg", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
58                        FILE_ATTRIBUTE_NORMAL, NULL);
59     ok(file != INVALID_HANDLE_VALUE, "CreateFile failed: %u\n", GetLastError());
60     if (file == INVALID_HANDLE_VALUE)
61         return FALSE;
62 
63     ret = WriteFile(file, str, size, &written, NULL);
64     ok(ret, "WriteFile failed: %u\n", GetLastError());
65     CloseHandle(file);
66 
67     return ret;
68 }
69 
70 #define exec_import_str(c)  import_reg(__LINE__,c,FALSE)
71 #define exec_import_wstr(c) import_reg(__LINE__,c,TRUE)
72 
import_reg(unsigned line,const char * contents,BOOL unicode)73 static BOOL import_reg(unsigned line, const char *contents, BOOL unicode)
74 {
75     int lenA;
76     BOOL ret;
77 
78     lenA = strlen(contents);
79 
80     if (unicode)
81     {
82         int len = MultiByteToWideChar(CP_UTF8, 0, contents, lenA, NULL, 0);
83         int size = len * sizeof(WCHAR);
84         WCHAR *wstr = HeapAlloc(GetProcessHeap(), 0, size);
85         if (!wstr) return FALSE;
86         MultiByteToWideChar(CP_UTF8, 0, contents, lenA, wstr, len);
87 
88         ret = write_file(wstr, size);
89         HeapFree(GetProcessHeap(), 0, wstr);
90     }
91     else
92         ret = write_file(contents, lenA);
93 
94     if (!ret) return FALSE;
95 
96     run_regedit_exe("regedit.exe /s test.reg");
97 
98     ret = DeleteFileA("test.reg");
99     lok(ret, "DeleteFile failed: %u\n", GetLastError());
100 
101     return ret;
102 }
103 
104 #define TODO_REG_TYPE    (0x0001u)
105 #define TODO_REG_SIZE    (0x0002u)
106 #define TODO_REG_DATA    (0x0004u)
107 #define TODO_REG_COMPARE (0x0008u)
108 
109 /* verify_reg() adapted from programs/reg/tests/reg.c */
110 #define verify_reg(k,v,t,d,s,todo) verify_reg_(__LINE__,k,v,t,d,s,todo)
verify_reg_(unsigned line,HKEY hkey,const char * value,DWORD exp_type,const void * exp_data,DWORD exp_size,DWORD todo)111 static void verify_reg_(unsigned line, HKEY hkey, const char *value,
112                         DWORD exp_type, const void *exp_data, DWORD exp_size, DWORD todo)
113 {
114     DWORD type, size;
115     BYTE data[256];
116     LONG err;
117 
118     size = sizeof(data);
119     memset(data, 0xdd, size);
120     err = RegQueryValueExA(hkey, value, NULL, &type, data, &size);
121     lok(err == ERROR_SUCCESS, "RegQueryValueEx failed: got %d\n", err);
122     if (err != ERROR_SUCCESS)
123         return;
124 
125     todo_wine_if (todo & TODO_REG_TYPE)
126         lok(type == exp_type, "got wrong type %d, expected %d\n", type, exp_type);
127     todo_wine_if (todo & TODO_REG_SIZE)
128         lok(size == exp_size, "got wrong size %d, expected %d\n", size, exp_size);
129     if (exp_data)
130     {
131         todo_wine_if (todo & TODO_REG_DATA)
132             lok(memcmp(data, exp_data, size) == 0, "got wrong data\n");
133     }
134 }
135 
136 #define verify_reg_nonexist(k,n) r_verify_reg_nonexist(__LINE__,k,n)
r_verify_reg_nonexist(unsigned line,HKEY key,const char * value_name)137 static void r_verify_reg_nonexist(unsigned line, HKEY key, const char *value_name)
138 {
139     LONG lr;
140 
141     lr = RegQueryValueExA(key, value_name, NULL, NULL, NULL, NULL);
142     lok(lr == ERROR_FILE_NOT_FOUND, "registry value '%s' shouldn't exist; got %d, expected 2\n",
143        (value_name && *value_name) ? value_name : "(Default)", lr);
144 }
145 
146 #define open_key(b,p,s,k) open_key_(__LINE__,b,p,s,k)
open_key_(unsigned line,const HKEY base,const char * path,const DWORD sam,HKEY * hkey)147 static void open_key_(unsigned line, const HKEY base, const char *path, const DWORD sam, HKEY *hkey)
148 {
149     LONG lr;
150 
151     lr = RegOpenKeyExA(base, path, 0, KEY_READ|sam, hkey);
152     lok(lr == ERROR_SUCCESS, "RegOpenKeyExA failed: %d\n", lr);
153 }
154 
155 #define close_key(k) close_key_(__LINE__,k)
close_key_(unsigned line,HKEY hkey)156 static void close_key_(unsigned line, HKEY hkey)
157 {
158     LONG lr;
159 
160     lr = RegCloseKey(hkey);
161     lok(lr == ERROR_SUCCESS, "RegCloseKey failed: %d\n", lr);
162 }
163 
164 #define verify_key(k,s) verify_key_(__LINE__,k,s)
verify_key_(unsigned line,HKEY key_base,const char * subkey)165 static void verify_key_(unsigned line, HKEY key_base, const char *subkey)
166 {
167     HKEY hkey;
168     LONG lr;
169 
170     lr = RegOpenKeyExA(key_base, subkey, 0, KEY_READ, &hkey);
171     lok(lr == ERROR_SUCCESS, "RegOpenKeyExA failed: got %d\n", lr);
172 
173     if (hkey)
174         RegCloseKey(hkey);
175 }
176 
177 #define verify_key_nonexist(k,s) verify_key_nonexist_(__LINE__,k,s)
verify_key_nonexist_(unsigned line,HKEY key_base,const char * subkey)178 static void verify_key_nonexist_(unsigned line, HKEY key_base, const char *subkey)
179 {
180     HKEY hkey;
181     LONG lr;
182 
183     lr = RegOpenKeyExA(key_base, subkey, 0, KEY_READ, &hkey);
184     lok(lr == ERROR_FILE_NOT_FOUND, "registry key '%s' shouldn't exist; got %d, expected 2\n",
185         subkey, lr);
186 
187     if (hkey)
188         RegCloseKey(hkey);
189 }
190 
191 #define add_key(k,p,s) add_key_(__LINE__,k,p,s)
add_key_(unsigned line,const HKEY hkey,const char * path,HKEY * subkey)192 static void add_key_(unsigned line, const HKEY hkey, const char *path, HKEY *subkey)
193 {
194     LONG lr;
195 
196     lr = RegCreateKeyExA(hkey, path, 0, NULL, REG_OPTION_NON_VOLATILE,
197                          KEY_READ|KEY_WRITE, NULL, subkey, NULL);
198     lok(lr == ERROR_SUCCESS, "RegCreateKeyExA failed: %d\n", lr);
199 }
200 
201 #define delete_key(k,p) delete_key_(__LINE__,k,p)
delete_key_(unsigned line,const HKEY hkey,const char * path)202 static void delete_key_(unsigned line, const HKEY hkey, const char *path)
203 {
204     if (path && *path)
205     {
206         LONG lr;
207 
208         lr = RegDeleteKeyA(hkey, path);
209         lok(lr == ERROR_SUCCESS, "RegDeleteKeyA failed: %d\n", lr);
210     }
211 }
212 
delete_tree(const HKEY key,const char * subkey)213 static LONG delete_tree(const HKEY key, const char *subkey)
214 {
215     HKEY hkey;
216     LONG ret;
217     char *subkey_name = NULL;
218     DWORD max_subkey_len, subkey_len;
219     static const char empty[1];
220 
221     ret = RegOpenKeyExA(key, subkey, 0, KEY_READ, &hkey);
222     if (ret) return ret;
223 
224     ret = RegQueryInfoKeyA(hkey, NULL, NULL, NULL, NULL, &max_subkey_len,
225                            NULL, NULL, NULL, NULL, NULL, NULL);
226     if (ret) goto cleanup;
227 
228     max_subkey_len++;
229 
230     subkey_name = HeapAlloc(GetProcessHeap(), 0, max_subkey_len);
231     if (!subkey_name)
232     {
233         ret = ERROR_NOT_ENOUGH_MEMORY;
234         goto cleanup;
235     }
236 
237     for (;;)
238     {
239         subkey_len = max_subkey_len;
240         ret = RegEnumKeyExA(hkey, 0, subkey_name, &subkey_len, NULL, NULL, NULL, NULL);
241         if (ret == ERROR_NO_MORE_ITEMS) break;
242         if (ret) goto cleanup;
243         ret = delete_tree(hkey, subkey_name);
244         if (ret) goto cleanup;
245     }
246 
247     ret = RegDeleteKeyA(hkey, empty);
248 
249 cleanup:
250     HeapFree(GetProcessHeap(), 0, subkey_name);
251     RegCloseKey(hkey);
252     return ret;
253 }
254 
255 #define add_value(k,n,t,d,s) add_value_(__LINE__,k,n,t,d,s)
add_value_(unsigned line,HKEY hkey,const char * name,DWORD type,const void * data,size_t size)256 static void add_value_(unsigned line, HKEY hkey, const char *name, DWORD type,
257                        const void *data, size_t size)
258 {
259     LONG lr;
260 
261     lr = RegSetValueExA(hkey, name, 0, type, (const BYTE *)data, size);
262     lok(lr == ERROR_SUCCESS, "RegSetValueExA failed: %d\n", lr);
263 }
264 
265 #define delete_value(k,n) delete_value_(__LINE__,k,n)
delete_value_(unsigned line,const HKEY hkey,const char * name)266 static void delete_value_(unsigned line, const HKEY hkey, const char *name)
267 {
268     LONG lr;
269 
270     lr = RegDeleteValueA(hkey, name);
271     lok(lr == ERROR_SUCCESS, "RegDeleteValueA failed: %d\n", lr);
272 }
273 
274 #define KEY_BASE "Software\\Wine\\regedit_test"
275 
test_basic_import(void)276 static void test_basic_import(void)
277 {
278     HKEY hkey, subkey;
279     DWORD dword = 0x17, type, size;
280     char exp_binary[] = {0xAA,0xBB,0xCC,0x11};
281     LONG lr;
282     char buffer[256];
283     BYTE hex[8];
284 
285     delete_tree(HKEY_CURRENT_USER, KEY_BASE);
286     verify_key_nonexist(HKEY_CURRENT_USER, KEY_BASE);
287 
288     exec_import_str("REGEDIT4\n\n"
289                 "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
290                 "\"TestValue\"=\"AValue\"\n");
291     open_key(HKEY_CURRENT_USER, KEY_BASE, 0, &hkey);
292     verify_reg(hkey, "TestValue", REG_SZ, "AValue", 7, 0);
293 
294     exec_import_str("REGEDIT4\r\n\r\n"
295                 "[HKEY_CURRENT_USER\\" KEY_BASE "]\r\n"
296                 "\"TestValue2\"=\"BValue\"\r\n");
297     verify_reg(hkey, "TestValue2", REG_SZ, "BValue", 7, 0);
298 
299     exec_import_str("Windows Registry Editor Version 5.00\n\n"
300                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
301                     "\"TestValue3\"=\"Value\"\n");
302     verify_reg(hkey, "TestValue3", REG_SZ, "Value", 6, 0);
303 
304     exec_import_str("REGEDIT4\r\r"
305                 "[HKEY_CURRENT_USER\\" KEY_BASE "]\r"
306                 "\"TestValue4\"=\"DValue\"\r");
307     verify_reg(hkey, "TestValue4", REG_SZ, "DValue", 7, 0);
308 
309     exec_import_str("Windows Registry Editor Version 5.00\r\r"
310                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\r"
311                     "\"TestValue5\"=\"Value\"\r");
312     verify_reg(hkey, "TestValue5", REG_SZ, "Value", 6, 0);
313 
314     exec_import_str("REGEDIT4\n\n"
315                 "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
316                 "\"TestDword\"=dword:00000017\n");
317     verify_reg(hkey, "TestDword", REG_DWORD, &dword, sizeof(dword), 0);
318 
319     exec_import_str("REGEDIT4\n\n"
320                 "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
321                 "\"TestBinary\"=hex:aa,bb,cc,11\n");
322     verify_reg(hkey, "TestBinary", REG_BINARY, exp_binary, sizeof(exp_binary), 0);
323 
324     exec_import_str("REGEDIT4\n\n"
325                 "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
326                 "\"With=Equals\"=\"asdf\"\n");
327     verify_reg(hkey, "With=Equals", REG_SZ, "asdf", 5, 0);
328 
329     exec_import_str("REGEDIT4\n\n"
330                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
331                     "\"Empty string\"=\"\"\n"
332                     "\"\"=\"Default registry value\"\n\n");
333     verify_reg(hkey, "Empty string", REG_SZ, "", 1, 0);
334     verify_reg(hkey, NULL, REG_SZ, "Default registry value", 23, 0);
335 
336     exec_import_str("REGEDIT4\n\n"
337                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
338                     "\"Line1\"=\"Value1\"\n\n"
339                     "\"Line2\"=\"Value2\"\n\n\n"
340                     "\"Line3\"=\"Value3\"\n\n\n\n"
341                     "\"Line4\"=\"Value4\"\n\n");
342     verify_reg(hkey, "Line1", REG_SZ, "Value1", 7, 0);
343     verify_reg(hkey, "Line2", REG_SZ, "Value2", 7, 0);
344     verify_reg(hkey, "Line3", REG_SZ, "Value3", 7, 0);
345     verify_reg(hkey, "Line4", REG_SZ, "Value4", 7, 0);
346 
347     exec_import_str("REGEDIT4\n\n"
348                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
349                     "\"Wine1\"=dword:00000782\n\n"
350                     "\"Wine2\"=\"Test Value\"\n"
351                     "\"Wine3\"=hex(7):4c,69,6e,65,20,\\\n"
352                     "  63,6f,6e,63,61,74,65,6e,61,74,69,6f,6e,00,00\n"
353                     "#comment\n"
354                     "@=\"Test\"\n"
355                     ";comment\n\n"
356                     "\"Wine4\"=dword:12345678\n\n");
357     dword = 0x782;
358     verify_reg(hkey, "Wine1", REG_DWORD, &dword, sizeof(dword), 0);
359     verify_reg(hkey, "Wine2", REG_SZ, "Test Value", 11, 0);
360     verify_reg(hkey, "Wine3", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
361     verify_reg(hkey, "", REG_SZ, "Test", 5, 0);
362     dword = 0x12345678;
363     verify_reg(hkey, "Wine4", REG_DWORD, &dword, sizeof(dword), 0);
364 
365     exec_import_str("REGEDIT4\n\n"
366                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
367                     "\"Wine5\"=\"No newline\"");
368     verify_reg(hkey, "Wine5", REG_SZ, "No newline", 11, 0);
369 
370     exec_import_str("REGEDIT4\n\n"
371                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
372                     "\"Wine6\"=dword:00000050\n\n"
373                     "\"Wine7\"=\"No newline\"");
374     dword = 0x50;
375     verify_reg(hkey, "Wine6", REG_DWORD, &dword, sizeof(dword), 0);
376     verify_reg(hkey, "Wine7", REG_SZ, "No newline", 11, 0);
377 
378     exec_import_str("REGEDIT4\n\n"
379                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
380                     "\"Wine8a\"=dword:1\n"
381                     "\"Wine8b\"=dword:4444\n\n");
382     dword = 0x1;
383     verify_reg(hkey, "Wine8a", REG_DWORD, &dword, sizeof(dword), 0);
384     dword = 0x4444;
385     verify_reg(hkey, "Wine8b", REG_DWORD, &dword, sizeof(dword), 0);
386 
387     exec_import_str("REGEDIT4\n\n"
388                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
389                     "\"Wine9a\"=hex(2):4c,69,6e,65,00\n"
390                     "\"Wine9b\"=\"Value 1\"\n"
391                     "\"Wine9c\"=hex(2):4c,69,6e,65\\\n"
392                     "\"Wine9d\"=\"Value 2\"\n"
393                     "\"Wine9e\"=hex(2):4c,69,6e,65,\\\n"
394                     "\"Wine9f\"=\"Value 3\"\n"
395                     "\"Wine9g\"=\"Value 4\"\n\n");
396     verify_reg(hkey, "Wine9a", REG_EXPAND_SZ, "Line", 5, 0);
397     verify_reg(hkey, "Wine9b", REG_SZ, "Value 1", 8, 0);
398     verify_reg_nonexist(hkey, "Wine9c");
399     verify_reg(hkey, "Wine9d", REG_SZ, "Value 2", 8, 0);
400     verify_reg_nonexist(hkey, "Wine9e");
401     verify_reg_nonexist(hkey, "Wine9f");
402     verify_reg(hkey, "Wine9g", REG_SZ, "Value 4", 8, 0);
403 
404     exec_import_str("REGEDIT4\n\n"
405                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
406                     "\"double\\\"quote\"=\"valid \\\"or\\\" not\"\n"
407                     "\"single'quote\"=dword:00000008\n\n");
408     verify_reg(hkey, "double\"quote", REG_SZ, "valid \"or\" not", 15, 0);
409     dword = 0x00000008;
410     verify_reg(hkey, "single'quote", REG_DWORD, &dword, sizeof(dword), 0);
411 
412     /* Test hex data concatenation for REG_NONE, REG_EXPAND_SZ and REG_BINARY */
413     exec_import_str("REGEDIT4\n\n"
414                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
415                     "\"Wine10a\"=hex(0):56,00,61,00,6c,00,75,00,65,00,00,00\n"
416                     "\"Wine10b\"=hex(0):56,00,61,00,6c,00,\\\n"
417                     "  75,00,65,00,00,00\n"
418                     "\"Wine10c\"=hex(0):56,00,61,00,\\;comment\n"
419                     "  6c,00,75,00,\\\n"
420                     "  65,00,00,00\n"
421                     "\"Wine10d\"=hex(0):56,00,61,00,\\;comment\n"
422                     "  6c,00,75,00,\n"
423                     "  65,00,00,00\n"
424                     "\"Wine10e\"=hex(0):56,00,61,00,\\;comment\n"
425                     "  6c,00,75,00,;comment\n"
426                     "  65,00,00,00\n");
427     verify_reg(hkey, "Wine10a", REG_NONE, "V\0a\0l\0u\0e\0\0", 12, 0);
428     verify_reg(hkey, "Wine10b", REG_NONE, "V\0a\0l\0u\0e\0\0", 12, 0);
429     verify_reg(hkey, "Wine10c", REG_NONE, "V\0a\0l\0u\0e\0\0", 12, 0);
430     verify_reg(hkey, "Wine10d", REG_NONE, "V\0a\0l\0u", 8, 0);
431     verify_reg(hkey, "Wine10e", REG_NONE, "V\0a\0l\0u", 8, 0);
432 
433     exec_import_str("REGEDIT4\n\n"
434                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
435                     "\"Wine11a\"=hex(2):25,50,41,54,48,25,00\n"
436                     "\"Wine11b\"=hex(2):25,50,41,\\\n"
437                     "  54,48,25,00\n"
438                     "\"Wine11c\"=hex(2):25,50,41,\\;comment\n"
439                     "  54,48,\\\n"
440                     "  25,00\n"
441                     "\"Wine11d\"=hex(2):25,50,41,\\;comment\n"
442                     "  54,48,\n"
443                     "  25,00\n"
444                     "\"Wine11e\"=hex(2):25,50,41,\\;comment\n"
445                     "  54,48,;comment\n"
446                     "  25,00\n");
447     verify_reg(hkey, "Wine11a", REG_EXPAND_SZ, "%PATH%", 7, 0);
448     verify_reg(hkey, "Wine11b", REG_EXPAND_SZ, "%PATH%", 7, 0);
449     verify_reg(hkey, "Wine11c", REG_EXPAND_SZ, "%PATH%", 7, 0);
450     /* Wine11d */
451     size = sizeof(buffer);
452     lr = RegQueryValueExA(hkey, "Wine11d", NULL, &type, (BYTE *)&buffer, &size);
453     ok(lr == ERROR_SUCCESS, "RegQueryValueExA failed: %d\n", lr);
454     ok(type == REG_EXPAND_SZ, "got wrong type %u, expected %u\n", type, REG_EXPAND_SZ);
455     ok(size == 6 || broken(size == 5) /* Win2k */, "got wrong size %u, expected 6\n", size);
456     ok(memcmp(buffer, "%PATH", size) == 0, "got wrong data\n");
457     /* Wine11e */
458     size = sizeof(buffer);
459     memset(buffer, '-', size);
460     lr = RegQueryValueExA(hkey, "Wine11e", NULL, &type, (BYTE *)&buffer, &size);
461     ok(lr == ERROR_SUCCESS, "RegQueryValueExA failed: %d\n", lr);
462     ok(type == REG_EXPAND_SZ, "got wrong type %u, expected %u\n", type, REG_EXPAND_SZ);
463     ok(size == 6 || broken(size == 5) /* Win2k */, "got wrong size %u, expected 6\n", size);
464     ok(memcmp(buffer, "%PATH", size) == 0, "got wrong data\n");
465 
466     exec_import_str("REGEDIT4\n\n"
467                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
468                     "\"Wine12a\"=hex:11,22,33,44,55,66,77,88\n"
469                     "\"Wine12b\"=hex:11,22,33,44,\\\n"
470                     "  55,66,77,88\n"
471                     "\"Wine12c\"=hex:11,22,33,44,\\;comment\n"
472                     "  55,66,\\\n"
473                     "  77,88\n"
474                     "\"Wine12d\"=hex:11,22,33,44,\\;comment\n"
475                     "  55,66,\n"
476                     "  77,88\n"
477                     "\"Wine12e\"=hex:11,22,33,44,\\;comment\n"
478                     "  55,66,;comment\n"
479                     "  77,88\n");
480     hex[0] = 0x11; hex[1] = 0x22; hex[2] = 0x33; hex[3] = 0x44;
481     hex[4] = 0x55; hex[5] = 0x66; hex[6] = 0x77; hex[7] = 0x88;
482     verify_reg(hkey, "Wine12a", REG_BINARY, hex, sizeof(hex), 0);
483     verify_reg(hkey, "Wine12b", REG_BINARY, hex, sizeof(hex), 0);
484     verify_reg(hkey, "Wine12c", REG_BINARY, hex, sizeof(hex), 0);
485     verify_reg(hkey, "Wine12d", REG_BINARY, hex, 6, 0);
486     verify_reg(hkey, "Wine12e", REG_BINARY, hex, 6, 0);
487 
488     /* Test import with subkeys */
489     exec_import_str("REGEDIT4\n\n"
490                     "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey\"1]\n"
491                     "\"Wine\\\\31\"=\"Test value\"\n\n");
492     open_key(hkey, "Subkey\"1", 0, &subkey);
493     verify_reg(subkey, "Wine\\31", REG_SZ, "Test value", 11, 0);
494     close_key(subkey);
495     delete_key(hkey, "Subkey\"1");
496 
497     exec_import_str("REGEDIT4\n\n"
498                     "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey/2]\n"
499                     "\"123/\\\"4;'5\"=\"Random value name\"\n\n");
500     open_key(hkey, "Subkey/2", 0, &subkey);
501     verify_reg(subkey, "123/\"4;'5", REG_SZ, "Random value name", 18, 0);
502     close_key(subkey);
503     delete_key(hkey, "Subkey/2");
504 
505     /* Test the accepted range of the hex-based data types */
506     exec_import_str("REGEDIT4\n\n"
507                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
508                     "\"Wine13a\"=hex(0):56,61,6c,75,65,00\n"
509                     "\"Wine13b\"=hex(10):56,61,6c,75,65,00\n"
510                     "\"Wine13c\"=hex(100):56,61,6c,75,65,00\n"
511                     "\"Wine13d\"=hex(1000):56,61,6c,75,65,00\n"
512                     "\"Wine13e\"=hex(7fff):56,61,6c,75,65,00\n"
513                     "\"Wine13f\"=hex(ffff):56,61,6c,75,65,00\n"
514                     "\"Wine13g\"=hex(7fffffff):56,61,6c,75,65,00\n"
515                     "\"Wine13h\"=hex(ffffffff):56,61,6c,75,65,00\n"
516                     "\"Wine13i\"=hex(100000000):56,61,6c,75,65,00\n"
517                     "\"Wine13j\"=hex(0x2):56,61,6c,75,65,00\n"
518                     "\"Wine13k\"=hex(0X2):56,61,6c,75,65,00\n"
519                     "\"Wine13l\"=hex(x2):56,61,6c,75,65,00\n\n");
520     verify_reg(hkey, "Wine13a", REG_NONE, "Value", 6, 0);
521     verify_reg(hkey, "Wine13b", 0x10, "Value", 6, 0);
522     verify_reg(hkey, "Wine13c", 0x100, "Value", 6, 0);
523     verify_reg(hkey, "Wine13d", 0x1000, "Value", 6, 0);
524     verify_reg(hkey, "Wine13e", 0x7fff, "Value", 6, 0);
525     verify_reg(hkey, "Wine13f", 0xffff, "Value", 6, 0);
526     verify_reg(hkey, "Wine13g", 0x7fffffff, "Value", 6, 0);
527     verify_reg(hkey, "Wine13h", 0xffffffff, "Value", 6, 0);
528     verify_reg_nonexist(hkey, "Wine13i");
529     verify_reg_nonexist(hkey, "Wine13j");
530     verify_reg_nonexist(hkey, "Wine13k");
531     verify_reg_nonexist(hkey, "Wine13l");
532 
533     exec_import_str("REGEDIT4\n\n"
534                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
535                     "\"Wine14a\"=hex(7):4c,69,6e,65,20,  \\\n"
536                     "  63,6f,6e,63,61,74,65,6e,61,74,69,6f,6e,00,00\n"
537                     "\"Wine14b\"=hex(7):4c,69,6e,65,20,\t\\\n"
538                     "  63,6f,6e,63,61,74,65,6e,61,74,69,6f,6e,00,00\n\n");
539     verify_reg(hkey, "Wine14a", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
540     verify_reg(hkey, "Wine14b", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
541 
542     exec_import_str("REGEDIT4\n\n"
543                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
544                     "\"Wine15\"=hex(2):25,50,41,54,48,25,00,\n\n");
545     verify_reg(hkey, "Wine15", REG_EXPAND_SZ, "%PATH%", 7, 0);
546 
547     exec_import_str("REGEDIT4\n\n"
548                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
549                     "\"Wine16\"=hex(2):\\\n"
550                     "  25,48,4f,4d,45,25,00\n\n");
551     verify_reg(hkey, "Wine16", REG_EXPAND_SZ, "%HOME%", 7, 0);
552 
553     exec_import_str("REGEDIT4\n\n"
554                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
555                     "\"Wine17a\"=hex(0):56,61,6c,75,65,\\");
556     verify_reg(hkey, "Wine17a", REG_NONE, "Value", 5, 0);
557 
558     exec_import_str("REGEDIT4\n\n"
559                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
560                     "\"Wine17b\"=hex(2):25,50,41,54,48,25,\\");
561     verify_reg(hkey, "Wine17b", REG_EXPAND_SZ, "%PATH%", 7, 0);
562 
563     exec_import_str("REGEDIT4\n\n"
564                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
565                     "\"Wine17c\"=hex:11,22,33,44,55,\\");
566     verify_reg(hkey, "Wine17c", REG_BINARY, hex, 5, 0);
567 
568     exec_import_str("REGEDIT4\n\n"
569                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
570                     "\"Wine17d\"=hex(7):4c,69,6e,65,\\");
571     verify_reg(hkey, "Wine17d", REG_MULTI_SZ, "Line", 5, 0);
572 
573     exec_import_str("REGEDIT4\n\n"
574                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
575                     "\"Wine17e\"=hex(100):56,61,6c,75,65,\\");
576     verify_reg(hkey, "Wine17e", 0x100, "Value", 5, 0);
577 
578     exec_import_str("REGEDIT4\n\n"
579                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
580                     "\"Wine18a\"=hex(7):4c,69,6e,65,00,00\n"
581                     "\"Wine18b\"=hex(7):4c,69,6e,65,20,\\\n"
582                     "  63,6f,6e,63,61,74,65,6e,61,74,69,6f,6e,00,00\n"
583                     "\"Wine18c\"=hex(7):4c,69,6e,65,20,\\;comment\n"
584                     "  63,6f,6e,63,61,74,\\\n"
585                     "  65,6e,61,74,69,6f,6e,00,00\n"
586                     "\"Wine18d\"=hex(7):4c,69,6e,65,20,\\;comment\n"
587                     "  63,6f,6e,63,61,74,\n"
588                     "  65,6e,61,74,69,6f,6e,00,00\n"
589                     "\"Wine18e\"=hex(7):4c,69,6e,65,20,\\\n"
590                     "  63,6f,6e,63,61,74,;comment\n"
591                     "  65,6e,61,74,69,6f,6e,00,00\n\n");
592     verify_reg(hkey, "Wine18a", REG_MULTI_SZ, "Line\0", 6, 0);
593     verify_reg(hkey, "Wine18b", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
594     verify_reg(hkey, "Wine18c", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
595     /* Wine18d */
596     size = sizeof(buffer);
597     memset(buffer, '-', size);
598     lr = RegQueryValueExA(hkey, "Wine18d", NULL, &type, (BYTE *)&buffer, &size);
599     ok(lr == ERROR_SUCCESS, "RegQueryValueExA failed: %d\n", lr);
600     ok(type == REG_MULTI_SZ, "got wrong type %u, expected %u\n", type, REG_MULTI_SZ);
601     ok(size == 12 || broken(size == 11) /* Win2k */, "got wrong size %u, expected 12\n", size);
602     ok(memcmp(buffer, "Line concat", size) == 0, "got wrong data\n");
603     /* Wine18e */
604     size = sizeof(buffer);
605     memset(buffer, '-', size);
606     lr = RegQueryValueExA(hkey, "Wine18e", NULL, &type, (BYTE *)&buffer, &size);
607     ok(lr == ERROR_SUCCESS, "RegQueryValueExA failed: %d\n", lr);
608     ok(type == REG_MULTI_SZ, "got wrong type %u, expected %u\n", type, REG_MULTI_SZ);
609     ok(size == 12 || broken(size == 11) /* Win2k */, "got wrong size %u, expected 12\n", size);
610     ok(memcmp(buffer, "Line concat", size) == 0, "got wrong data\n");
611 
612     exec_import_str("REGEDIT4\n\n"
613                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
614                     "\"Wine19a\"=hex(100):25,50,41,54,48,25,00\n"
615                     "\"Wine19b\"=hex(100):25,50,41,\\\n"
616                     "  54,48,25,00\n"
617                     "\"Wine19c\"=hex(100):25,50,41,\\;comment\n"
618                     "  54,48,\\\n"
619                     "  25,00\n"
620                     "\"Wine19d\"=hex(100):25,50,41,\\;comment\n"
621                     "  54,48,\n"
622                     "  25,00\n"
623                     "\"Wine19e\"=hex(100):25,50,41,\\;comment\n"
624                     "  54,48,;comment\n"
625                     "  25,00\n");
626     verify_reg(hkey, "Wine19a", 0x100, "%PATH%", 7, 0);
627     verify_reg(hkey, "Wine19b", 0x100, "%PATH%", 7, 0);
628     verify_reg(hkey, "Wine19c", 0x100, "%PATH%", 7, 0);
629     verify_reg(hkey, "Wine19d", 0x100, "%PATH", 5, 0);
630     verify_reg(hkey, "Wine19e", 0x100, "%PATH", 5, 0);
631 
632     /* Test null-termination of REG_EXPAND_SZ and REG_MULTI_SZ data*/
633     exec_import_str("REGEDIT4\n\n"
634                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
635                     "\"Wine20a\"=hex(7):4c,69,6e,65\n"
636                     "\"Wine20b\"=hex(7):4c,69,6e,65,\n"
637                     "\"Wine20c\"=hex(7):4c,69,6e,65,00\n"
638                     "\"Wine20d\"=hex(7):4c,69,6e,65,00,\n"
639                     "\"Wine20e\"=hex(7):4c,69,6e,65,00,00\n"
640                     "\"Wine20f\"=hex(7):4c,69,6e,65,00,00,\n\n");
641     verify_reg(hkey, "Wine20a", REG_MULTI_SZ, "Line", 5, 0);
642     verify_reg(hkey, "Wine20b", REG_MULTI_SZ, "Line", 5, 0);
643     verify_reg(hkey, "Wine20c", REG_MULTI_SZ, "Line", 5, 0);
644     verify_reg(hkey, "Wine20d", REG_MULTI_SZ, "Line", 5, 0);
645     verify_reg(hkey, "Wine20e", REG_MULTI_SZ, "Line\0", 6, 0);
646     verify_reg(hkey, "Wine20f", REG_MULTI_SZ, "Line\0", 6, 0);
647 
648     exec_import_str("REGEDIT4\n\n"
649                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
650                     "\"Wine21a\"=hex(2):25,50,41,54,48,25\n"
651                     "\"Wine21b\"=hex(2):25,50,41,54,48,25,\n"
652                     "\"Wine21c\"=hex(2):25,50,41,54,48,25,00\n"
653                     "\"Wine21d\"=hex(2):25,50,41,54,48,25,00,\n\n");
654     verify_reg(hkey, "Wine21a", REG_EXPAND_SZ, "%PATH%", 7, 0);
655     verify_reg(hkey, "Wine21b", REG_EXPAND_SZ, "%PATH%", 7, 0);
656     verify_reg(hkey, "Wine21c", REG_EXPAND_SZ, "%PATH%", 7, 0);
657     verify_reg(hkey, "Wine21d", REG_EXPAND_SZ, "%PATH%", 7, 0);
658 
659     exec_import_str("REGEDIT4\n\n"
660                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
661                     "\"Wine22a\"=hex(1):\n"
662                     "\"Wine22b\"=hex(2):\n"
663                     "\"Wine22c\"=hex(3):\n"
664                     "\"Wine22d\"=hex(4):\n"
665                     "\"Wine22e\"=hex(7):\n"
666                     "\"Wine22f\"=hex(100):\n"
667                     "\"Wine22g\"=hex(abcd):\n"
668                     "\"Wine22h\"=hex:\n"
669                     "\"Wine22i\"=hex(0):\n\n");
670     verify_reg(hkey, "Wine22a", REG_SZ, NULL, 0, 0);
671     verify_reg(hkey, "Wine22b", REG_EXPAND_SZ, NULL, 0, 0);
672     verify_reg(hkey, "Wine22c", REG_BINARY, NULL, 0, 0);
673     verify_reg(hkey, "Wine22d", REG_DWORD, NULL, 0, 0);
674     verify_reg(hkey, "Wine22e", REG_MULTI_SZ, NULL, 0, 0);
675     verify_reg(hkey, "Wine22f", 0x100, NULL, 0, 0);
676     verify_reg(hkey, "Wine22g", 0xabcd, NULL, 0, 0);
677     verify_reg(hkey, "Wine22h", REG_BINARY, NULL, 0, 0);
678     verify_reg(hkey, "Wine22i", REG_NONE, NULL, 0, 0);
679 
680     /* Test with escaped null characters */
681     exec_import_str("REGEDIT4\n\n"
682                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
683                     "\"Wine23a\"=\"\\\\0\"\n"
684                     "\"Wine23b\"=\"\\\\0\\\\0\"\n"
685                     "\"Wine23c\"=\"Value1\\\\0\"\n"
686                     "\"Wine23d\"=\"Value2\\\\0\\\\0\\\\0\\\\0\"\n"
687                     "\"Wine23e\"=\"Value3\\\\0Value4\"\n"
688                     "\"Wine23f\"=\"\\\\0Value5\"\n\n");
689     verify_reg(hkey, "Wine23a", REG_SZ, "\\0", 3, 0);
690     verify_reg(hkey, "Wine23b", REG_SZ, "\\0\\0", 5, 0);
691     verify_reg(hkey, "Wine23c", REG_SZ, "Value1\\0", 9, 0);
692     verify_reg(hkey, "Wine23d", REG_SZ, "Value2\\0\\0\\0\\0", 15, 0);
693     verify_reg(hkey, "Wine23e", REG_SZ, "Value3\\0Value4", 15, 0);
694     verify_reg(hkey, "Wine23f", REG_SZ, "\\0Value5", 9, 0);
695 
696     /* Test forward and back slashes */
697     exec_import_str("REGEDIT4\n\n"
698                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
699                     "\"count/up\"=\"one/two/three\"\n"
700                     "\"\\\\foo\\\\bar\"=\"\"\n\n"
701                     "[HKEY_CURRENT_USER\\" KEY_BASE "\\https://winehq.org]\n\n");
702     verify_reg(hkey, "count/up", REG_SZ, "one/two/three", 14, 0);
703     verify_reg(hkey, "\\foo\\bar", REG_SZ, "", 1, 0);
704     verify_key(hkey, "https://winehq.org");
705 
706     close_key(hkey);
707 
708     delete_tree(HKEY_CURRENT_USER, KEY_BASE);
709 }
710 
test_basic_import_unicode(void)711 static void test_basic_import_unicode(void)
712 {
713     HKEY hkey, subkey;
714     DWORD dword = 0x17, type, size;
715     char exp_binary[] = {0xAA,0xBB,0xCC,0x11};
716     LONG lr;
717     char buffer[256];
718     BYTE hex[8];
719 
720     delete_tree(HKEY_CURRENT_USER, KEY_BASE);
721     verify_key_nonexist(HKEY_CURRENT_USER, KEY_BASE);
722 
723     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
724                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
725                      "\"TestValue\"=\"AValue\"\n");
726     open_key(HKEY_CURRENT_USER, KEY_BASE, 0, &hkey);
727     verify_reg(hkey, "TestValue", REG_SZ, "AValue", 7, 0);
728 
729     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\r\n\r\n"
730                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\r\n"
731                      "\"TestValue2\"=\"BValue\"\r\n");
732     verify_reg(hkey, "TestValue2", REG_SZ, "BValue", 7, 0);
733 
734     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
735                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
736                      "\"TestValue3\"=\"Value\"\n");
737     verify_reg(hkey, "TestValue3", REG_SZ, "Value", 6, 0);
738 
739     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\r\r"
740                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\r"
741                      "\"TestValue4\"=\"DValue\"\r");
742     verify_reg(hkey, "TestValue4", REG_SZ, "DValue", 7, 0);
743 
744     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\r\r"
745                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\r"
746                      "\"TestValue5\"=\"Value\"\r");
747     verify_reg(hkey, "TestValue5", REG_SZ, "Value", 6, 0);
748 
749     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
750                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
751                      "\"TestDword\"=dword:00000017\n");
752     verify_reg(hkey, "TestDword", REG_DWORD, &dword, sizeof(dword), 0);
753 
754     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
755                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
756                     "\"TestBinary\"=hex:aa,bb,cc,11\n");
757     verify_reg(hkey, "TestBinary", REG_BINARY, exp_binary, sizeof(exp_binary), 0);
758 
759     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
760                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
761                     "\"With=Equals\"=\"asdf\"\n");
762     verify_reg(hkey, "With=Equals", REG_SZ, "asdf", 5, 0);
763 
764     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
765                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
766                      "\"Empty string\"=\"\"\n"
767                      "\"\"=\"Default registry value\"\n\n");
768     verify_reg(hkey, "Empty string", REG_SZ, "", 1, 0);
769     verify_reg(hkey, NULL, REG_SZ, "Default registry value", 23, 0);
770 
771     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
772                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
773                      "\"Line1\"=\"Value1\"\n\n"
774                      "\"Line2\"=\"Value2\"\n\n\n"
775                      "\"Line3\"=\"Value3\"\n\n\n\n"
776                      "\"Line4\"=\"Value4\"\n\n");
777     verify_reg(hkey, "Line1", REG_SZ, "Value1", 7, 0);
778     verify_reg(hkey, "Line2", REG_SZ, "Value2", 7, 0);
779     verify_reg(hkey, "Line3", REG_SZ, "Value3", 7, 0);
780     verify_reg(hkey, "Line4", REG_SZ, "Value4", 7, 0);
781 
782     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
783                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
784                      "\"Wine1\"=dword:00000782\n\n"
785                      "\"Wine2\"=\"Test Value\"\n"
786                      "\"Wine3\"=hex(7):4c,00,69,00,6e,00,65,00,20,00,\\\n"
787                      "  63,00,6f,00,6e,00,63,00,61,00,74,00,\\\n"
788                      "  65,00,6e,00,61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n"
789                      "#comment\n"
790                      "@=\"Test\"\n"
791                      ";comment\n\n"
792                      "\"Wine4\"=dword:12345678\n\n");
793     dword = 0x782;
794     verify_reg(hkey, "Wine1", REG_DWORD, &dword, sizeof(dword), 0);
795     verify_reg(hkey, "Wine2", REG_SZ, "Test Value", 11, 0);
796     verify_reg(hkey, "Wine3", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
797     verify_reg(hkey, "", REG_SZ, "Test", 5, 0);
798     dword = 0x12345678;
799     verify_reg(hkey, "Wine4", REG_DWORD, &dword, sizeof(dword), 0);
800 
801     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
802                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
803                      "\"Wine5\"=\"No newline\"");
804     verify_reg(hkey, "Wine5", REG_SZ, "No newline", 11, 0);
805 
806     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
807                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
808                      "\"Wine6\"=dword:00000050\n\n"
809                      "\"Wine7\"=\"No newline\"");
810     dword = 0x50;
811     verify_reg(hkey, "Wine6", REG_DWORD, &dword, sizeof(dword), 0);
812     verify_reg(hkey, "Wine7", REG_SZ, "No newline", 11, 0);
813 
814     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
815                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
816                      "\"Wine8a\"=dword:1\n"
817                      "\"Wine8b\"=dword:4444\n\n");
818     dword = 0x1;
819     verify_reg(hkey, "Wine8a", REG_DWORD, &dword, sizeof(dword), 0);
820     dword = 0x4444;
821     verify_reg(hkey, "Wine8b", REG_DWORD, &dword, sizeof(dword), 0);
822 
823     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
824                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
825                      "\"Wine9a\"=hex(2):4c,00,69,00,6e,00,65,00,00,00\n"
826                      "\"Wine9b\"=\"Value 1\"\n"
827                      "\"Wine9c\"=hex(2):4c,00,69,00,6e,00,65,00\\\n"
828                      "\"Wine9d\"=\"Value 2\"\n"
829                      "\"Wine9e\"=hex(2):4c,00,69,00,6e,00,65,00,\\\n"
830                      "\"Wine9f\"=\"Value 3\"\n"
831                      "\"Wine9g\"=\"Value 4\"\n\n");
832     verify_reg(hkey, "Wine9a", REG_EXPAND_SZ, "Line", 5, 0);
833     verify_reg(hkey, "Wine9b", REG_SZ, "Value 1", 8, 0);
834     verify_reg_nonexist(hkey, "Wine9c");
835     verify_reg(hkey, "Wine9d", REG_SZ, "Value 2", 8, 0);
836     verify_reg_nonexist(hkey, "Wine9e");
837     verify_reg_nonexist(hkey, "Wine9f");
838     verify_reg(hkey, "Wine9g", REG_SZ, "Value 4", 8, 0);
839 
840     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
841                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
842                      "\"double\\\"quote\"=\"valid \\\"or\\\" not\"\n"
843                      "\"single'quote\"=dword:00000008\n\n");
844     verify_reg(hkey, "double\"quote", REG_SZ, "valid \"or\" not", 15, 0);
845     dword = 0x00000008;
846     verify_reg(hkey, "single'quote", REG_DWORD, &dword, sizeof(dword), 0);
847 
848     /* Test hex data concatenation for REG_NONE, REG_EXPAND_SZ and REG_BINARY */
849     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
850                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
851                      "\"Wine10a\"=hex(0):56,00,61,00,6c,00,75,00,65,00,00,00\n"
852                      "\"Wine10b\"=hex(0):56,00,61,00,6c,00,\\\n"
853                      "  75,00,65,00,00,00\n"
854                      "\"Wine10c\"=hex(0):56,00,61,00,\\;comment\n"
855                      "  6c,00,75,00,\\\n"
856                      "  65,00,00,00\n"
857                      "\"Wine10d\"=hex(0):56,00,61,00,\\;comment\n"
858                      "  6c,00,75,00,\n"
859                      "  65,00,00,00\n"
860                      "\"Wine10e\"=hex(0):56,00,61,00,\\;comment\n"
861                      "  6c,00,75,00,;comment\n"
862                      "  65,00,00,00\n");
863     verify_reg(hkey, "Wine10a", REG_NONE, "V\0a\0l\0u\0e\0\0", 12, 0);
864     verify_reg(hkey, "Wine10b", REG_NONE, "V\0a\0l\0u\0e\0\0", 12, 0);
865     verify_reg(hkey, "Wine10c", REG_NONE, "V\0a\0l\0u\0e\0\0", 12, 0);
866     verify_reg(hkey, "Wine10d", REG_NONE, "V\0a\0l\0u", 8, 0);
867     verify_reg(hkey, "Wine10e", REG_NONE, "V\0a\0l\0u", 8, 0);
868 
869     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
870                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
871                      "\"Wine11a\"=hex(2):25,00,50,00,41,00,54,00,48,00,25,00,00,00\n"
872                      "\"Wine11b\"=hex(2):25,00,50,00,41,00,\\\n"
873                      "  54,00,48,00,25,00,00,00\n"
874                      "\"Wine11c\"=hex(2):25,00,50,00,41,00,\\;comment\n"
875                      "  54,00,48,00,\\\n"
876                      "  25,00,00,00\n"
877                      "\"Wine11d\"=hex(2):25,00,50,00,41,00,\\;comment\n"
878                      "  54,00,48,00,\n"
879                      "  25,00,00,00\n"
880                      "\"Wine11e\"=hex(2):25,00,50,00,41,00,\\;comment\n"
881                      "  54,00,48,00,;comment\n"
882                      "  25,00,00,00\n");
883     verify_reg(hkey, "Wine11a", REG_EXPAND_SZ, "%PATH%", 7, 0);
884     verify_reg(hkey, "Wine11b", REG_EXPAND_SZ, "%PATH%", 7, 0);
885     verify_reg(hkey, "Wine11c", REG_EXPAND_SZ, "%PATH%", 7, 0);
886     /* Wine11d */
887     size = sizeof(buffer);
888     lr = RegQueryValueExA(hkey, "Wine11d", NULL, &type, (BYTE *)&buffer, &size);
889     ok(lr == ERROR_SUCCESS, "RegQueryValueExA failed: %d\n", lr);
890     ok(type == REG_EXPAND_SZ, "got wrong type %u, expected %u\n", type, REG_EXPAND_SZ);
891     ok(size == 6 || broken(size == 5) /* Win2k */, "got wrong size %u, expected 6\n", size);
892     ok(memcmp(buffer, "%PATH", size) == 0, "got wrong data\n");
893     /* Wine11e */
894     size = sizeof(buffer);
895     memset(buffer, '-', size);
896     lr = RegQueryValueExA(hkey, "Wine11e", NULL, &type, (BYTE *)&buffer, &size);
897     ok(lr == ERROR_SUCCESS, "RegQueryValueExA failed: %d\n", lr);
898     ok(type == REG_EXPAND_SZ, "got wrong type %u, expected %u\n", type, REG_EXPAND_SZ);
899     ok(size == 6 || broken(size == 5) /* Win2k */, "got wrong size %u, expected 6\n", size);
900     ok(memcmp(buffer, "%PATH", size) == 0, "got wrong data\n");
901 
902     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
903                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
904                      "\"Wine12a\"=hex:11,22,33,44,55,66,77,88\n"
905                      "\"Wine12b\"=hex:11,22,33,44,\\\n"
906                      "  55,66,77,88\n"
907                      "\"Wine12c\"=hex:11,22,33,44,\\;comment\n"
908                      "  55,66,\\\n"
909                      "  77,88\n"
910                      "\"Wine12d\"=hex:11,22,33,44,\\;comment\n"
911                      "  55,66,\n"
912                      "  77,88\n"
913                      "\"Wine12e\"=hex:11,22,33,44,\\;comment\n"
914                      "  55,66,;comment\n"
915                      "  77,88\n");
916     hex[0] = 0x11; hex[1] = 0x22; hex[2] = 0x33; hex[3] = 0x44;
917     hex[4] = 0x55; hex[5] = 0x66; hex[6] = 0x77; hex[7] = 0x88;
918     verify_reg(hkey, "Wine12a", REG_BINARY, hex, sizeof(hex), 0);
919     verify_reg(hkey, "Wine12b", REG_BINARY, hex, sizeof(hex), 0);
920     verify_reg(hkey, "Wine12c", REG_BINARY, hex, sizeof(hex), 0);
921     verify_reg(hkey, "Wine12d", REG_BINARY, hex, 6, 0);
922     verify_reg(hkey, "Wine12e", REG_BINARY, hex, 6, 0);
923 
924     /* Test import with subkeys */
925     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
926                      "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey\"1]\n"
927                      "\"Wine\\\\31\"=\"Test value\"\n\n");
928     open_key(hkey, "Subkey\"1", 0, &subkey);
929     verify_reg(subkey, "Wine\\31", REG_SZ, "Test value", 11, 0);
930     close_key(subkey);
931     delete_key(hkey, "Subkey\"1");
932 
933     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
934                      "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey/2]\n"
935                      "\"123/\\\"4;'5\"=\"Random value name\"\n\n");
936     open_key(hkey, "Subkey/2", 0, &subkey);
937     verify_reg(subkey, "123/\"4;'5", REG_SZ, "Random value name", 18, 0);
938     close_key(subkey);
939     delete_key(hkey, "Subkey/2");
940 
941     /* Test the accepted range of the hex-based data types */
942     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
943                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
944                      "\"Wine13a\"=hex(0):56,61,6c,75,65,00\n"
945                      "\"Wine13b\"=hex(10):56,61,6c,75,65,00\n"
946                      "\"Wine13c\"=hex(100):56,61,6c,75,65,00\n"
947                      "\"Wine13d\"=hex(1000):56,61,6c,75,65,00\n"
948                      "\"Wine13e\"=hex(7fff):56,61,6c,75,65,00\n"
949                      "\"Wine13f\"=hex(ffff):56,61,6c,75,65,00\n"
950                      "\"Wine13g\"=hex(7fffffff):56,61,6c,75,65,00\n"
951                      "\"Wine13h\"=hex(ffffffff):56,61,6c,75,65,00\n"
952                      "\"Wine13i\"=hex(100000000):56,61,6c,75,65,00\n"
953                      "\"Wine13j\"=hex(0x2):56,61,6c,75,65,00\n"
954                      "\"Wine13k\"=hex(0X2):56,61,6c,75,65,00\n"
955                      "\"Wine13l\"=hex(x2):56,61,6c,75,65,00\n\n");
956     verify_reg(hkey, "Wine13a", REG_NONE, "Value", 6, 0);
957     verify_reg(hkey, "Wine13b", 0x10, "Value", 6, 0);
958     verify_reg(hkey, "Wine13c", 0x100, "Value", 6, 0);
959     verify_reg(hkey, "Wine13d", 0x1000, "Value", 6, 0);
960     verify_reg(hkey, "Wine13e", 0x7fff, "Value", 6, 0);
961     verify_reg(hkey, "Wine13f", 0xffff, "Value", 6, 0);
962     verify_reg(hkey, "Wine13g", 0x7fffffff, "Value", 6, 0);
963     verify_reg(hkey, "Wine13h", 0xffffffff, "Value", 6, 0);
964     verify_reg_nonexist(hkey, "Wine13i");
965     verify_reg_nonexist(hkey, "Wine13j");
966     verify_reg_nonexist(hkey, "Wine13k");
967     verify_reg_nonexist(hkey, "Wine13l");
968 
969     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
970                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
971                      "\"Wine14a\"=hex(7):4c,00,69,00,6e,00,65,00,20,00,  \\\n"
972                      "  63,00,6f,00,6e,00,63,00,61,00,74,00,\\\n"
973                      "  65,00,6e,00,61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n"
974                      "\"Wine14b\"=hex(7):4c,00,69,00,6e,00,65,00,20,00,\t\\\n"
975                      "  63,00,6f,00,6e,00,63,00,61,00,74,00,\\\n"
976                      "  65,00,6e,00,61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n\n");
977     verify_reg(hkey, "Wine14a", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
978     verify_reg(hkey, "Wine14b", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
979 
980     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
981                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
982                      "\"Wine15\"=hex(2):25,00,50,00,41,00,54,00,48,00,25,00,00,00,\n\n");
983     verify_reg(hkey, "Wine15", REG_EXPAND_SZ, "%PATH%", 7, 0);
984 
985     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
986                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
987                      "\"Wine16\"=hex(2):\\\n"
988                      "  25,00,48,00,4f,00,4d,00,45,00,25,00,00,00\n\n");
989     verify_reg(hkey, "Wine16", REG_EXPAND_SZ, "%HOME%", 7, 0);
990 
991     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
992                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
993                      "\"Wine17a\"=hex(0):56,61,6c,75,65,\\");
994     verify_reg(hkey, "Wine17a", REG_NONE, "Value", 5, 0);
995 
996     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
997                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
998                      "\"Wine17b\"=hex(2):25,00,50,00,41,00,54,00,48,00,25,00,\\");
999     verify_reg(hkey, "Wine17b", REG_EXPAND_SZ, "%PATH%", 7, 0);
1000 
1001     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1002                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1003                      "\"Wine17c\"=hex:11,22,33,44,55,\\");
1004     verify_reg(hkey, "Wine17c", REG_BINARY, hex, 5, 0);
1005 
1006     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1007                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1008                      "\"Wine17d\"=hex(7):4c,00,69,00,6e,00,65,00,\\");
1009     verify_reg(hkey, "Wine17d", REG_MULTI_SZ, "Line", 5, 0);
1010 
1011     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1012                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1013                      "\"Wine17e\"=hex(100):56,61,6c,75,65,\\");
1014     verify_reg(hkey, "Wine17e", 0x100, "Value", 5, 0);
1015 
1016     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1017                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1018                      "\"Wine18a\"=hex(7):4c,00,69,00,6e,00,65,00,00,00,00,00\n"
1019                      "\"Wine18b\"=hex(7):4c,00,69,00,6e,00,65,00,20,00,\\\n"
1020                      "  63,00,6f,00,6e,00,63,00,61,00,74,00,\\\n"
1021                      "  65,00,6e,00,61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n"
1022                      "\"Wine18c\"=hex(7):4c,00,69,00,6e,00,65,00,20,00,\\;comment\n"
1023                      "  63,00,6f,00,6e,00,63,00,61,00,74,00,\\\n"
1024                      "  65,00,6e,00,61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n"
1025                      "\"Wine18d\"=hex(7):4c,00,69,00,6e,00,65,00,20,00,\\;comment\n"
1026                      "  63,00,6f,00,6e,00,63,00,61,00,74,00,\n"
1027                      "  65,00,6e,00,61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n"
1028                      "\"Wine18e\"=hex(7):4c,00,69,00,6e,00,65,00,20,00,\\\n"
1029                      "  63,00,6f,00,6e,00,63,00,61,00,74,00,;comment\n"
1030                      "  65,00,6e,00,61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n\n");
1031     verify_reg(hkey, "Wine18a", REG_MULTI_SZ, "Line\0", 6, 0);
1032     verify_reg(hkey, "Wine18b", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
1033     verify_reg(hkey, "Wine18c", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
1034     /* Wine18d */
1035     size = sizeof(buffer);
1036     memset(buffer, '-', size);
1037     lr = RegQueryValueExA(hkey, "Wine18d", NULL, &type, (BYTE *)&buffer, &size);
1038     ok(lr == ERROR_SUCCESS, "RegQueryValueExA failed: %d\n", lr);
1039     ok(type == REG_MULTI_SZ, "got wrong type %u, expected %u\n", type, REG_MULTI_SZ);
1040     ok(size == 12 || broken(size == 11) /* Win2k */, "got wrong size %u, expected 12\n", size);
1041     ok(memcmp(buffer, "Line concat", size) == 0, "got wrong data\n");
1042     /* Wine18e */
1043     size = sizeof(buffer);
1044     memset(buffer, '-', size);
1045     lr = RegQueryValueExA(hkey, "Wine18e", NULL, &type, (BYTE *)&buffer, &size);
1046     ok(lr == ERROR_SUCCESS, "RegQueryValueExA failed: %d\n", lr);
1047     ok(type == REG_MULTI_SZ, "got wrong type %u, expected %u\n", type, REG_MULTI_SZ);
1048     ok(size == 12 || broken(size == 11) /* Win2k */, "got wrong size %u, expected 12\n", size);
1049     ok(memcmp(buffer, "Line concat", size) == 0, "got wrong data\n");
1050 
1051     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1052                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1053                      "\"Wine19a\"=hex(100):25,50,41,54,48,25,00\n"
1054                      "\"Wine19b\"=hex(100):25,50,41,\\\n"
1055                      "  54,48,25,00\n"
1056                      "\"Wine19c\"=hex(100):25,50,41,\\;comment\n"
1057                      "  54,48,\\\n"
1058                      "  25,00\n"
1059                      "\"Wine19d\"=hex(100):25,50,41,\\;comment\n"
1060                      "  54,48,\n"
1061                      "  25,00\n"
1062                      "\"Wine19e\"=hex(100):25,50,41,\\;comment\n"
1063                      "  54,48,;comment\n"
1064                      "  25,00\n");
1065     verify_reg(hkey, "Wine19a", 0x100, "%PATH%", 7, 0);
1066     verify_reg(hkey, "Wine19b", 0x100, "%PATH%", 7, 0);
1067     verify_reg(hkey, "Wine19c", 0x100, "%PATH%", 7, 0);
1068     verify_reg(hkey, "Wine19d", 0x100, "%PATH", 5, 0);
1069     verify_reg(hkey, "Wine19e", 0x100, "%PATH", 5, 0);
1070 
1071     /* Test null-termination of REG_EXPAND_SZ and REG_MULTI_SZ data*/
1072     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1073                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1074                      "\"Wine20a\"=hex(7):4c,00,69,00,6e,00,65,00\n"
1075                      "\"Wine20b\"=hex(7):4c,00,69,00,6e,00,65,00,\n"
1076                      "\"Wine20c\"=hex(7):4c,00,69,00,6e,00,65,00,00,00\n"
1077                      "\"Wine20d\"=hex(7):4c,00,69,00,6e,00,65,00,00,00,\n"
1078                      "\"Wine20e\"=hex(7):4c,00,69,00,6e,00,65,00,00,00,00,00\n"
1079                      "\"Wine20f\"=hex(7):4c,00,69,00,6e,00,65,00,00,00,00,00,\n\n");
1080     verify_reg(hkey, "Wine20a", REG_MULTI_SZ, "Line", 5, 0);
1081     verify_reg(hkey, "Wine20b", REG_MULTI_SZ, "Line", 5, 0);
1082     verify_reg(hkey, "Wine20c", REG_MULTI_SZ, "Line", 5, 0);
1083     verify_reg(hkey, "Wine20d", REG_MULTI_SZ, "Line", 5, 0);
1084     verify_reg(hkey, "Wine20e", REG_MULTI_SZ, "Line\0", 6, 0);
1085     verify_reg(hkey, "Wine20f", REG_MULTI_SZ, "Line\0", 6, 0);
1086 
1087     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1088                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1089                      "\"Wine21a\"=hex(2):25,00,50,00,41,00,54,00,48,00,25,00\n"
1090                      "\"Wine21b\"=hex(2):25,00,50,00,41,00,54,00,48,00,25,00,\n"
1091                      "\"Wine21c\"=hex(2):25,00,50,00,41,00,54,00,48,00,25,00,00,00\n"
1092                      "\"Wine21d\"=hex(2):25,00,50,00,41,00,54,00,48,00,25,00,00,00,\n\n");
1093     verify_reg(hkey, "Wine21a", REG_EXPAND_SZ, "%PATH%", 7, 0);
1094     verify_reg(hkey, "Wine21b", REG_EXPAND_SZ, "%PATH%", 7, 0);
1095     verify_reg(hkey, "Wine21c", REG_EXPAND_SZ, "%PATH%", 7, 0);
1096     verify_reg(hkey, "Wine21d", REG_EXPAND_SZ, "%PATH%", 7, 0);
1097 
1098     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1099                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1100                      "\"Wine22a\"=hex(1):\n"
1101                      "\"Wine22b\"=hex(2):\n"
1102                      "\"Wine22c\"=hex(3):\n"
1103                      "\"Wine22d\"=hex(4):\n"
1104                      "\"Wine22e\"=hex(7):\n"
1105                      "\"Wine22f\"=hex(100):\n"
1106                      "\"Wine22g\"=hex(abcd):\n"
1107                      "\"Wine22h\"=hex:\n"
1108                      "\"Wine22i\"=hex(0):\n\n");
1109     verify_reg(hkey, "Wine22a", REG_SZ, NULL, 0, 0);
1110     verify_reg(hkey, "Wine22b", REG_EXPAND_SZ, NULL, 0, 0);
1111     verify_reg(hkey, "Wine22c", REG_BINARY, NULL, 0, 0);
1112     verify_reg(hkey, "Wine22d", REG_DWORD, NULL, 0, 0);
1113     verify_reg(hkey, "Wine22e", REG_MULTI_SZ, NULL, 0, 0);
1114     verify_reg(hkey, "Wine22f", 0x100, NULL, 0, 0);
1115     verify_reg(hkey, "Wine22g", 0xabcd, NULL, 0, 0);
1116     verify_reg(hkey, "Wine22h", REG_BINARY, NULL, 0, 0);
1117     verify_reg(hkey, "Wine22i", REG_NONE, NULL, 0, 0);
1118 
1119     /* Test with escaped null characters */
1120     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1121                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1122                      "\"Wine23a\"=\"\\\\0\"\n"
1123                      "\"Wine23b\"=\"\\\\0\\\\0\"\n"
1124                      "\"Wine23c\"=\"Value1\\\\0\"\n"
1125                      "\"Wine23d\"=\"Value2\\\\0\\\\0\\\\0\\\\0\"\n"
1126                      "\"Wine23e\"=\"Value3\\\\0Value4\"\n"
1127                      "\"Wine23f\"=\"\\\\0Value5\"\n\n");
1128     verify_reg(hkey, "Wine23a", REG_SZ, "\\0", 3, 0);
1129     verify_reg(hkey, "Wine23b", REG_SZ, "\\0\\0", 5, 0);
1130     verify_reg(hkey, "Wine23c", REG_SZ, "Value1\\0", 9, 0);
1131     verify_reg(hkey, "Wine23d", REG_SZ, "Value2\\0\\0\\0\\0", 15, 0);
1132     verify_reg(hkey, "Wine23e", REG_SZ, "Value3\\0Value4", 15, 0);
1133     verify_reg(hkey, "Wine23f", REG_SZ, "\\0Value5", 9, 0);
1134 
1135     /* Test forward and back slashes */
1136     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1137                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1138                     "\"count/up\"=\"one/two/three\"\n"
1139                     "\"\\\\foo\\\\bar\"=\"\"\n\n"
1140                     "[HKEY_CURRENT_USER\\" KEY_BASE "\\https://winehq.org]\n\n");
1141     verify_reg(hkey, "count/up", REG_SZ, "one/two/three", 14, 0);
1142     verify_reg(hkey, "\\foo\\bar", REG_SZ, "", 1, 0);
1143     verify_key(hkey, "https://winehq.org");
1144 
1145     close_key(hkey);
1146 
1147     delete_tree(HKEY_CURRENT_USER, KEY_BASE);
1148 }
1149 
test_basic_import_31(void)1150 static void test_basic_import_31(void)
1151 {
1152     HKEY hkey;
1153     DWORD dispos;
1154 
1155     RegCreateKeyExA(HKEY_CLASSES_ROOT, KEY_BASE, 0, NULL, REG_OPTION_NON_VOLATILE,
1156                     KEY_READ|KEY_SET_VALUE, NULL, &hkey, &dispos);
1157 
1158     if (dispos == REG_OPENED_EXISTING_KEY)
1159         delete_value(hkey, NULL);
1160 
1161     /* Test simple value */
1162     exec_import_str("REGEDIT\r\n"
1163 		    "HKEY_CLASSES_ROOT\\" KEY_BASE " = Value0\r\n");
1164     verify_reg(hkey, "", REG_SZ, "Value0", 7, 0);
1165 
1166     /* Test proper handling of spaces and equals signs */
1167     exec_import_str("REGEDIT\r\n"
1168                     "HKEY_CLASSES_ROOT\\" KEY_BASE " =Value1\r\n");
1169     verify_reg(hkey, "", REG_SZ, "Value1", 7, 0);
1170 
1171     exec_import_str("REGEDIT\r\n"
1172                     "HKEY_CLASSES_ROOT\\" KEY_BASE " =  Value2\r\n");
1173     verify_reg(hkey, "", REG_SZ, " Value2", 8, 0);
1174 
1175     exec_import_str("REGEDIT\r\n"
1176                     "HKEY_CLASSES_ROOT\\" KEY_BASE " = Value3 \r\n");
1177     verify_reg(hkey, "", REG_SZ, "Value3 ", 8, 0);
1178 
1179     exec_import_str("REGEDIT\r\n"
1180                     "HKEY_CLASSES_ROOT\\" KEY_BASE " Value4\r\n");
1181     verify_reg(hkey, "", REG_SZ, "Value4", 7, 0);
1182 
1183     exec_import_str("REGEDIT\r\n"
1184                     "HKEY_CLASSES_ROOT\\" KEY_BASE "  Value5\r\n");
1185     verify_reg(hkey, "", REG_SZ, "Value5", 7, 0);
1186 
1187     exec_import_str("REGEDIT\r\n"
1188                     "HKEY_CLASSES_ROOT\\" KEY_BASE "\r\n");
1189     verify_reg(hkey, "", REG_SZ, "", 1, 0);
1190 
1191     exec_import_str("REGEDIT\r\n"
1192                     "HKEY_CLASSES_ROOT\\" KEY_BASE "  \r\n");
1193     verify_reg(hkey, "", REG_SZ, "", 1, 0);
1194 
1195     exec_import_str("REGEDIT\r\n"
1196                     "HKEY_CLASSES_ROOT\\" KEY_BASE " = No newline");
1197     verify_reg(hkey, "", REG_SZ, "No newline", 11, 0);
1198 
1199     close_key(hkey);
1200 
1201     delete_key(HKEY_CLASSES_ROOT, KEY_BASE);
1202 }
1203 
test_invalid_import(void)1204 static void test_invalid_import(void)
1205 {
1206     HKEY hkey;
1207     DWORD dword = 0x8;
1208 
1209     delete_tree(HKEY_CURRENT_USER, KEY_BASE);
1210     verify_key_nonexist(HKEY_CURRENT_USER, KEY_BASE);
1211 
1212     exec_import_str("REGEDIT4\n\n"
1213                 "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1214                 "\"TestNoEndQuote\"=\"Asdffdsa\n");
1215     open_key(HKEY_CURRENT_USER, KEY_BASE, KEY_SET_VALUE, &hkey);
1216     verify_reg_nonexist(hkey, "TestNoEndQuote");
1217 
1218     exec_import_str("REGEDIT4\n\n"
1219                 "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1220                 "\"TestNoBeginQuote\"=Asdffdsa\"\n");
1221     verify_reg_nonexist(hkey, "TestNoBeginQuote");
1222 
1223     exec_import_str("REGEDIT4\n\n"
1224                 "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1225                 "\"TestNoQuotes\"=Asdffdsa\n");
1226     verify_reg_nonexist(hkey, "TestNoQuotes");
1227 
1228     exec_import_str("REGEDIT4\n\n"
1229                 "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1230                 "\"NameNoEndQuote=\"Asdffdsa\"\n");
1231     verify_reg_nonexist(hkey, "NameNoEndQuote");
1232 
1233     exec_import_str("REGEDIT4\n\n"
1234                 "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1235                 "NameNoBeginQuote\"=\"Asdffdsa\"\n");
1236     verify_reg_nonexist(hkey, "NameNoBeginQuote");
1237 
1238     exec_import_str("REGEDIT4\n\n"
1239                 "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1240                 "NameNoQuotes=\"Asdffdsa\"\n");
1241     verify_reg_nonexist(hkey, "NameNoQuotes");
1242 
1243     exec_import_str("REGEDIT4\n\n"
1244                 "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1245                 "\"MixedQuotes=Asdffdsa\"\n");
1246     verify_reg_nonexist(hkey, "MixedQuotes");
1247     verify_reg_nonexist(hkey, "MixedQuotes=Asdffdsa");
1248 
1249     /* Test import with non-standard registry file headers */
1250     exec_import_str("REGEDIT3\n\n"
1251                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1252                     "\"Test1\"=\"Value\"\n");
1253     verify_reg_nonexist(hkey, "Test1");
1254 
1255     exec_import_str("regedit4\n\n"
1256                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1257                     "\"Test2\"=\"Value\"\n");
1258     verify_reg_nonexist(hkey, "Test2");
1259 
1260     exec_import_str("Regedit4\n\n"
1261                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1262                     "\"Test3\"=\"Value\"\n");
1263     verify_reg_nonexist(hkey, "Test3");
1264 
1265     exec_import_str("REGEDIT 4\n\n"
1266                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1267                     "\"Test4\"=\"Value\"\n");
1268     verify_reg_nonexist(hkey, "Test4");
1269 
1270     exec_import_str("REGEDIT4FOO\n\n"
1271                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1272                     "\"Test5\"=\"Value\"\n");
1273     verify_reg_nonexist(hkey, "Test5");
1274 
1275     exec_import_str("REGEDIT4 FOO\n\n"
1276                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1277                     "\"Test6\"=\"Value\"\n");
1278     verify_reg_nonexist(hkey, "Test6");
1279 
1280     exec_import_str("REGEDIT5\n\n"
1281                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1282                     "\"Test7\"=\"Value\"\n");
1283     verify_reg_nonexist(hkey, "Test7");
1284 
1285     exec_import_str("Windows Registry Editor Version 4.00\n\n"
1286                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1287                     "\"Test8\"=\"Value\"\n");
1288     verify_reg_nonexist(hkey, "Test8");
1289 
1290     exec_import_str("Windows Registry Editor Version 5\n\n"
1291                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1292                     "\"Test9\"=\"Value\"\n");
1293     verify_reg_nonexist(hkey, "Test9");
1294 
1295     exec_import_str("WINDOWS REGISTRY EDITOR VERSION 5.00\n\n"
1296                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1297                     "\"Test10\"=\"Value\"\n");
1298     verify_reg_nonexist(hkey, "Test10");
1299 
1300     exec_import_str("Windows Registry Editor version 5.00\n\n"
1301                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1302                     "\"Test11\"=\"Value\"\n");
1303     verify_reg_nonexist(hkey, "Test11");
1304 
1305     /* Test multi-line import with incorrect comma placement */
1306     exec_import_str("REGEDIT4\n\n"
1307                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1308                     "\"Multi-Line1\"=hex(7):4c,69,6e,65,20\\\n"
1309                     ",63,6f,6e,63,61,74,65,6e,61,74,69,6f,6e,00,00\n\n");
1310     verify_reg_nonexist(hkey, "Multi-Line1");
1311 
1312     exec_import_str("REGEDIT4\n\n"
1313                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1314                     "\"Multi-Line2\"=hex(7):4c,69,6e,65,20\\\n"
1315                     "  ,63,6f,6e,63,61,74,65,6e,61,74,69,6f,6e,00,00\n\n");
1316     verify_reg_nonexist(hkey, "Multi-Line2");
1317 
1318     exec_import_str("Windows Registry Editor Version 5.00\n\n"
1319                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1320                     "\"Multi-Line3\"=hex(7):4c,69,6e,65,20\\\n"
1321                     ",63,6f,6e,63,61,74,65,6e,61,74,69,6f,6e,00,00\n\n");
1322     verify_reg_nonexist(hkey, "Multi-Line3");
1323 
1324     exec_import_str("Windows Registry Editor Version 5.00\n\n"
1325                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1326                     "\"Multi-Line4\"=hex(7):4c,69,6e,65,20\\\n"
1327                     "  ,63,6f,6e,63,61,74,65,6e,61,74,69,6f,6e,00,00\n\n");
1328     verify_reg_nonexist(hkey, "Multi-Line4");
1329 
1330     exec_import_str("REGEDIT4\n\n"
1331                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1332                     "\"Test12a\"=dword:\n"
1333                     "\"Test12b\"=dword:hello\n"
1334                     "\"Test12c\"=dword:123456789\n"
1335                     "\"Test12d\"=dword:012345678\n"
1336                     "\"Test12e\"=dword:000000001\n\n");
1337     verify_reg_nonexist(hkey, "Test12a");
1338     verify_reg_nonexist(hkey, "Test12b");
1339     verify_reg_nonexist(hkey, "Test12c");
1340     verify_reg_nonexist(hkey, "Test12d");
1341     verify_reg_nonexist(hkey, "Test12e");
1342 
1343     exec_import_str("REGEDIT4\n\n"
1344                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1345                     "\"Test13a\"=dword:12345678abc\n"
1346                     "\"Test13b\"=dword:12345678 abc\n\n");
1347     verify_reg_nonexist(hkey, "Test13a");
1348     verify_reg_nonexist(hkey, "Test13b");
1349 
1350     exec_import_str("REGEDIT4\n\n"
1351                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1352                     "\"Test14a\"=dword:0x123\n"
1353                     "\"Test14b\"=dword:123 456\n"
1354                     "\"Test14c\"=dword:1234 5678\n\n");
1355     verify_reg_nonexist(hkey, "Test14a");
1356     verify_reg_nonexist(hkey, "Test14b");
1357     verify_reg_nonexist(hkey, "Test14c");
1358 
1359     exec_import_str("REGEDIT4\n\n"
1360                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1361                     "\"Test15a\"=\"foo\"bar\"\n"
1362                     "\"Test15b\"=\"foo\"\"bar\"\n\n");
1363     verify_reg_nonexist(hkey, "Test15a");
1364     verify_reg_nonexist(hkey, "Test15b");
1365 
1366     exec_import_str("REGEDIT4\n\n"
1367                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1368                     "\"Test16a\"=\n"
1369                     "\"Test16b\"=\\\"\n"
1370                     "\"Test16c\"=\\\"Value\\\"\n"
1371                     "\"Test16d\"=\\\"Value\"\n\n");
1372     verify_reg_nonexist(hkey, "Test16a");
1373     verify_reg_nonexist(hkey, "Test16b");
1374     verify_reg_nonexist(hkey, "Test16c");
1375     verify_reg_nonexist(hkey, "Test16d");
1376 
1377     /* Test key name and value name concatenation */
1378     exec_import_str("REGEDIT4\n\n"
1379                     "[HKEY_CURRENT_USER\\" KEY_BASE "\\\n"
1380                     "Subkey1]\n");
1381     verify_key_nonexist(hkey, "Subkey1");
1382 
1383     exec_import_str("REGEDIT4\n\n"
1384                     "[HKEY_CURRENT_USER\\" KEY_BASE "\n"
1385                     "\\Subkey2]\n");
1386     verify_key_nonexist(hkey, "Subkey2");
1387 
1388     exec_import_str("REGEDIT4\n\n"
1389                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1390                     "\"Test\\\n"
1391                     "17a\"=\"Value 1\"\n"
1392                     "\"Test17b\"=\"Value 2\"\n"
1393                     "\"Test\n"
1394                     "\\17c\"=\"Value 3\"\n\n");
1395     verify_reg_nonexist(hkey, "Test17a");
1396     verify_reg(hkey, "Test17b", REG_SZ, "Value 2", 8, 0);
1397     verify_reg_nonexist(hkey, "Test17c");
1398 
1399     exec_import_str("REGEDIT4\n\n"
1400                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1401                     "\"Test18a\"=dword:1234\\\n"
1402                     "5678\n"
1403                     "\"Test18b\"=\"Test \\\n"
1404                     "Value\"\n\n");
1405     verify_reg_nonexist(hkey, "Test18a");
1406     verify_reg_nonexist(hkey, "Test18b");
1407 
1408     /* Test hex data concatenation for REG_NONE, REG_EXPAND_SZ and REG_BINARY */
1409     exec_import_str("REGEDIT4\n\n"
1410                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1411                     "\"Test19a\"=hex(0):56,00,61,00,6c,00\\\n"
1412                     ",75,00,65,00,00,00\n"
1413                     "\"Test19b\"=hex(0):56,00,61,00,6c,00\\\n"
1414                     "  ,75,00,65,00,00,00\n"
1415                     "\"Test19c\"=hex(0):56,00,61,00,6c,00\\\n"
1416                     "  75,00,65,00,00,00\n"
1417                     "\"Test19d\"=hex(0):56,00,61,00,6c,00,7\\\n"
1418                     "5,00,65,00,00,00\n"
1419                     "\"Test19e\"=hex(0):56,00,61,00,6c,00,7\\\n"
1420                     "  5,00,65,00,00,00\n"
1421                     "\"Test19f\"=hex(0):56,00,61,00,\\;comment\n"
1422                     "  6c,00,75,00,\\#comment\n"
1423                     "  65,00,00,00\n\n");
1424     verify_reg_nonexist(hkey, "Test19a");
1425     verify_reg_nonexist(hkey, "Test19b");
1426     verify_reg_nonexist(hkey, "Test19c");
1427     verify_reg_nonexist(hkey, "Test19d");
1428     verify_reg_nonexist(hkey, "Test19e");
1429     verify_reg_nonexist(hkey, "Test19f");
1430 
1431     exec_import_str("REGEDIT4\n\n"
1432                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1433                     "\"Test20a\"=hex(2):25,50,41\\\n"
1434                     ",54,48,25,00\n"
1435                     "\"Test20b\"=hex(2):25,50,41\\\n"
1436                     "  ,54,48,25,00\n"
1437                     "\"Test20c\"=hex(2):25,50,41\\\n"
1438                     "  54,48,25,00\n"
1439                     "\"Test20d\"=hex(2):25,50,4\\\n"
1440                     "1,54,48,25,00\n"
1441                     "\"Test20e\"=hex(2):25,50,4\\\n"
1442                     "  1,54,48,25,00\n"
1443                     "\"Test20f\"=hex(2):25,50,41,\\;comment\n"
1444                     "  54,48,\\#comment\n"
1445                     "  25,00\n\n");
1446     verify_reg_nonexist(hkey, "Test20a");
1447     verify_reg_nonexist(hkey, "Test20b");
1448     verify_reg_nonexist(hkey, "Test20c");
1449     verify_reg_nonexist(hkey, "Test20d");
1450     verify_reg_nonexist(hkey, "Test20e");
1451     verify_reg_nonexist(hkey, "Test20f");
1452 
1453     exec_import_str("REGEDIT4\n\n"
1454                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1455                     "\"Test21a\"=hex:11,22,33,44\\\n"
1456                     ",55,66,77,88\n"
1457                     "\"Test21b\"=hex:11,22,33,44\\\n"
1458                     "  ,55,66,77,88\n"
1459                     "\"Test21c\"=hex:11,22,33,44\\\n"
1460                     "  55,66,77,88\n"
1461                     "\"Test21d\"=hex:11,22,33,4\\\n"
1462                     "4,55,66,77,88\n"
1463                     "\"Test21e\"=hex:11,22,33,4\\\n"
1464                     "  4,55,66,77,88\n"
1465                     "\"Test21f\"=hex:11,22,33,\\;comment\n"
1466                     "  44,55,66,\\#comment\n"
1467                     "  77,88\n\n");
1468     verify_reg_nonexist(hkey, "Test21a");
1469     verify_reg_nonexist(hkey, "Test21b");
1470     verify_reg_nonexist(hkey, "Test21c");
1471     verify_reg_nonexist(hkey, "Test21d");
1472     verify_reg_nonexist(hkey, "Test21e");
1473     verify_reg_nonexist(hkey, "Test21f");
1474 
1475     /* Test support for characters greater than 0xff */
1476     exec_import_str("REGEDIT4\n\n"
1477                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1478                     "\"Wine22a\"=hex(0):25,50,100,54,48,25,00\n"
1479                     "\"Wine22b\"=hex(0):25,1a4,100,164,124,25,00\n\n");
1480     verify_reg_nonexist(hkey, "Wine22a");
1481     verify_reg_nonexist(hkey, "Wine22b");
1482 
1483     /* Test the effect of backslashes in hex data */
1484     exec_import_str("REGEDIT4\n\n"
1485                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1486                     "\"Wine23a\"=hex(2):25,48\\,4f,4d,45,25,00\n"
1487                     "\"Wine23b\"=hex(2):25,48,\\4f,4d,45,25,00\n"
1488                     "\"Wine23c\"=hex(2):25,48\\ ,4f,4d,45,25,00\n"
1489                     "\"Wine23d\"=hex(2):25,48,\\ 4f,4d,45,25,00\n"
1490                     "\"Wine23e\"=hex(2):\\25,48,4f,4d,45,25,00\n"
1491                     "\"Wine23f\"=hex(2):\\ 25,48,4f,4d,45,25,00\n"
1492                     "\"Wine23g\"=hex(2):25,48,4\\f,4d,45,25,00\n"
1493                     "\"Wine23h\"=hex(2):25,48,4\\\n"
1494                     "  f,4d,45,25,00\n"
1495                     "\"Wine23i\"=hex(2):25,50,\\,41,54,48,25,00\n"
1496                     "\"Wine23j\"=hex(2):25,48,4f,4d,45,25,5c,\\\\\n"
1497                     "  25,50,41,54,48,25,00\n"
1498                     "\"Wine23k\"=hex(2):,\\\n"
1499                     "  25,48,4f,4d,45,25,00\n\n");
1500     verify_reg_nonexist(hkey, "Wine23a");
1501     verify_reg_nonexist(hkey, "Wine23b");
1502     verify_reg_nonexist(hkey, "Wine23c");
1503     verify_reg_nonexist(hkey, "Wine23d");
1504     verify_reg_nonexist(hkey, "Wine23e");
1505     verify_reg_nonexist(hkey, "Wine23f");
1506     verify_reg_nonexist(hkey, "Wine23g");
1507     verify_reg_nonexist(hkey, "Wine23h");
1508     verify_reg_nonexist(hkey, "Wine23i");
1509     verify_reg_nonexist(hkey, "Wine23j");
1510     verify_reg_nonexist(hkey, "Wine23k");
1511 
1512     exec_import_str("REGEDIT4\n\n"
1513                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1514                     "\"Wine24a\"=hex(2):4c,69,6e,65,20,\\\n"
1515                     "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey1]\n");
1516     verify_reg_nonexist(hkey, "Wine24a");
1517     verify_key_nonexist(hkey, "Subkey1");
1518 
1519     exec_import_str("REGEDIT4\n\n"
1520                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1521                     "\"Wine24b\"=hex(2):4c,69,6e,65,20\\\n"
1522                     "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey2]\n");
1523     verify_reg_nonexist(hkey, "Wine24b");
1524     verify_key(hkey, "Subkey2");
1525 
1526     delete_key(hkey, "Subkey2");
1527 
1528     exec_import_str("REGEDIT4\n\n"
1529                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1530                     "\"Wine25a\"=hex(2):4c,69,6e,65,20,\\\n"
1531                     "\"Wine25b\"=\"Test value\"\n"
1532 
1533                     "\"Wine25c\"=hex(2):4c,69,6e,65,20,\\\n"
1534                     ";comment\n"
1535                     "\"Wine25d\"=\"Test value\"\n"
1536 
1537                     "\"Wine25e\"=hex(2):4c,69,6e,65,20,\\\n"
1538                     "#comment\n"
1539                     "\"Wine25f\"=\"Test value\"\n"
1540 
1541                     "\"Wine25g\"=hex(2):4c,69,6e,65,20,\\\n\n"
1542                     "\"Wine25h\"=\"Test value\"\n"
1543 
1544                     "\"Wine25i\"=hex(2):4c,69,6e,65,20\\\n"
1545                     "\"Wine25j\"=\"Test value\"\n\n");
1546     verify_reg_nonexist(hkey, "Wine25a");
1547     verify_reg_nonexist(hkey, "Wine25b");
1548     verify_reg_nonexist(hkey, "Wine25c");
1549     verify_reg_nonexist(hkey, "Wine25d");
1550     verify_reg_nonexist(hkey, "Wine25e");
1551     verify_reg(hkey, "Wine25f", REG_SZ, "Test value", 11, 0);
1552     verify_reg_nonexist(hkey, "Wine25g");
1553     verify_reg_nonexist(hkey, "Wine25h");
1554     verify_reg_nonexist(hkey, "Wine25i");
1555     verify_reg(hkey, "Wine25j", REG_SZ, "Test value", 11, 0);
1556 
1557     exec_import_str("REGEDIT4\n\n"
1558                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1559                     "\"Wine26a\"=hex(2):4c,69,6e,65,20,\\\n"
1560                     "\"Wine26b\"=dword:00000008\n"
1561 
1562                     "\"Wine26c\"=hex(2):4c,69,6e,65,20,\\\n"
1563                     ";comment\n"
1564                     "\"Wine26d\"=dword:00000008\n"
1565 
1566                     "\"Wine26e\"=hex(2):4c,69,6e,65,20,\\\n"
1567                     "#comment\n"
1568                     "\"Wine26f\"=dword:00000008\n"
1569 
1570                     "\"Wine26g\"=hex(2):4c,69,6e,65,20,\\\n\n"
1571                     "\"Wine26h\"=dword:00000008\n"
1572 
1573                     "\"Wine26i\"=hex(2):4c,69,6e,65,20\\\n"
1574                     "\"Wine26j\"=dword:00000008\n\n");
1575     verify_reg_nonexist(hkey, "Wine26a");
1576     verify_reg_nonexist(hkey, "Wine26b");
1577     verify_reg_nonexist(hkey, "Wine26c");
1578     verify_reg_nonexist(hkey, "Wine26d");
1579     verify_reg_nonexist(hkey, "Wine26e");
1580     verify_reg(hkey, "Wine26f", REG_DWORD, &dword, sizeof(dword), 0);
1581     verify_reg_nonexist(hkey, "Wine26g");
1582     verify_reg_nonexist(hkey, "Wine26h");
1583     verify_reg_nonexist(hkey, "Wine26i");
1584     verify_reg(hkey, "Wine26j", REG_DWORD, &dword, sizeof(dword), 0);
1585 
1586     exec_import_str("REGEDIT4\n\n"
1587                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1588                     "\"Wine27a\"=hex(2):25,48,4f,4d,45,25,5c,\\\n"
1589                     "\"Wine27b\"=hex(2):25,50,41,54,48,25,00\n"
1590 
1591                     "\"Wine27c\"=hex(2):25,48,4f,4d,45,25,5c,\\\n"
1592                     ";comment\n"
1593                     "\"Wine27d\"=hex(2):25,50,41,54,48,25,00\n"
1594 
1595                     "\"Wine27e\"=hex(2):25,48,4f,4d,45,25,5c,\\\n"
1596                     "#comment\n"
1597                     "\"Wine27f\"=hex(2):25,50,41,54,48,25,00\n"
1598 
1599                     "\"Wine27g\"=hex(2):25,48,4f,4d,45,25,5c,\\\n\n"
1600                     "\"Wine27h\"=hex(2):25,50,41,54,48,25,00\n"
1601 
1602                     "\"Wine27i\"=hex(2):25,48,4f,4d,45,25,5c\\\n"
1603                     "\"Wine27j\"=hex(2):25,50,41,54,48,25,00\n\n");
1604     verify_reg_nonexist(hkey, "Wine27a");
1605     verify_reg_nonexist(hkey, "Wine27b");
1606     verify_reg_nonexist(hkey, "Wine27c");
1607     verify_reg_nonexist(hkey, "Wine27d");
1608     verify_reg_nonexist(hkey, "Wine27e");
1609     verify_reg(hkey, "Wine27f", REG_EXPAND_SZ, "%PATH%", 7, 0);
1610     verify_reg_nonexist(hkey, "Wine27g");
1611     verify_reg_nonexist(hkey, "Wine27h");
1612     verify_reg_nonexist(hkey, "Wine27i");
1613     verify_reg(hkey, "Wine27j", REG_EXPAND_SZ, "%PATH%", 7, 0);
1614 
1615     exec_import_str("REGEDIT4\n\n"
1616                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1617                     "\"Wine28a\"=hex(2):4c,69,6e,65,20,\\\n"
1618                     "@=\"Default value 1\"\n\n");
1619     verify_reg_nonexist(hkey, "Wine28a");
1620     verify_reg_nonexist(hkey, NULL);
1621 
1622     exec_import_str("REGEDIT4\n\n"
1623                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1624                     "\"Wine28b\"=hex(2):4c,69,6e,65,20,\\\n"
1625                     ";comment\n"
1626                     "@=\"Default value 2\"\n\n");
1627     verify_reg_nonexist(hkey, "Wine28b");
1628     verify_reg_nonexist(hkey, NULL);
1629 
1630     exec_import_str("REGEDIT4\n\n"
1631                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1632                     "\"Wine28c\"=hex(2):4c,69,6e,65,20,\\\n"
1633                     "#comment\n"
1634                     "@=\"Default value 3\"\n\n");
1635     verify_reg_nonexist(hkey, "Wine28c");
1636     verify_reg(hkey, NULL, REG_SZ, "Default value 3", 16, 0);
1637 
1638     delete_value(hkey, NULL);
1639 
1640     exec_import_str("REGEDIT4\n\n"
1641                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1642                     "\"Wine28d\"=hex(2):4c,69,6e,65,20,\\\n\n"
1643                     "@=\"Default value 4\"\n\n");
1644     verify_reg_nonexist(hkey, "Wine28d");
1645     verify_reg_nonexist(hkey, NULL);
1646 
1647     exec_import_str("REGEDIT4\n\n"
1648                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1649                     "\"Wine28e\"=hex(2):4c,69,6e,65,20\\\n"
1650                     "@=\"Default value 5\"\n\n");
1651     verify_reg_nonexist(hkey, "Wine28e");
1652     verify_reg(hkey, NULL, REG_SZ, "Default value 5", 16, 0);
1653 
1654     exec_import_str("REGEDIT4\n\n"
1655                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1656                     "\"Wine29a\"=hex:11,22,33,\\\n"
1657                     "\\\n"
1658                     "  44,55,66\n"
1659                     "\"Wine29b\"=hex:11,22,33,\\\n"
1660                     "  \\\n"
1661                     "  44,55,66\n\n");
1662     verify_reg_nonexist(hkey, "Wine29a");
1663     verify_reg_nonexist(hkey, "Wine29b");
1664 
1665     exec_import_str("REGEDIT4\n\n"
1666                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1667                     "\"Wine30a\"=hex(0):25,48,4f,4d,45,25,5c,/\n"
1668                     "  25,50,41,54,48,25,00\n"
1669                     "\"Wine30b\"=hex(0):25,48,4f,4d,45,25,5c/\n"
1670                     "  25,50,41,54,48,25,00\n\n");
1671     verify_reg_nonexist(hkey, "Wine30a");
1672     verify_reg_nonexist(hkey, "Wine30b");
1673 
1674     exec_import_str("REGEDIT4\n\n"
1675                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1676                     "\"Wine31\"=hex(7):4c,69,6e,65,20\\");
1677     verify_reg_nonexist(hkey, "Wine31");
1678 
1679     exec_import_str("REGEDIT4\n\n"
1680                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1681                     "\"Wine32a\"=hex(7):4c,69,6e,65,20,\\\n"
1682                     "  ,63,6f,6e,63,61,74,65,6e,61,74,69,6f,6e,00,00\n"
1683                     "\"Wine32b\"=hex(7):4c,69,6e,65,20,\\\n"
1684                     "  63,,6f,6e,63,61,74,65,6e,61,74,69,6f,6e,00,00\n\n");
1685     verify_reg_nonexist(hkey, "Wine32a");
1686     verify_reg_nonexist(hkey, "Wine32b");
1687 
1688     /* Test with embedded null characters */
1689     exec_import_str("REGEDIT4\n\n"
1690                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1691                     "\"Wine33a\"=\"\\0\"\n"
1692                     "\"Wine33b\"=\"\\0\\0\"\n"
1693                     "\"Wine33c\"=\"Value1\\0\"\n"
1694                     "\"Wine33d\"=\"Value2\\0\\0\\0\\0\"\n"
1695                     "\"Wine33e\"=\"Value3\\0Value4\"\n"
1696                     "\"Wine33f\"=\"\\0Value5\"\n\n");
1697     verify_reg_nonexist(hkey, "Wine33a");
1698     verify_reg_nonexist(hkey, "Wine33b");
1699     verify_reg_nonexist(hkey, "Wine33c");
1700     verify_reg_nonexist(hkey, "Wine33d");
1701     verify_reg_nonexist(hkey, "Wine33e");
1702     verify_reg_nonexist(hkey, "Wine33f");
1703 
1704     close_key(hkey);
1705 
1706     delete_key(HKEY_CURRENT_USER, KEY_BASE);
1707 }
1708 
test_invalid_import_unicode(void)1709 static void test_invalid_import_unicode(void)
1710 {
1711     HKEY hkey;
1712     DWORD dword = 0x8;
1713 
1714     delete_tree(HKEY_CURRENT_USER, KEY_BASE);
1715     verify_key_nonexist(HKEY_CURRENT_USER, KEY_BASE);
1716 
1717     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1718                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1719                      "\"TestNoEndQuote\"=\"Asdffdsa\n");
1720     open_key(HKEY_CURRENT_USER, KEY_BASE, KEY_SET_VALUE, &hkey);
1721     verify_reg_nonexist(hkey, "TestNoEndQuote");
1722 
1723     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1724                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1725                      "\"TestNoBeginQuote\"=Asdffdsa\"\n");
1726     verify_reg_nonexist(hkey, "TestNoBeginQuote");
1727 
1728     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1729                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1730                     "\"TestNoQuotes\"=Asdffdsa\n");
1731     verify_reg_nonexist(hkey, "TestNoQuotes");
1732 
1733     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1734                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1735                      "\"NameNoEndQuote=\"Asdffdsa\"\n");
1736     verify_reg_nonexist(hkey, "NameNoEndQuote");
1737 
1738     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1739                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1740                      "NameNoBeginQuote\"=\"Asdffdsa\"\n");
1741     verify_reg_nonexist(hkey, "NameNoBeginQuote");
1742 
1743     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1744                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1745                      "NameNoQuotes=\"Asdffdsa\"\n");
1746     verify_reg_nonexist(hkey, "NameNoQuotes");
1747 
1748     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1749                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1750                      "\"MixedQuotes=Asdffdsa\"\n");
1751     verify_reg_nonexist(hkey, "MixedQuotes");
1752     verify_reg_nonexist(hkey, "MixedQuotes=Asdffdsa");
1753 
1754     /* Test import with non-standard registry file headers */
1755     exec_import_wstr("\xef\xbb\xbfREGEDIT3\n\n"
1756                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1757                      "\"Test1\"=\"Value\"\n");
1758     verify_reg_nonexist(hkey, "Test1");
1759 
1760     exec_import_wstr("\xef\xbb\xbfregedit4\n\n"
1761                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1762                      "\"Test2\"=\"Value\"\n");
1763     verify_reg_nonexist(hkey, "Test2");
1764 
1765     exec_import_wstr("\xef\xbb\xbfRegedit4\n\n"
1766                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1767                      "\"Test3\"=\"Value\"\n");
1768     verify_reg_nonexist(hkey, "Test3");
1769 
1770     exec_import_wstr("\xef\xbb\xbfREGEDIT 4\n\n"
1771                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1772                      "\"Test4\"=\"Value\"\n");
1773     verify_reg_nonexist(hkey, "Test4");
1774 
1775     exec_import_wstr("\xef\xbb\xbfREGEDIT4FOO\n\n"
1776                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1777                      "\"Test5\"=\"Value\"\n");
1778     verify_reg_nonexist(hkey, "Test5");
1779 
1780     exec_import_wstr("\xef\xbb\xbfREGEDIT4 FOO\n\n"
1781                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1782                      "\"Test6\"=\"Value\"\n");
1783     verify_reg_nonexist(hkey, "Test6");
1784 
1785     exec_import_wstr("\xef\xbb\xbfREGEDIT5\n\n"
1786                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1787                      "\"Test7\"=\"Value\"\n");
1788     verify_reg_nonexist(hkey, "Test7");
1789 
1790     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 4.00\n\n"
1791                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1792                      "\"Test8\"=\"Value\"\n");
1793     verify_reg_nonexist(hkey, "Test8");
1794 
1795     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5\n\n"
1796                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1797                      "\"Test9\"=\"Value\"\n");
1798     verify_reg_nonexist(hkey, "Test9");
1799 
1800     exec_import_wstr("\xef\xbb\xbfWINDOWS REGISTRY EDITOR VERSION 5.00\n\n"
1801                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1802                      "\"Test10\"=\"Value\"\n");
1803     verify_reg_nonexist(hkey, "Test10");
1804 
1805     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor version 5.00\n\n"
1806                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1807                      "\"Test11\"=\"Value\"\n");
1808     verify_reg_nonexist(hkey, "Test11");
1809 
1810     /* Test multi-line import with incorrect comma placement */
1811     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1812                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1813                      "\"Multi-Line1\"=hex(7):4c,00,69,00,6e,00,65,00,20,00\\\n"
1814                      ",63,00,6f,00,6e,00,63,00,61,00,74,00,\\\n"
1815                      "65,00,6e,00,61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n\n");
1816     verify_reg_nonexist(hkey, "Multi-Line1");
1817 
1818     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1819                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1820                      "\"Multi-Line2\"=hex(7):4c,00,69,00,6e,00,65,00,20,00\\\n"
1821                      "  ,63,00,6f,00,6e,00,63,00,61,00,74,00,\\\n"
1822                      "  65,00,6e,00,61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n\n");
1823     verify_reg_nonexist(hkey, "Multi-Line2");
1824 
1825     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1826                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1827                      "\"Multi-Line3\"=hex(7):4c,00,69,00,6e,00,65,00,20,00\\\n"
1828                      ",63,00,6f,00,6e,00,63,00,61,00,74,00,\\\n"
1829                      "  65,00,6e,00,61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n\n");
1830     verify_reg_nonexist(hkey, "Multi-Line3");
1831 
1832     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1833                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1834                      "\"Multi-Line4\"=hex(7):4c,00,69,00,6e,00,65,00,20,00\\\n"
1835                      ",  63,00,6f,00,6e,00,63,00,61,00,74,00,\\\n"
1836                      "  65,00,6e,00,61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n\n");
1837     verify_reg_nonexist(hkey, "Multi-Line4");
1838 
1839     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1840                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1841                      "\"Test12a\"=dword:\n"
1842                      "\"Test12b\"=dword:hello\n"
1843                      "\"Test12c\"=dword:123456789\n"
1844                      "\"Test12d\"=dword:012345678\n"
1845                      "\"Test12e\"=dword:000000001\n\n");
1846     verify_reg_nonexist(hkey, "Test12a");
1847     verify_reg_nonexist(hkey, "Test12b");
1848     verify_reg_nonexist(hkey, "Test12c");
1849     verify_reg_nonexist(hkey, "Test12d");
1850     verify_reg_nonexist(hkey, "Test12e");
1851 
1852     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1853                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1854                      "\"Test13a\"=dword:12345678abc\n"
1855                      "\"Test13b\"=dword:12345678 abc\n\n");
1856     verify_reg_nonexist(hkey, "Test13a");
1857     verify_reg_nonexist(hkey, "Test13b");
1858 
1859     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1860                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1861                      "\"Test14a\"=dword:0x123\n"
1862                      "\"Test14b\"=dword:123 456\n"
1863                      "\"Test14c\"=dword:1234 5678\n\n");
1864     verify_reg_nonexist(hkey, "Test14a");
1865     verify_reg_nonexist(hkey, "Test14b");
1866     verify_reg_nonexist(hkey, "Test14c");
1867 
1868     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1869                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1870                      "\"Test15a\"=\"foo\"bar\"\n"
1871                      "\"Test15b\"=\"foo\"\"bar\"\n\n");
1872     verify_reg_nonexist(hkey, "Test15a");
1873     verify_reg_nonexist(hkey, "Test15b");
1874 
1875     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1876                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1877                      "\"Test16a\"=\n"
1878                      "\"Test16b\"=\\\"\n"
1879                      "\"Test16c\"=\\\"Value\\\"\n"
1880                      "\"Test16d\"=\\\"Value\"\n\n");
1881     verify_reg_nonexist(hkey, "Test16a");
1882     verify_reg_nonexist(hkey, "Test16b");
1883     verify_reg_nonexist(hkey, "Test16c");
1884     verify_reg_nonexist(hkey, "Test16d");
1885 
1886     /* Test key name and value name concatenation */
1887     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1888                      "[HKEY_CURRENT_USER\\" KEY_BASE "\\\n"
1889                      "Subkey1]\n");
1890     verify_key_nonexist(hkey, "Subkey1");
1891 
1892     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1893                      "[HKEY_CURRENT_USER\\" KEY_BASE "\n"
1894                      "\\Subkey2]\n");
1895     verify_key_nonexist(hkey, "Subkey2");
1896 
1897     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1898                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1899                      "\"Test\\\n"
1900                      "17a\"=\"Value 1\"\n"
1901                      "\"Test17b\"=\"Value 2\"\n"
1902                      "\"Test\n"
1903                      "\\17c\"=\"Value 3\"\n\n");
1904     verify_reg_nonexist(hkey, "Test17a");
1905     verify_reg(hkey, "Test17b", REG_SZ, "Value 2", 8, 0);
1906     verify_reg_nonexist(hkey, "Test17c");
1907 
1908     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1909                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1910                      "\"Test18a\"=dword:1234\\\n"
1911                      "5678\n"
1912                      "\"Test18b\"=\"Test \\\n"
1913                      "Value\"\n\n");
1914     verify_reg_nonexist(hkey, "Test18a");
1915     verify_reg_nonexist(hkey, "Test18b");
1916 
1917     /* Test hex data concatenation for REG_NONE, REG_EXPAND_SZ and REG_BINARY */
1918     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1919                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1920                      "\"Test19a\"=hex(0):56,00,61,00,6c,00\\\n"
1921                      ",75,00,65,00,00,00\n"
1922                      "\"Test19b\"=hex(0):56,00,61,00,6c,00\\\n"
1923                      "  ,75,00,65,00,00,00\n"
1924                      "\"Test19c\"=hex(0):56,00,61,00,6c,00\\\n"
1925                      "  75,00,65,00,00,00\n"
1926                      "\"Test19d\"=hex(0):56,00,61,00,6c,00,7\\\n"
1927                      "5,00,65,00,00,00\n"
1928                      "\"Test19e\"=hex(0):56,00,61,00,6c,00,7\\\n"
1929                      "  5,00,65,00,00,00\n"
1930                      "\"Test19f\"=hex(0):56,00,61,00,\\;comment\n"
1931                      "  6c,00,75,00,\\#comment\n"
1932                      "  65,00,00,00\n\n");
1933     verify_reg_nonexist(hkey, "Test19a");
1934     verify_reg_nonexist(hkey, "Test19b");
1935     verify_reg_nonexist(hkey, "Test19c");
1936     verify_reg_nonexist(hkey, "Test19d");
1937     verify_reg_nonexist(hkey, "Test19e");
1938     verify_reg_nonexist(hkey, "Test19f");
1939 
1940     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1941                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1942                      "\"Test20a\"=hex(2):25,00,50,00,41,00\\\n"
1943                      ",54,00,48,00,25,00,00,00\n"
1944                      "\"Test20b\"=hex(2):25,00,50,00,41,00\\\n"
1945                      "  ,54,00,48,00,25,00,00,00\n"
1946                      "\"Test20c\"=hex(2):25,00,50,00,41,00\\\n"
1947                      "  54,00,48,00,25,00,00,00\n"
1948                      "\"Test20d\"=hex(2):25,00,50,00,4\\\n"
1949                      "1,00,54,00,48,00,25,00,00,00\n"
1950                      "\"Test20e\"=hex(2):25,00,50,00,4\\\n"
1951                      "  1,00,54,00,48,00,25,00,00\n"
1952                      "\"Test20f\"=hex(2):25,00,50,00,41,00,\\;comment\n"
1953                      "  54,00,48,00,\\#comment\n"
1954                      "  25,00,00,00\n\n");
1955     verify_reg_nonexist(hkey, "Test20a");
1956     verify_reg_nonexist(hkey, "Test20b");
1957     verify_reg_nonexist(hkey, "Test20c");
1958     verify_reg_nonexist(hkey, "Test20d");
1959     verify_reg_nonexist(hkey, "Test20e");
1960     verify_reg_nonexist(hkey, "Test20f");
1961 
1962     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1963                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1964                      "\"Test21a\"=hex:11,22,33,44\\\n"
1965                      ",55,66,77,88\n"
1966                      "\"Test21b\"=hex:11,22,33,44\\\n"
1967                      "  ,55,66,77,88\n"
1968                      "\"Test21c\"=hex:11,22,33,44\\\n"
1969                      "  55,66,77,88\n"
1970                      "\"Test21d\"=hex:11,22,33,4\\\n"
1971                      "4,55,66,77,88\n"
1972                      "\"Test21e\"=hex:11,22,33,4\\\n"
1973                      "  4,55,66,77,88\n"
1974                      "\"Test21f\"=hex:11,22,33,\\;comment\n"
1975                      "  44,55,66,\\#comment\n"
1976                      "  77,88\n\n");
1977     verify_reg_nonexist(hkey, "Test21a");
1978     verify_reg_nonexist(hkey, "Test21b");
1979     verify_reg_nonexist(hkey, "Test21c");
1980     verify_reg_nonexist(hkey, "Test21d");
1981     verify_reg_nonexist(hkey, "Test21e");
1982     verify_reg_nonexist(hkey, "Test21f");
1983 
1984     /* Test support for characters greater than 0xff */
1985     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1986                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1987                      "\"Wine22a\"=hex(0):25,50,100,54,48,25,00\n"
1988                      "\"Wine22b\"=hex(0):25,1a4,100,164,124,25,00\n\n");
1989     verify_reg_nonexist(hkey, "Wine22a");
1990     verify_reg_nonexist(hkey, "Wine22b");
1991 
1992     /* Test the effect of backslashes in hex data */
1993     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1994                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
1995                      "\"Wine23a\"=hex(2):25,00,48\\,00,4f,00,4d,00,45,00,25,00,00,00\n"
1996                      "\"Wine23b\"=hex(2):25,00,48,00,\\4f,00,4d,00,45,00,25,00,00,00\n"
1997                      "\"Wine23c\"=hex(2):25,00,48\\ ,00,4f,00,4d,00,45,00,25,00,00,00\n"
1998                      "\"Wine23d\"=hex(2):25,00,48,00,\\ 4f,00,4d,00,45,00,25,00,00,00\n"
1999                      "\"Wine23e\"=hex(2):\\25,00,48,00,4f,00,4d,00,45,00,25,00,00,00\n"
2000                      "\"Wine23f\"=hex(2):\\ 25,00,48,00,4f,00,4d,00,45,00,25,00,00,00\n"
2001                      "\"Wine23g\"=hex(2):25,00,48,00,4\\f,00,4d,00,45,00,25,00,00,00\n"
2002                      "\"Wine23h\"=hex(2):25,00,48,00,4\\\n"
2003                      "  f,00,4d,00,45,00,25,00,00,00\n"
2004                      "\"Wine23i\"=hex(2):25,00,50,00,\\,41,00,54,00,48,00,25,00,00,00\n"
2005                      "\"Wine23j\"=hex(2):25,00,48,00,4f,00,4d,00,45,00,25,00,5c,00,\\\\\n"
2006                      "  25,00,50,00,41,00,54,00,48,00,25,00,00,00\n"
2007                      "\"Wine23k\"=hex(2):,\\\n"
2008                      "  25,00,48,00,4f,00,4d,00,45,00,25,00,00,00\n\n");
2009     verify_reg_nonexist(hkey, "Wine23a");
2010     verify_reg_nonexist(hkey, "Wine23b");
2011     verify_reg_nonexist(hkey, "Wine23c");
2012     verify_reg_nonexist(hkey, "Wine23d");
2013     verify_reg_nonexist(hkey, "Wine23e");
2014     verify_reg_nonexist(hkey, "Wine23f");
2015     verify_reg_nonexist(hkey, "Wine23g");
2016     verify_reg_nonexist(hkey, "Wine23h");
2017     verify_reg_nonexist(hkey, "Wine23i");
2018     verify_reg_nonexist(hkey, "Wine23j");
2019     verify_reg_nonexist(hkey, "Wine23k");
2020 
2021     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2022                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2023                      "\"Wine24a\"=hex(2):4c,00,69,00,6e,00,65,00,20,00,\\\n"
2024                      "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey1]\n");
2025     verify_reg_nonexist(hkey, "Wine24a");
2026     verify_key_nonexist(hkey, "Subkey1");
2027 
2028     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2029                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2030                      "\"Wine24b\"=hex(2):4c,00,69,00,6e,00,65,00,20,00\\\n"
2031                      "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey2]\n");
2032     verify_reg_nonexist(hkey, "Wine24b");
2033     verify_key(hkey, "Subkey2");
2034 
2035     delete_key(hkey, "Subkey2");
2036 
2037     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2038                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2039                      "\"Wine25a\"=hex(2):4c,00,69,00,6e,00,65,00,20,00,\\\n"
2040                      "\"Wine25b\"=\"Test value\"\n"
2041 
2042                      "\"Wine25c\"=hex(2):4c,00,69,00,6e,00,65,00,20,00,\\\n"
2043                      ";comment\n"
2044                      "\"Wine25d\"=\"Test value\"\n"
2045 
2046                      "\"Wine25e\"=hex(2):4c,00,69,00,6e,00,65,00,20,00,\\\n"
2047                      "#comment\n"
2048                      "\"Wine25f\"=\"Test value\"\n"
2049 
2050                      "\"Wine25g\"=hex(2):4c,00,69,00,6e,00,65,00,20,00,\\\n\n"
2051                      "\"Wine25h\"=\"Test value\"\n"
2052 
2053                      "\"Wine25i\"=hex(2):4c,00,69,00,6e,00,65,00,20,00\\\n"
2054                      "\"Wine25j\"=\"Test value\"\n\n");
2055     verify_reg_nonexist(hkey, "Wine25a");
2056     verify_reg_nonexist(hkey, "Wine25b");
2057     verify_reg_nonexist(hkey, "Wine25c");
2058     verify_reg_nonexist(hkey, "Wine25d");
2059     verify_reg_nonexist(hkey, "Wine25e");
2060     verify_reg(hkey, "Wine25f", REG_SZ, "Test value", 11, 0);
2061     verify_reg_nonexist(hkey, "Wine25g");
2062     verify_reg_nonexist(hkey, "Wine25h");
2063     verify_reg_nonexist(hkey, "Wine25i");
2064     verify_reg(hkey, "Wine25j", REG_SZ, "Test value", 11, 0);
2065 
2066     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2067                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2068                      "\"Wine26a\"=hex(2):4c,00,69,00,6e,00,65,00,20,00,\\\n"
2069                      "\"Wine26b\"=dword:00000008\n"
2070 
2071                      "\"Wine26c\"=hex(2):4c,00,69,00,6e,00,65,00,20,00,\\\n"
2072                      ";comment\n"
2073                      "\"Wine26d\"=dword:00000008\n"
2074 
2075                      "\"Wine26e\"=hex(2):4c,00,69,00,6e,00,65,00,20,00,\\\n"
2076                      "#comment\n"
2077                      "\"Wine26f\"=dword:00000008\n"
2078 
2079                      "\"Wine26g\"=hex(2):4c,00,69,00,6e,00,65,00,20,00,\\\n\n"
2080                      "\"Wine26h\"=dword:00000008\n"
2081 
2082                      "\"Wine26i\"=hex(2):4c,00,69,00,6e,00,65,00,20,00\\\n"
2083                      "\"Wine26j\"=dword:00000008\n\n");
2084     verify_reg_nonexist(hkey, "Wine26a");
2085     verify_reg_nonexist(hkey, "Wine26b");
2086     verify_reg_nonexist(hkey, "Wine26c");
2087     verify_reg_nonexist(hkey, "Wine26d");
2088     verify_reg_nonexist(hkey, "Wine26e");
2089     verify_reg(hkey, "Wine26f", REG_DWORD, &dword, sizeof(dword), 0);
2090     verify_reg_nonexist(hkey, "Wine26g");
2091     verify_reg_nonexist(hkey, "Wine26h");
2092     verify_reg_nonexist(hkey, "Wine26i");
2093     verify_reg(hkey, "Wine26j", REG_DWORD, &dword, sizeof(dword), 0);
2094 
2095     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2096                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2097                      "\"Wine27a\"=hex(2):25,00,48,00,4f,00,4d,00,45,00,25,00,5c,00,\\\n"
2098                      "\"Wine27b\"=hex(2):25,00,50,00,41,00,54,00,48,00,25,00,00,00\n"
2099 
2100                      "\"Wine27c\"=hex(2):25,00,48,00,4f,00,4d,00,45,00,25,00,5c,00,\\\n"
2101                      ";comment\n"
2102                      "\"Wine27d\"=hex(2):25,00,50,00,41,00,54,00,48,00,25,00,00,00\n"
2103 
2104                      "\"Wine27e\"=hex(2):25,00,48,00,4f,00,4d,00,45,00,25,00,5c,00,\\\n"
2105                      "#comment\n"
2106                      "\"Wine27f\"=hex(2):25,00,50,00,41,00,54,00,48,00,25,00,00,00\n"
2107 
2108                      "\"Wine27g\"=hex(2):25,00,48,00,4f,00,4d,00,45,00,25,00,5c,00,\\\n\n"
2109                      "\"Wine27h\"=hex(2):25,00,50,00,41,00,54,00,48,00,25,00,00,00\n"
2110 
2111                      "\"Wine27i\"=hex(2):25,00,48,00,4f,00,4d,00,45,00,25,00,5c,00\\\n"
2112                      "\"Wine27j\"=hex(2):25,00,50,00,41,00,54,00,48,00,25,00,00,00\n\n");
2113     verify_reg_nonexist(hkey, "Wine27a");
2114     verify_reg_nonexist(hkey, "Wine27b");
2115     verify_reg_nonexist(hkey, "Wine27c");
2116     verify_reg_nonexist(hkey, "Wine27d");
2117     verify_reg_nonexist(hkey, "Wine27e");
2118     verify_reg(hkey, "Wine27f", REG_EXPAND_SZ, "%PATH%", 7, 0);
2119     verify_reg_nonexist(hkey, "Wine27g");
2120     verify_reg_nonexist(hkey, "Wine27h");
2121     verify_reg_nonexist(hkey, "Wine27i");
2122     verify_reg(hkey, "Wine27j", REG_EXPAND_SZ, "%PATH%", 7, 0);
2123 
2124     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2125                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2126                      "\"Wine28a\"=hex(2):4c,00,69,00,6e,00,65,00,20,00,\\\n"
2127                      "@=\"Default value 1\"\n\n");
2128     verify_reg_nonexist(hkey, "Wine28a");
2129     verify_reg_nonexist(hkey, NULL);
2130 
2131     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2132                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2133                      "\"Wine28b\"=hex(2):4c,00,69,00,6e,00,65,00,20,00,\\\n"
2134                      ";comment\n"
2135                      "@=\"Default value 2\"\n\n");
2136     verify_reg_nonexist(hkey, "Wine28b");
2137     verify_reg_nonexist(hkey, NULL);
2138 
2139     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2140                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2141                      "\"Wine28c\"=hex(2):4c,00,69,00,6e,00,65,00,20,00,\\\n"
2142                      "#comment\n"
2143                      "@=\"Default value 3\"\n\n");
2144     verify_reg_nonexist(hkey, "Wine28c");
2145     verify_reg(hkey, NULL, REG_SZ, "Default value 3", 16, 0);
2146 
2147     delete_value(hkey, NULL);
2148 
2149     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2150                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2151                      "\"Wine28d\"=hex(2):4c,00,69,00,6e,00,65,00,20,00,\\\n\n"
2152                      "@=\"Default value 4\"\n\n");
2153     verify_reg_nonexist(hkey, "Wine28d");
2154     verify_reg_nonexist(hkey, NULL);
2155 
2156     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2157                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2158                      "\"Wine28e\"=hex(2):4c,00,69,00,6e,00,65,00,20,00\\\n"
2159                      "@=\"Default value 5\"\n\n");
2160     verify_reg_nonexist(hkey, "Wine28e");
2161     verify_reg(hkey, NULL, REG_SZ, "Default value 5", 16, 0);
2162 
2163     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2164                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2165                      "\"Wine29a\"=hex:11,22,33,\\\n"
2166                      "\\\n"
2167                      "  44,55,66\n"
2168                      "\"Wine29b\"=hex:11,22,33,\\\n"
2169                      "  \\\n"
2170                      "  44,55,66\n\n");
2171     verify_reg_nonexist(hkey, "Wine29a");
2172     verify_reg_nonexist(hkey, "Wine29b");
2173 
2174     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2175                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2176                      "\"Wine30a\"=hex(0):25,48,4f,4d,45,25,5c,/\n"
2177                      "  25,50,41,54,48,25,00\n"
2178                      "\"Wine30b\"=hex(0):25,48,4f,4d,45,25,5c/\n"
2179                      "  25,50,41,54,48,25,00\n\n");
2180     verify_reg_nonexist(hkey, "Wine30a");
2181     verify_reg_nonexist(hkey, "Wine30b");
2182 
2183     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2184                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2185                      "\"Wine31\"=hex(7):4c,00,69,00,6e,00,65,00,20,00\\");
2186     verify_reg_nonexist(hkey, "Wine31");
2187 
2188     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2189                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2190                      "\"Wine32a\"=hex(7):4c,00,69,00,6e,00,65,00,20,00,\\\n"
2191                      "  ,63,00,6f,00,6e,00,63,00,61,00,74,00,\\\n"
2192                      "  65,00,6e,00,61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n"
2193                      "\"Wine32b\"=hex(7):4c,00,69,00,6e,00,65,00,20,00,\\\n"
2194                      "  63,00,,6f,00,6e,00,63,00,61,00,74,00,\\\n"
2195                      "  65,00,6e,00,61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n\n");
2196     verify_reg_nonexist(hkey, "Wine32a");
2197     verify_reg_nonexist(hkey, "Wine32b");
2198 
2199     /* Test with embedded null characters */
2200     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2201                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2202                      "\"Wine33a\"=\"\\0\"\n"
2203                      "\"Wine33b\"=\"\\0\\0\"\n"
2204                      "\"Wine33c\"=\"Value1\\0\"\n"
2205                      "\"Wine33d\"=\"Value2\\0\\0\\0\\0\"\n"
2206                      "\"Wine33e\"=\"Value3\\0Value4\"\n"
2207                      "\"Wine33f\"=\"\\0Value5\"\n\n");
2208     verify_reg_nonexist(hkey, "Wine33a");
2209     verify_reg_nonexist(hkey, "Wine33b");
2210     verify_reg_nonexist(hkey, "Wine33c");
2211     verify_reg_nonexist(hkey, "Wine33d");
2212     verify_reg_nonexist(hkey, "Wine33e");
2213     verify_reg_nonexist(hkey, "Wine33f");
2214 
2215     close_key(hkey);
2216 
2217     delete_key(HKEY_CURRENT_USER, KEY_BASE);
2218 }
2219 
test_invalid_import_31(void)2220 static void test_invalid_import_31(void)
2221 {
2222     HKEY hkey;
2223     DWORD dispos;
2224 
2225     RegCreateKeyExA(HKEY_CLASSES_ROOT, KEY_BASE, 0, NULL, REG_OPTION_NON_VOLATILE,
2226                      KEY_READ|KEY_SET_VALUE, NULL, &hkey, &dispos);
2227 
2228     if (dispos == REG_OPENED_EXISTING_KEY)
2229         delete_value(hkey, NULL);
2230 
2231     /* Test character validity at the start of the line */
2232     exec_import_str("REGEDIT\r\n"
2233                     " HKEY_CLASSES_ROOT\\" KEY_BASE " = Value1a\r\n");
2234     verify_reg_nonexist(hkey, "");
2235 
2236     exec_import_str("REGEDIT\r\n"
2237                     "  HKEY_CLASSES_ROOT\\" KEY_BASE " = Value1b\r\n");
2238     verify_reg_nonexist(hkey, "");
2239 
2240     exec_import_str("REGEDIT\r\n"
2241                     "\tHKEY_CLASSES_ROOT\\" KEY_BASE " = Value1c\r\n");
2242     verify_reg_nonexist(hkey, "");
2243 
2244     exec_import_str("REGEDIT\r\n"
2245                     ";HKEY_CLASSES_ROOT\\" KEY_BASE " = Value2a\r\n");
2246     verify_reg_nonexist(hkey, "");
2247 
2248     exec_import_str("REGEDIT\r\n"
2249                     "#HKEY_CLASSES_ROOT\\" KEY_BASE " = Value2b\r\n");
2250     verify_reg_nonexist(hkey, "");
2251 
2252     /* Test case sensitivity */
2253     exec_import_str("REGEDIT\r\n"
2254                     "hkey_classes_root\\" KEY_BASE " = Value3a\r\n");
2255     verify_reg_nonexist(hkey, "");
2256 
2257     exec_import_str("REGEDIT\r\n"
2258                     "hKEY_CLASSES_ROOT\\" KEY_BASE " = Value3b\r\n");
2259     verify_reg_nonexist(hkey, "");
2260 
2261     exec_import_str("REGEDIT\r\n"
2262                     "Hkey_Classes_Root\\" KEY_BASE " = Value3c\r\n");
2263     verify_reg_nonexist(hkey, "");
2264 
2265     close_key(hkey);
2266 
2267     delete_key(HKEY_CLASSES_ROOT, KEY_BASE);
2268 }
2269 
test_comments(void)2270 static void test_comments(void)
2271 {
2272     HKEY hkey;
2273     DWORD dword;
2274 
2275     delete_tree(HKEY_CURRENT_USER, KEY_BASE);
2276     verify_key_nonexist(HKEY_CURRENT_USER, KEY_BASE);
2277 
2278     exec_import_str("REGEDIT4\n\n"
2279                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2280                     "#comment\\\n"
2281                     "\"Wine1\"=\"Line 1\"\n"
2282                     ";comment\\\n"
2283                     "\"Wine2\"=\"Line 2\"\n\n");
2284     open_key(HKEY_CURRENT_USER, KEY_BASE, 0, &hkey);
2285     verify_reg(hkey, "Wine1", REG_SZ, "Line 1", 7, 0);
2286     verify_reg(hkey, "Wine2", REG_SZ, "Line 2", 7, 0);
2287 
2288     exec_import_str("REGEDIT4\n\n"
2289                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2290                     "\"Wine3\"=\"Value 1\"#comment\n"
2291                     "\"Wine4\"=\"Value 2\";comment\n"
2292                     "\"Wine5\"=dword:01020304 #comment\n"
2293                     "\"Wine6\"=dword:02040608 ;comment\n\n");
2294     verify_reg_nonexist(hkey, "Wine3");
2295     verify_reg(hkey, "Wine4", REG_SZ, "Value 2", 8, 0);
2296     verify_reg_nonexist(hkey, "Wine5");
2297     dword = 0x2040608;
2298     verify_reg(hkey, "Wine6", REG_DWORD, &dword, sizeof(dword), 0);
2299 
2300     exec_import_str("REGEDIT4\n\n"
2301                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2302                     "\"Wine7\"=hex(7):4c,69,6e,65,20,\\\n"
2303                     "  #comment\n"
2304                     "  63,6f,6e,63,61,74,65,6e,61,74,69,6f,6e,00,00\n"
2305                     "\"Wine8\"=\"A valid line\"\n"
2306                     "\"Wine9\"=hex(7):4c,69,6e,65,20,\\\n"
2307                     "  ;comment\n"
2308                     "  63,6f,6e,63,61,74,65,6e,61,74,69,6f,6e,00,00\n"
2309                     "\"Wine10\"=\"Another valid line\"\n\n");
2310     verify_reg_nonexist(hkey, "Wine7");
2311     verify_reg(hkey, "Wine8", REG_SZ, "A valid line", 13, 0);
2312     verify_reg(hkey, "Wine9", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
2313     verify_reg(hkey, "Wine10", REG_SZ, "Another valid line", 19, 0);
2314 
2315     exec_import_str("REGEDIT4\n\n"
2316                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2317                     "#\"Comment1\"=\"Value 1\"\n"
2318                     ";\"Comment2\"=\"Value 2\"\n"
2319                     "    #\"Comment3\"=\"Value 3\"\n"
2320                     "    ;\"Comment4\"=\"Value 4\"\n"
2321                     "\"Wine11\"=\"Value 6\"#\"Comment5\"=\"Value 5\"\n"
2322                     "\"Wine12\"=\"Value 7\";\"Comment6\"=\"Value 6\"\n\n");
2323     verify_reg_nonexist(hkey, "Comment1");
2324     verify_reg_nonexist(hkey, "Comment2");
2325     verify_reg_nonexist(hkey, "Comment3");
2326     verify_reg_nonexist(hkey, "Comment4");
2327     verify_reg_nonexist(hkey, "Wine11");
2328     verify_reg_nonexist(hkey, "Comment5");
2329     verify_reg(hkey, "Wine12", REG_SZ, "Value 7", 8, 0);
2330     verify_reg_nonexist(hkey, "Comment6");
2331 
2332     exec_import_str("REGEDIT4\n\n"
2333                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2334                     "\"Wine13\"=#\"Value 8\"\n"
2335                     "\"Wine14\"=;\"Value 9\"\n"
2336                     "\"Wine15\"=\"#comment1\"\n"
2337                     "\"Wine16\"=\";comment2\"\n"
2338                     "\"Wine17\"=\"Value#comment3\"\n"
2339                     "\"Wine18\"=\"Value;comment4\"\n"
2340                     "\"Wine19\"=\"Value #comment5\"\n"
2341                     "\"Wine20\"=\"Value ;comment6\"\n"
2342                     "\"Wine21\"=#dword:00000001\n"
2343                     "\"Wine22\"=;dword:00000002\n"
2344                     "\"Wine23\"=dword:00000003#comment\n"
2345                     "\"Wine24\"=dword:00000004;comment\n\n");
2346     verify_reg_nonexist(hkey, "Wine13");
2347     verify_reg_nonexist(hkey, "Wine14");
2348     verify_reg(hkey, "Wine15", REG_SZ, "#comment1", 10, 0);
2349     verify_reg(hkey, "Wine16", REG_SZ, ";comment2", 10, 0);
2350     verify_reg(hkey, "Wine17", REG_SZ, "Value#comment3", 15, 0);
2351     verify_reg(hkey, "Wine18", REG_SZ, "Value;comment4", 15, 0);
2352     verify_reg(hkey, "Wine19", REG_SZ, "Value #comment5", 16, 0);
2353     verify_reg(hkey, "Wine20", REG_SZ, "Value ;comment6", 16, 0);
2354     verify_reg_nonexist(hkey, "Wine21");
2355     verify_reg_nonexist(hkey, "Wine22");
2356     verify_reg_nonexist(hkey, "Wine23");
2357     dword = 0x00000004;
2358     verify_reg(hkey, "Wine24", REG_DWORD, &dword, sizeof(dword), 0);
2359 
2360     exec_import_str("REGEDIT4\n\n"
2361                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2362                     "\"Wine25a\"=dword:1234;5678\n"
2363                     "\"Wine25b\"=dword:1234 ;5678\n"
2364                     "\"Wine25c\"=dword:1234#5678\n"
2365                     "\"Wine25d\"=dword:1234 #5678\n\n");
2366     dword = 0x1234;
2367     verify_reg(hkey, "Wine25a", REG_DWORD, &dword, sizeof(dword), 0);
2368     verify_reg(hkey, "Wine25b", REG_DWORD, &dword, sizeof(dword), 0);
2369     verify_reg_nonexist(hkey, "Wine25c");
2370     verify_reg_nonexist(hkey, "Wine25d");
2371 
2372     exec_import_str("REGEDIT4\n\n"
2373                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2374                     "\"Wine26a\"=\"Value1\"  ;comment\n"
2375                     "\"Wine26b\"=\"Value2\"\t\t;comment\n"
2376                     "\"Wine26c\"=\"Value3\"  #comment\n"
2377                     "\"Wine26d\"=\"Value4\"\t\t#comment\n\n");
2378     verify_reg(hkey, "Wine26a", REG_SZ, "Value1", 7, 0);
2379     verify_reg(hkey, "Wine26b", REG_SZ, "Value2", 7, 0);
2380     verify_reg_nonexist(hkey, "Wine26c");
2381     verify_reg_nonexist(hkey, "Wine26d");
2382 
2383     exec_import_str("REGEDIT4\n\n"
2384                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2385                     "\"Multi-Line1\"=hex(7):4c,69,6e,65,20,\\\n"
2386                     "  63,6f,6e,\\;comment\n"
2387                     "  63,61,74,\\;comment\n"
2388                     "  65,6e,61,74,69,6f,6e,00,00\n\n");
2389     verify_reg(hkey, "Multi-Line1", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
2390 
2391     exec_import_str("REGEDIT4\n\n"
2392                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2393                     "\"Multi-Line2\"=hex(7):4c,69,6e,65,20,\\\n"
2394                     "  63,6f,6e,\\;comment\n"
2395                     "  63,61,74,;comment\n"
2396                     "  65,6e,61,74,69,6f,6e,00,00\n\n");
2397     verify_reg(hkey, "Multi-Line2", REG_MULTI_SZ, "Line concat", 12, 0);
2398 
2399     exec_import_str("REGEDIT4\n\n"
2400                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2401                     "\"Multi-Line3\"=hex(7):4c,69,6e,\\;comment\n"
2402                     "  65,20,\\;comment\n"
2403                     "  63,6f,6e,\\;comment\n"
2404                     "  63,61,74,\\;comment\n"
2405                     "  65,6e,61,74,69,6f,6e,00,00\n\n");
2406     verify_reg(hkey, "Multi-Line3", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
2407 
2408     exec_import_str("REGEDIT4\n\n"
2409                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2410                     "\"Multi-Line4\"=hex(7):4c,69,6e,\\;#comment\n"
2411                     "  65,20,\\;#comment\n"
2412                     "  63,6f,6e,\\;#comment\n"
2413                     "  63,61,74,\\;#comment\n"
2414                     "  65,6e,61,74,69,6f,6e,00,00\n\n");
2415     verify_reg(hkey, "Multi-Line4", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
2416 
2417     exec_import_str("REGEDIT4\n\n"
2418                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2419                     "\"Multi-Line5\"=hex(7):4c,69,6e,\\;comment\n"
2420                     "  65,20,\\;comment\n"
2421                     "  63,6f,6e,\\;comment\n"
2422                     "  63,61,74,\\#comment\n"
2423                     "  65,6e,61,74,69,6f,6e,00,00\n\n");
2424     verify_reg_nonexist(hkey, "Multi-Line5");
2425 
2426     exec_import_str("REGEDIT4\n\n"
2427                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2428                     "\"Multi-Line6\"=hex(7):4c,69,6e,65,20,\\\n"
2429                     "  63,6f,6e,\\;comment\n"
2430                     "  63,61,74,\\\n\n"
2431                     "  65,6e,\\;comment\n\n"
2432                     "  61,74,69,6f,6e,00,00\n\n");
2433     verify_reg(hkey, "Multi-Line6", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
2434 
2435     exec_import_str("REGEDIT4\n\n"
2436                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2437                     "\"Wine27a\"=hex(2):25,50,41,54,48,25,00  ;comment\n"
2438                     "\"Wine27b\"=hex(2):25,50,41,54,48,25,00\t;comment\n"
2439                     "\"Wine27c\"=hex(2):25,50,41,54,48,25,00  #comment\n"
2440                     "\"Wine27d\"=hex(2):25,50,41,54,48,25,00\t#comment\n\n");
2441     verify_reg(hkey, "Wine27a", REG_EXPAND_SZ, "%PATH%", 7, 0);
2442     verify_reg(hkey, "Wine27b", REG_EXPAND_SZ, "%PATH%", 7, 0);
2443     verify_reg_nonexist(hkey, "Wine27c");
2444     verify_reg_nonexist(hkey, "Wine27d");
2445 
2446     exec_import_str("REGEDIT4\n\n"
2447                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2448                     "\"Wine28a\"=hex(2):25,48,4f,4d,45,25,5c,\\\n"
2449                     "  25,50,41,54,48,25,00\n"
2450                     "\"Wine28b\"=hex(2):25,48,4f,4d,45,25,5c\\\n"
2451                     "  25,50,41,54,48,25,00\n"
2452                     "\"Wine28c\"=hex(2):25,48,4f,4d,45,25,5c,  \\  ;comment\n"
2453                     "  25,50,41,54,48,25,00\n"
2454                     "\"Wine28d\"=hex(2):25,48,4f,4d,45,25,5c  \\  ;comment\n"
2455                     "  25,50,41,54,48,25,00\n"
2456                     "\"Wine28e\"=hex(2):25,48,4f,4d,45,25,5c,\\\t  ;comment\n"
2457                     "  25,50,41,54,48,25,00\n"
2458                     "\"Wine28f\"=hex(2):25,48,4f,4d,45,25,5c\\\t  ;comment\n"
2459                     "  25,50,41,54,48,25,00\n\n");
2460     verify_reg(hkey, "Wine28a", REG_EXPAND_SZ, "%HOME%\\%PATH%", 14, 0);
2461     verify_reg_nonexist(hkey, "Wine28b");
2462     verify_reg(hkey, "Wine28c", REG_EXPAND_SZ, "%HOME%\\%PATH%", 14, 0);
2463     verify_reg_nonexist(hkey, "Wine28d");
2464     verify_reg(hkey, "Wine28e", REG_EXPAND_SZ, "%HOME%\\%PATH%", 14, 0);
2465     verify_reg_nonexist(hkey, "Wine28f");
2466 
2467     exec_import_str("REGEDIT4\n\n"
2468                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2469                     "\"Wine29a\"=hex(7):4c,69,6e,65,20,\\\n"
2470                     "  63,6f,6e,63,61,74,\\\n"
2471                     ";comment\n"
2472                     "  65,6e,\\;comment\n"
2473                     "  61,74,69,6f,6e,00,00\n\n");
2474     verify_reg(hkey, "Wine29a", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
2475 
2476     exec_import_str("REGEDIT4\n\n"
2477                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2478                     "\"Wine29b\"=hex(7):4c,69,6e,65,20,\\\n"
2479                     "  63,6f,6e,63,61,74,\\\n"
2480                     "  ;comment\n"
2481                     "  65,6e,\\;comment\n"
2482                     "  61,74,69,6f,6e,00,00\n\n");
2483     verify_reg(hkey, "Wine29b", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
2484 
2485     exec_import_str("REGEDIT4\n\n"
2486                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2487                     "\"Wine29c\"=hex(7):4c,69,6e,65,20,\\\n"
2488                     "  63,6f,6e,63,61,74,\\\n"
2489                     "#comment\n"
2490                     "  65,6e,\\;comment\n"
2491                     "  61,74,69,6f,6e,00,00\n\n");
2492     verify_reg_nonexist(hkey, "Wine29c");
2493 
2494     exec_import_str("REGEDIT4\n\n"
2495                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2496                     "\"Wine29d\"=hex(7):4c,69,6e,65,20,\\\n"
2497                     "  63,6f,6e,63,61,74,\\\n"
2498                     "  #comment\n"
2499                     "  65,6e,\\;comment\n"
2500                     "  61,74,69,6f,6e,00,00\n\n");
2501     verify_reg_nonexist(hkey, "Wine29d");
2502 
2503     close_key(hkey);
2504 
2505     delete_key(HKEY_CURRENT_USER, KEY_BASE);
2506 }
2507 
test_comments_unicode(void)2508 static void test_comments_unicode(void)
2509 {
2510     HKEY hkey;
2511     DWORD dword;
2512 
2513     delete_tree(HKEY_CURRENT_USER, KEY_BASE);
2514     verify_key_nonexist(HKEY_CURRENT_USER, KEY_BASE);
2515 
2516     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2517                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2518                      "#comment\\\n"
2519                      "\"Wine1\"=\"Line 1\"\n"
2520                      ";comment\\\n"
2521                      "\"Wine2\"=\"Line 2\"\n\n");
2522     open_key(HKEY_CURRENT_USER, KEY_BASE, 0, &hkey);
2523     verify_reg(hkey, "Wine1", REG_SZ, "Line 1", 7, 0);
2524     verify_reg(hkey, "Wine2", REG_SZ, "Line 2", 7, 0);
2525 
2526     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2527                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2528                      "\"Wine3\"=\"Value 1\"#comment\n"
2529                      "\"Wine4\"=\"Value 2\";comment\n"
2530                      "\"Wine5\"=dword:01020304 #comment\n"
2531                      "\"Wine6\"=dword:02040608 ;comment\n\n");
2532     verify_reg_nonexist(hkey, "Wine3");
2533     verify_reg(hkey, "Wine4", REG_SZ, "Value 2", 8, 0);
2534     verify_reg_nonexist(hkey, "Wine5");
2535     dword = 0x2040608;
2536     verify_reg(hkey, "Wine6", REG_DWORD, &dword, sizeof(dword), 0);
2537 
2538     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2539                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2540                      "\"Wine7\"=hex(7):4c,00,69,00,6e,00,65,00,20,00,\\\n"
2541                      "  #comment\n"
2542                      "  63,00,6f,00,6e,00,63,00,61,00,74,00,\\\n"
2543                      "  65,00,6e,00,61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n"
2544                      "\"Wine8\"=\"A valid line\"\n"
2545                      "\"Wine9\"=hex(7):4c,00,69,00,6e,00,65,00,20,00,\\\n"
2546                      "  ;comment\n"
2547                      "  63,00,6f,00,6e,00,63,00,61,00,74,00,\\\n"
2548                      "  65,00,6e,00,61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n"
2549                      "\"Wine10\"=\"Another valid line\"\n\n");
2550     verify_reg_nonexist(hkey, "Wine7");
2551     verify_reg(hkey, "Wine8", REG_SZ, "A valid line", 13, 0);
2552     verify_reg(hkey, "Wine9", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
2553     verify_reg(hkey, "Wine10", REG_SZ, "Another valid line", 19, 0);
2554 
2555     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2556                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2557                      "#\"Comment1\"=\"Value 1\"\n"
2558                      ";\"Comment2\"=\"Value 2\"\n"
2559                      "    #\"Comment3\"=\"Value 3\"\n"
2560                      "    ;\"Comment4\"=\"Value 4\"\n"
2561                      "\"Wine11\"=\"Value 6\"#\"Comment5\"=\"Value 5\"\n"
2562                      "\"Wine12\"=\"Value 7\";\"Comment6\"=\"Value 6\"\n\n");
2563     verify_reg_nonexist(hkey, "Comment1");
2564     verify_reg_nonexist(hkey, "Comment2");
2565     verify_reg_nonexist(hkey, "Comment3");
2566     verify_reg_nonexist(hkey, "Comment4");
2567     verify_reg_nonexist(hkey, "Wine11");
2568     verify_reg_nonexist(hkey, "Comment5");
2569     verify_reg(hkey, "Wine12", REG_SZ, "Value 7", 8, 0);
2570     verify_reg_nonexist(hkey, "Comment6");
2571 
2572     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2573                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2574                      "\"Wine13\"=#\"Value 8\"\n"
2575                      "\"Wine14\"=;\"Value 9\"\n"
2576                      "\"Wine15\"=\"#comment1\"\n"
2577                      "\"Wine16\"=\";comment2\"\n"
2578                      "\"Wine17\"=\"Value#comment3\"\n"
2579                      "\"Wine18\"=\"Value;comment4\"\n"
2580                      "\"Wine19\"=\"Value #comment5\"\n"
2581                      "\"Wine20\"=\"Value ;comment6\"\n"
2582                      "\"Wine21\"=#dword:00000001\n"
2583                      "\"Wine22\"=;dword:00000002\n"
2584                      "\"Wine23\"=dword:00000003#comment\n"
2585                      "\"Wine24\"=dword:00000004;comment\n\n");
2586     verify_reg_nonexist(hkey, "Wine13");
2587     verify_reg_nonexist(hkey, "Wine14");
2588     verify_reg(hkey, "Wine15", REG_SZ, "#comment1", 10, 0);
2589     verify_reg(hkey, "Wine16", REG_SZ, ";comment2", 10, 0);
2590     verify_reg(hkey, "Wine17", REG_SZ, "Value#comment3", 15, 0);
2591     verify_reg(hkey, "Wine18", REG_SZ, "Value;comment4", 15, 0);
2592     verify_reg(hkey, "Wine19", REG_SZ, "Value #comment5", 16, 0);
2593     verify_reg(hkey, "Wine20", REG_SZ, "Value ;comment6", 16, 0);
2594     verify_reg_nonexist(hkey, "Wine21");
2595     verify_reg_nonexist(hkey, "Wine22");
2596     verify_reg_nonexist(hkey, "Wine23");
2597     dword = 0x00000004;
2598     verify_reg(hkey, "Wine24", REG_DWORD, &dword, sizeof(dword), 0);
2599 
2600     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2601                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2602                      "\"Wine25a\"=dword:1234;5678\n"
2603                      "\"Wine25b\"=dword:1234 ;5678\n"
2604                      "\"Wine25c\"=dword:1234#5678\n"
2605                      "\"Wine25d\"=dword:1234 #5678\n\n");
2606     dword = 0x1234;
2607     verify_reg(hkey, "Wine25a", REG_DWORD, &dword, sizeof(dword), 0);
2608     verify_reg(hkey, "Wine25b", REG_DWORD, &dword, sizeof(dword), 0);
2609     verify_reg_nonexist(hkey, "Wine25c");
2610     verify_reg_nonexist(hkey, "Wine25d");
2611 
2612     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2613                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2614                      "\"Wine26a\"=\"Value1\"  ;comment\n"
2615                      "\"Wine26b\"=\"Value2\"\t\t;comment\n"
2616                      "\"Wine26c\"=\"Value3\"  #comment\n"
2617                      "\"Wine26d\"=\"Value4\"\t\t#comment\n\n");
2618     verify_reg(hkey, "Wine26a", REG_SZ, "Value1", 7, 0);
2619     verify_reg(hkey, "Wine26b", REG_SZ, "Value2", 7, 0);
2620     verify_reg_nonexist(hkey, "Wine26c");
2621     verify_reg_nonexist(hkey, "Wine26d");
2622 
2623     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2624                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2625                      "\"Multi-Line1\"=hex(7):4c,00,69,00,6e,00,65,00,20,00,\\\n"
2626                      "  63,00,6f,00,6e,00,\\;comment\n"
2627                      "  63,00,61,00,74,00,\\;comment\n"
2628                      "  65,00,6e,00,61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n\n");
2629     verify_reg(hkey, "Multi-Line1", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
2630 
2631     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2632                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2633                      "\"Multi-Line2\"=hex(7):4c,00,69,00,6e,00,65,00,20,00,\\\n"
2634                      "  63,00,6f,00,6e,00,\\;comment\n"
2635                      "  63,00,61,00,74,00,;comment\n"
2636                      "  65,00,6e,00,61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n\n");
2637     verify_reg(hkey, "Multi-Line2", REG_MULTI_SZ, "Line concat", 12, 0);
2638 
2639     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2640                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2641                      "\"Multi-Line3\"=hex(7):4c,00,69,00,6e,00,\\;comment\n"
2642                      "  65,00,20,00,\\;comment\n"
2643                      "  63,00,6f,00,6e,00,\\;comment\n"
2644                      "  63,00,61,00,74,00,\\;comment\n"
2645                      "  65,00,6e,00,61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n\n");
2646     verify_reg(hkey, "Multi-Line3", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
2647 
2648     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2649                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2650                      "\"Multi-Line4\"=hex(7):4c,00,69,00,6e,00,\\;#comment\n"
2651                      "  65,00,20,00,\\;#comment\n"
2652                      "  63,00,6f,00,6e,00,\\;#comment\n"
2653                      "  63,00,61,00,74,00,\\;#comment\n"
2654                      "  65,00,6e,00,61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n\n");
2655     verify_reg(hkey, "Multi-Line4", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
2656 
2657     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2658                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2659                      "\"Multi-Line5\"=hex(7):4c,00,69,00,6e,00,\\;comment\n"
2660                      "  65,00,20,00,\\;comment\n"
2661                      "  63,00,6f,00,6e,00,\\;comment\n"
2662                      "  63,00,61,00,74,00,\\#comment\n"
2663                      "  65,00,6e,00,61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n\n");
2664     verify_reg_nonexist(hkey, "Multi-Line5");
2665 
2666     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2667                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2668                      "\"Multi-Line6\"=hex(7):4c,00,69,00,6e,00,65,00,20,00,\\\n"
2669                      "  63,00,6f,00,6e,00,\\;comment\n"
2670                      "  63,00,61,00,74,00,\\\n\n"
2671                      "  65,00,6e,00,\\;comment\n\n"
2672                      "  61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n\n");
2673     verify_reg(hkey, "Multi-Line6", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
2674 
2675     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2676                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2677                      "\"Wine27a\"=hex(2):25,00,50,00,41,00,54,00,48,00,25,00,00,00  ;comment\n"
2678                      "\"Wine27b\"=hex(2):25,00,50,00,41,00,54,00,48,00,25,00,00,00\t;comment\n"
2679                      "\"Wine27c\"=hex(2):25,00,50,00,41,00,54,00,48,00,25,00,00,00  #comment\n"
2680                      "\"Wine27d\"=hex(2):25,00,50,00,41,00,54,00,48,00,25,00,00,00\t#comment\n\n");
2681     verify_reg(hkey, "Wine27a", REG_EXPAND_SZ, "%PATH%", 7, 0);
2682     verify_reg(hkey, "Wine27b", REG_EXPAND_SZ, "%PATH%", 7, 0);
2683     verify_reg_nonexist(hkey, "Wine27c");
2684     verify_reg_nonexist(hkey, "Wine27d");
2685 
2686     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2687                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2688                      "\"Wine28a\"=hex(2):25,00,48,00,4f,00,4d,00,45,00,25,00,5c,00,\\\n"
2689                      "  25,00,50,00,41,00,54,00,48,00,25,00,00,00\n"
2690                      "\"Wine28b\"=hex(2):25,00,48,00,4f,00,4d,00,45,00,25,00,5c,00\\\n"
2691                      "  25,00,50,00,41,00,54,00,48,00,25,00,00,00\n"
2692                      "\"Wine28c\"=hex(2):25,00,48,00,4f,00,4d,00,45,00,25,00,5c,00,  \\  ;comment\n"
2693                      "  25,00,50,00,41,00,54,00,48,00,25,00,00,00\n"
2694                      "\"Wine28d\"=hex(2):25,00,48,00,4f,00,4d,00,45,00,25,00,5c,00  \\  ;comment\n"
2695                      "  25,00,50,00,41,00,54,00,48,00,25,00,00,00\n"
2696                      "\"Wine28e\"=hex(2):25,00,48,00,4f,00,4d,00,45,00,25,00,5c,00,\\\t  ;comment\n"
2697                      "  25,00,50,00,41,00,54,00,48,00,25,00,00,00\n"
2698                      "\"Wine28f\"=hex(2):25,00,48,00,4f,00,4d,00,45,00,25,00,5c,00\\\t  ;comment\n"
2699                      "  25,00,50,00,41,00,54,00,48,00,25,00,00,00\n\n");
2700     verify_reg(hkey, "Wine28a", REG_EXPAND_SZ, "%HOME%\\%PATH%", 14, 0);
2701     verify_reg_nonexist(hkey, "Wine28b");
2702     verify_reg(hkey, "Wine28c", REG_EXPAND_SZ, "%HOME%\\%PATH%", 14, 0);
2703     verify_reg_nonexist(hkey, "Wine28d");
2704     verify_reg(hkey, "Wine28e", REG_EXPAND_SZ, "%HOME%\\%PATH%", 14, 0);
2705     verify_reg_nonexist(hkey, "Wine28f");
2706 
2707     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2708                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2709                      "\"Wine29a\"=hex(7):4c,00,69,00,6e,00,65,00,20,00,\\\n"
2710                      "  63,00,6f,00,6e,00,63,00,61,00,74,00,\\\n"
2711                      ";comment\n"
2712                      "  65,00,6e,00,\\;comment\n"
2713                      "  61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n\n");
2714     verify_reg(hkey, "Wine29a", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
2715 
2716     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2717                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2718                      "\"Wine29b\"=hex(7):4c,00,69,00,6e,00,65,00,20,00,\\\n"
2719                      "  63,00,6f,00,6e,00,63,00,61,00,74,00,\\\n"
2720                      "  ;comment\n"
2721                      "  65,00,6e,00,\\;comment\n"
2722                      "  61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n\n");
2723     verify_reg(hkey, "Wine29b", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
2724 
2725     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2726                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2727                      "\"Wine29c\"=hex(7):4c,00,69,00,6e,00,65,00,20,00,\\\n"
2728                      "  63,00,6f,00,6e,00,63,00,61,00,74,00,\\\n"
2729                      "#comment\n"
2730                      "  65,00,6e,00,\\;comment\n"
2731                      "  61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n\n");
2732     verify_reg_nonexist(hkey, "Wine29c");
2733 
2734     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2735                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2736                      "\"Wine29d\"=hex(7):4c,00,69,00,6e,00,65,00,20,00,\\\n"
2737                      "  63,00,6f,00,6e,00,63,00,61,00,74,00,\\\n"
2738                      "  #comment\n"
2739                      "  65,00,6e,00,\\;comment\n"
2740                      "  61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n\n");
2741     verify_reg_nonexist(hkey, "Wine29d");
2742 
2743     close_key(hkey);
2744 
2745     delete_key(HKEY_CURRENT_USER, KEY_BASE);
2746 }
2747 
test_import_with_whitespace(void)2748 static void test_import_with_whitespace(void)
2749 {
2750     HKEY hkey;
2751     DWORD dword;
2752 
2753     delete_tree(HKEY_CURRENT_USER, KEY_BASE);
2754     verify_key_nonexist(HKEY_CURRENT_USER, KEY_BASE);
2755 
2756     exec_import_str("  REGEDIT4\n\n"
2757                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n\n");
2758 
2759     open_key(HKEY_CURRENT_USER, KEY_BASE, 0, &hkey);
2760 
2761     exec_import_str("  REGEDIT4\n\n"
2762                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2763                     "\"Wine1a\"=\"Value\"\n\n");
2764     verify_reg(hkey, "Wine1a", REG_SZ, "Value", 6, 0);
2765 
2766     exec_import_str("\tREGEDIT4\n\n"
2767                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2768                     "\"Wine1b\"=\"Value\"\n\n");
2769     verify_reg(hkey, "Wine1b", REG_SZ, "Value", 6, 0);
2770 
2771     exec_import_str(" \t REGEDIT4\n\n"
2772                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2773                     "\"Wine1c\"=\"Value\"\n\n");
2774     verify_reg(hkey, "Wine1c", REG_SZ, "Value", 6, 0);
2775 
2776     exec_import_str("REGEDIT4\n\n"
2777                     "  [HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2778                     "\"Wine2a\"=\"Value\"\n\n");
2779     verify_reg(hkey, "Wine2a", REG_SZ, "Value", 6, 0);
2780 
2781     exec_import_str("REGEDIT4\n\n"
2782                     "\t[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2783                     "\"Wine2b\"=\"Value\"\n\n");
2784     verify_reg(hkey, "Wine2b", REG_SZ, "Value", 6, 0);
2785 
2786     exec_import_str("REGEDIT4\n\n"
2787                     " \t [HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2788                     "\"Wine2c\"=\"Value\"\n\n");
2789     verify_reg(hkey, "Wine2c", REG_SZ, "Value", 6, 0);
2790 
2791     exec_import_str("REGEDIT4\n\n"
2792                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2793                     "  \"Wine3a\"=\"Two leading spaces\"\n\n");
2794     verify_reg(hkey, "Wine3a", REG_SZ, "Two leading spaces", 19, 0);
2795 
2796     exec_import_str("REGEDIT4\n\n"
2797                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2798                     "\t\"Wine3b\"=\"One leading tab\"\n\n");
2799     verify_reg(hkey, "Wine3b", REG_SZ, "One leading tab", 16, 0);
2800 
2801     exec_import_str("REGEDIT4\n\n"
2802                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2803                     " \t \"Wine3c\"=\"Space, tab, space\"\n\n");
2804     verify_reg(hkey, "Wine3c", REG_SZ, "Space, tab, space", 18, 0);
2805 
2806     exec_import_str("                    REGEDIT4\n\n"
2807                     "\t\t\t[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2808                     "\t    \"Wine4a\"=\"Tab and four spaces\"\n"
2809                     "    \"Wine4b\"=dword:00112233\n"
2810                     "\t  \t  \t  \t  \t  \t  \"Wine4c\"=hex(7):4c,69,6e,65,20,\\\n"
2811                     "        63,6f,6e,\\;comment\n"
2812                     "\t\t\t\t63,61,74,\\;comment\n"
2813                     "  \t65,6e,61,74,69,6f,6e,00,00\n\n");
2814     verify_reg(hkey, "Wine4a", REG_SZ, "Tab and four spaces", 20, 0);
2815     dword = 0x112233;
2816     verify_reg(hkey, "Wine4b", REG_DWORD, &dword, sizeof(dword), 0);
2817     verify_reg(hkey, "Wine4c", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
2818 
2819     exec_import_str("    REGEDIT4\n\n"
2820                     "\t[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2821                     "  \"Wine5a\"=\"Leading spaces\"\n"
2822                     "\t\t\"Wine5b\"\t\t=\"Leading tabs\"\n"
2823                     "\t  \"Wine5c\"=\t  \"Tabs and spaces\"\n"
2824                     "    \"Wine5d\"    \t    =    \t    \"More whitespace\"\n\n");
2825     verify_reg(hkey, "Wine5a", REG_SZ, "Leading spaces", 15, 0);
2826     verify_reg(hkey, "Wine5b", REG_SZ, "Leading tabs", 13, 0);
2827     verify_reg(hkey, "Wine5c", REG_SZ, "Tabs and spaces", 16, 0);
2828     verify_reg(hkey, "Wine5d", REG_SZ, "More whitespace", 16, 0);
2829 
2830     exec_import_str("REGEDIT4\n\n"
2831                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2832                     "\"  Wine6a\"=\"Leading spaces\"\n"
2833                     "\"\t\tWine6b\"=\"Leading tabs\"\n"
2834                     "  \"  Wine6c  \"  =  \"  Spaces everywhere  \"  \n\n");
2835     verify_reg(hkey, "  Wine6a", REG_SZ, "Leading spaces", 15, 0);
2836     verify_reg(hkey, "\t\tWine6b", REG_SZ, "Leading tabs", 13, 0);
2837     verify_reg(hkey, "  Wine6c  ", REG_SZ, "  Spaces everywhere  ", 22, 0);
2838 
2839     exec_import_str("REGEDIT4\n\n"
2840                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2841                     "\"Wine7a\"=\"    Four spaces in the data\"\n"
2842                     "\"Wine7b\"=\"\t\tTwo tabs in the data\"\n\n");
2843     verify_reg(hkey, "Wine7a", REG_SZ, "    Four spaces in the data", 28, 0);
2844     verify_reg(hkey, "Wine7b", REG_SZ, "\t\tTwo tabs in the data", 23, 0);
2845 
2846     exec_import_str("REGEDIT4\n\n"
2847                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2848                     "\"Wine8a\"=\"Trailing spaces\"    \n"
2849                     "\"Wine8b\"=\"Trailing tabs and spaces\"\t  \t\n\n");
2850     verify_reg(hkey, "Wine8a", REG_SZ, "Trailing spaces", 16, 0);
2851     verify_reg(hkey, "Wine8b", REG_SZ, "Trailing tabs and spaces", 25, 0);
2852 
2853     exec_import_str("REGEDIT4\n\n"
2854                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2855                     "\"Wine9a\"=dword:  00000008\n"
2856                     "\"Wine9b\"=dword:\t\t00000008\n\n");
2857     dword = 0x00000008;
2858     verify_reg(hkey, "Wine9a", REG_DWORD, &dword, sizeof(dword), 0);
2859     verify_reg(hkey, "Wine9b", REG_DWORD, &dword, sizeof(dword), 0);
2860 
2861     exec_import_str("REGEDIT4\n\n"
2862                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2863                     "@  =  \"Test Value\"\n\n");
2864     verify_reg(hkey, "", REG_SZ, "Test Value", 11, 0);
2865 
2866     exec_import_str("REGEDIT4\n\n"
2867                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2868                     "\t@\t=\tdword:\t00000008\t\n\n");
2869     verify_reg(hkey, "", REG_DWORD, &dword, sizeof(DWORD), 0);
2870 
2871     exec_import_str("REGEDIT4\n\n"
2872                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2873                     "\"Wine10a\"=hex(7):4c,69,6e,65,20,\\\n"
2874                     "  63,6f,6e,\\\n\n"
2875                     "  63,61,74,\\\n\n\n"
2876                     "  65,6e,\\\n\n\n\n"
2877                     "  61,74,69,6f,6e,00,00\n\n");
2878     verify_reg(hkey, "Wine10a", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
2879 
2880     exec_import_str("REGEDIT4\n\n"
2881                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2882                     "\"Wine10b\"=hex(7):4c,69,6e,65,20,\\\n"
2883                     "  63,6f,6e,\\\n \n"
2884                     "  63,61,74,\\\n\t\n\t\n"
2885                     "  65,6e,\\\n\t \t\n\t \t\n\t \t\n"
2886                     "  61,74,69,6f,6e,00,00\n\n");
2887     verify_reg(hkey, "Wine10b", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
2888 
2889     close_key(hkey);
2890 
2891     delete_key(HKEY_CURRENT_USER, KEY_BASE);
2892 }
2893 
test_import_with_whitespace_unicode(void)2894 static void test_import_with_whitespace_unicode(void)
2895 {
2896     HKEY hkey;
2897     DWORD dword;
2898 
2899     delete_tree(HKEY_CURRENT_USER, KEY_BASE);
2900     verify_key_nonexist(HKEY_CURRENT_USER, KEY_BASE);
2901 
2902     exec_import_wstr("\xef\xbb\xbf  Windows Registry Editor Version 5.00\n\n"
2903                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n\n");
2904 
2905     open_key(HKEY_CURRENT_USER, KEY_BASE, 0, &hkey);
2906 
2907     exec_import_wstr("\xef\xbb\xbf  Windows Registry Editor Version 5.00\n\n"
2908                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2909                      "\"Wine1a\"=\"Value\"\n\n");
2910     verify_reg(hkey, "Wine1a", REG_SZ, "Value", 6, 0);
2911 
2912     exec_import_wstr("\xef\xbb\xbf\tWindows Registry Editor Version 5.00\n\n"
2913                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2914                      "\"Wine1b\"=\"Value\"\n\n");
2915     verify_reg(hkey, "Wine1b", REG_SZ, "Value", 6, 0);
2916 
2917     exec_import_wstr("\xef\xbb\xbf \t Windows Registry Editor Version 5.00\n\n"
2918                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2919                      "\"Wine1c\"=\"Value\"\n\n");
2920     verify_reg(hkey, "Wine1c", REG_SZ, "Value", 6, 0);
2921 
2922     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2923                      "  [HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2924                      "\"Wine2a\"=\"Value\"\n\n");
2925     verify_reg(hkey, "Wine2a", REG_SZ, "Value", 6, 0);
2926 
2927     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2928                      "\t[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2929                      "\"Wine2b\"=\"Value\"\n\n");
2930     verify_reg(hkey, "Wine2b", REG_SZ, "Value", 6, 0);
2931 
2932     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2933                      " \t [HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2934                      "\"Wine2c\"=\"Value\"\n\n");
2935     verify_reg(hkey, "Wine2c", REG_SZ, "Value", 6, 0);
2936 
2937     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2938                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2939                      "  \"Wine3a\"=\"Two leading spaces\"\n\n");
2940     verify_reg(hkey, "Wine3a", REG_SZ, "Two leading spaces", 19, 0);
2941 
2942     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2943                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2944                      "\t\"Wine3b\"=\"One leading tab\"\n\n");
2945     verify_reg(hkey, "Wine3b", REG_SZ, "One leading tab", 16, 0);
2946 
2947     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2948                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2949                      " \t \"Wine3c\"=\"Space, tab, space\"\n\n");
2950     verify_reg(hkey, "Wine3c", REG_SZ, "Space, tab, space", 18, 0);
2951 
2952     exec_import_wstr("\xef\xbb\xbf                    Windows Registry Editor Version 5.00\n\n"
2953                      "\t\t\t[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2954                      "\t    \"Wine4a\"=\"Tab and four spaces\"\n"
2955                      "    \"Wine4b\"=dword:00112233\n"
2956                      "\t  \t  \t  \t  \t  \t  \"Wine4c\"=hex(7):4c,00,69,00,6e,00,65,00,20,00,\\\n"
2957                      "        63,00,6f,00,6e,00,\\;comment\n"
2958                      "\t\t\t\t63,00,61,00,74,00,\\;comment\n"
2959                      "  \t65,00,6e,00,61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n\n");
2960     verify_reg(hkey, "Wine4a", REG_SZ, "Tab and four spaces", 20, 0);
2961     dword = 0x112233;
2962     verify_reg(hkey, "Wine4b", REG_DWORD, &dword, sizeof(dword), 0);
2963     verify_reg(hkey, "Wine4c", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
2964 
2965     exec_import_wstr("\xef\xbb\xbf    Windows Registry Editor Version 5.00\n\n"
2966                      "\t[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2967                      "  \"Wine5a\"=\"Leading spaces\"\n"
2968                      "\t\t\"Wine5b\"\t\t=\"Leading tabs\"\n"
2969                      "\t  \"Wine5c\"=\t  \"Tabs and spaces\"\n"
2970                      "    \"Wine5d\"    \t    =    \t    \"More whitespace\"\n\n");
2971     verify_reg(hkey, "Wine5a", REG_SZ, "Leading spaces", 15, 0);
2972     verify_reg(hkey, "Wine5b", REG_SZ, "Leading tabs", 13, 0);
2973     verify_reg(hkey, "Wine5c", REG_SZ, "Tabs and spaces", 16, 0);
2974     verify_reg(hkey, "Wine5d", REG_SZ, "More whitespace", 16, 0);
2975 
2976     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2977                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2978                      "\"  Wine6a\"=\"Leading spaces\"\n"
2979                      "\"\t\tWine6b\"=\"Leading tabs\"\n"
2980                      "  \"  Wine6c  \"  =  \"  Spaces everywhere  \"  \n\n");
2981     verify_reg(hkey, "  Wine6a", REG_SZ, "Leading spaces", 15, 0);
2982     verify_reg(hkey, "\t\tWine6b", REG_SZ, "Leading tabs", 13, 0);
2983     verify_reg(hkey, "  Wine6c  ", REG_SZ, "  Spaces everywhere  ", 22, 0);
2984 
2985     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2986                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2987                      "\"Wine7a\"=\"    Four spaces in the data\"\n"
2988                      "\"Wine7b\"=\"\t\tTwo tabs in the data\"\n\n");
2989     verify_reg(hkey, "Wine7a", REG_SZ, "    Four spaces in the data", 28, 0);
2990     verify_reg(hkey, "Wine7b", REG_SZ, "\t\tTwo tabs in the data", 23, 0);
2991 
2992     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2993                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
2994                      "\"Wine8a\"=\"Trailing spaces\"    \n"
2995                      "\"Wine8b\"=\"Trailing tabs and spaces\"\t  \t\n\n");
2996     verify_reg(hkey, "Wine8a", REG_SZ, "Trailing spaces", 16, 0);
2997     verify_reg(hkey, "Wine8b", REG_SZ, "Trailing tabs and spaces", 25, 0);
2998 
2999     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3000                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
3001                      "\"Wine9a\"=dword:  00000008\n"
3002                      "\"Wine9b\"=dword:\t\t00000008\n\n");
3003     dword = 0x00000008;
3004     verify_reg(hkey, "Wine9a", REG_DWORD, &dword, sizeof(dword), 0);
3005     verify_reg(hkey, "Wine9b", REG_DWORD, &dword, sizeof(dword), 0);
3006 
3007     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3008                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
3009                      "@  =  \"Test Value\"\n\n");
3010     verify_reg(hkey, "", REG_SZ, "Test Value", 11, 0);
3011 
3012     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3013                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
3014                      "\t@\t=\tdword:\t00000008\t\n\n");
3015     verify_reg(hkey, "", REG_DWORD, &dword, sizeof(DWORD), 0);
3016 
3017     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3018                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
3019                      "\"Wine10a\"=hex(7):4c,00,69,00,6e,00,65,00,20,00,\\\n"
3020                      "  63,00,6f,00,6e,00,\\\n\n"
3021                      "  63,00,61,00,74,00,\\\n\n\n"
3022                      "  65,00,6e,00,\\\n\n\n\n"
3023                      "  61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n\n");
3024     verify_reg(hkey, "Wine10a", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
3025 
3026     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3027                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
3028                      "\"Wine10b\"=hex(7):4c,00,69,00,6e,00,65,00,20,00,\\\n"
3029                      "  63,00,6f,00,6e,00,\\\n \n"
3030                      "  63,00,61,00,74,00,\\\n\t\n\t\n"
3031                      "  65,00,6e,00,\\\n\t \t\n\t \t\n\t \t\n"
3032                      "  61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n\n");
3033     verify_reg(hkey, "Wine10b", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
3034 
3035     close_key(hkey);
3036 
3037     delete_key(HKEY_CURRENT_USER, KEY_BASE);
3038 }
3039 
test_key_creation_and_deletion(void)3040 static void test_key_creation_and_deletion(void)
3041 {
3042     HKEY hkey, subkey;
3043 
3044     delete_tree(HKEY_CURRENT_USER, KEY_BASE);
3045     verify_key_nonexist(HKEY_CURRENT_USER, KEY_BASE);
3046 
3047     exec_import_str("REGEDIT4\n\n"
3048                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n\n");
3049 
3050     open_key(HKEY_CURRENT_USER, KEY_BASE, 0, &hkey);
3051 
3052     /* Test key creation */
3053     exec_import_str("REGEDIT4\n\n"
3054                     "HKEY_CURRENT_USER\\" KEY_BASE "\\No_Opening_Bracket]\n");
3055     verify_key_nonexist(hkey, "No_Opening_Bracket");
3056 
3057     exec_import_str("REGEDIT4\n\n"
3058                     "[HKEY_CURRENT_USER\\" KEY_BASE "\\No_Closing_Bracket\n");
3059     verify_key_nonexist(hkey, "No_Closing_Bracket");
3060 
3061     exec_import_str("REGEDIT4\n\n"
3062                     "[ HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey1a]\n");
3063     verify_key_nonexist(hkey, "Subkey1a");
3064 
3065     exec_import_str("REGEDIT4\n\n"
3066                     "[\tHKEY_CURRENT_USER\\" KEY_BASE "\\Subkey1b]\n");
3067     verify_key_nonexist(hkey, "Subkey1b");
3068 
3069     exec_import_str("REGEDIT4\n\n"
3070                     "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey1c ]\n");
3071     verify_key(hkey, "Subkey1c ");
3072     delete_key(hkey, "Subkey1c ");
3073 
3074     exec_import_str("REGEDIT4\n\n"
3075                     "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey1d\t]\n");
3076     verify_key(hkey, "Subkey1d\t");
3077     delete_key(hkey, "Subkey1d\t");
3078 
3079     exec_import_str("REGEDIT4\n\n"
3080                     "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey1e\\]\n"
3081                     "\"Wine\"=\"Test value\"\n\n");
3082     verify_key(hkey, "Subkey1e\\");
3083     verify_key(hkey, "Subkey1e");
3084     open_key(hkey, "Subkey1e", 0, &subkey);
3085     verify_reg(subkey, "Wine", REG_SZ, "Test value", 11, 0);
3086     close_key(subkey);
3087     delete_key(hkey, "Subkey1e");
3088 
3089     exec_import_str("REGEDIT4\n\n"
3090                     "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey1f\\\\]\n"
3091                     "\"Wine\"=\"Test value\"\n\n");
3092     verify_key(hkey, "Subkey1f\\\\");
3093     verify_key(hkey, "Subkey1f\\");
3094     verify_key(hkey, "Subkey1f");
3095     open_key(hkey, "Subkey1f\\\\", 0, &subkey);
3096     verify_reg(subkey, "Wine", REG_SZ, "Test value", 11, 0);
3097     close_key(subkey);
3098     delete_key(hkey, "Subkey1f\\\\");
3099 
3100     exec_import_str("REGEDIT4\n\n"
3101                     "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey1g\\\\\\\\]\n"
3102                     "\"Wine\"=\"Test value\"\n\n");
3103     verify_key(hkey, "Subkey1g\\\\\\\\");
3104     verify_key(hkey, "Subkey1g\\\\");
3105     verify_key(hkey, "Subkey1g\\");
3106     verify_key(hkey, "Subkey1g");
3107     open_key(hkey, "Subkey1g\\\\", 0, &subkey);
3108     verify_reg(subkey, "Wine", REG_SZ, "Test value", 11, 0);
3109     close_key(subkey);
3110     delete_key(hkey, "Subkey1g\\\\");
3111 
3112     /* Test key deletion. We start by creating some registry keys. */
3113     exec_import_str("REGEDIT4\n\n"
3114                     "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey2a]\n\n"
3115                     "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey2b]\n\n");
3116     verify_key(hkey, "Subkey2a");
3117     verify_key(hkey, "Subkey2b");
3118 
3119     exec_import_str("REGEDIT4\n\n"
3120                     "[ -HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey2a]\n");
3121     verify_key(hkey, "Subkey2a");
3122 
3123     exec_import_str("REGEDIT4\n\n"
3124                     "[\t-HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey2b]\n");
3125     verify_key(hkey, "Subkey2b");
3126 
3127     exec_import_str("REGEDIT4\n\n"
3128                     "[- HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey2a]\n");
3129     verify_key(hkey, "Subkey2a");
3130 
3131     exec_import_str("REGEDIT4\n\n"
3132                     "[-\tHKEY_CURRENT_USER\\" KEY_BASE "\\Subkey2b]\n");
3133     verify_key(hkey, "Subkey2b");
3134 
3135     exec_import_str("REGEDIT4\n\n"
3136                     "[-HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey2a]\n\n"
3137                     "[-HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey2b]\n\n");
3138     verify_key_nonexist(hkey, "Subkey2a");
3139     verify_key_nonexist(hkey, "Subkey2b");
3140 
3141     /* Test case sensitivity when creating and deleting registry keys. */
3142     exec_import_str("REGEDIT4\n\n"
3143                     "[hkey_CURRENT_user\\" KEY_BASE "\\Subkey3a]\n\n"
3144                     "[HkEy_CuRrEnT_uSeR\\" KEY_BASE "\\SuBkEy3b]\n\n");
3145     verify_key(hkey, "Subkey3a");
3146     verify_key(hkey, "Subkey3b");
3147 
3148     exec_import_str("REGEDIT4\n\n"
3149                     "[-HKEY_current_USER\\" KEY_BASE "\\sUBKEY3A]\n\n"
3150                     "[-hKeY_cUrReNt_UsEr\\" KEY_BASE "\\sUbKeY3B]\n\n");
3151     verify_key_nonexist(hkey, "Subkey3a");
3152     verify_key_nonexist(hkey, "Subkey3b");
3153 
3154     /* Test mixed key creation and deletion. We start by creating a subkey. */
3155     exec_import_str("REGEDIT4\n\n"
3156                     "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey4a]\n\n");
3157     verify_key(hkey, "Subkey4a");
3158 
3159     exec_import_str("REGEDIT4\n\n"
3160                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n\n"
3161                     "[-HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey4a]\n"
3162                     "\"Wine1a\"=dword:12345678\n\n");
3163     verify_key_nonexist(hkey, "Subkey4a");
3164     verify_reg_nonexist(hkey, "Wine1a");
3165 
3166     exec_import_str("REGEDIT4\n\n"
3167                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n\n"
3168                     "[HKEY_CURRENT_USERS\\" KEY_BASE "\\Subkey4b]\n"
3169                     "\"Wine1b\"=dword:12345678\n\n");
3170     verify_key_nonexist(hkey, "Subkey4b");
3171     verify_reg_nonexist(hkey, "Wine1b");
3172 
3173     close_key(hkey);
3174 
3175     delete_key(HKEY_CURRENT_USER, KEY_BASE);
3176 }
3177 
test_key_creation_and_deletion_unicode(void)3178 static void test_key_creation_and_deletion_unicode(void)
3179 {
3180     HKEY hkey, subkey;
3181 
3182     delete_tree(HKEY_CURRENT_USER, KEY_BASE);
3183     verify_key_nonexist(HKEY_CURRENT_USER, KEY_BASE);
3184 
3185     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3186                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n\n");
3187 
3188     open_key(HKEY_CURRENT_USER, KEY_BASE, 0, &hkey);
3189 
3190     /* Test key creation */
3191     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3192                      "HKEY_CURRENT_USER\\" KEY_BASE "\\No_Opening_Bracket]\n");
3193     verify_key_nonexist(hkey, "No_Opening_Bracket");
3194 
3195     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3196                      "[HKEY_CURRENT_USER\\" KEY_BASE "\\No_Closing_Bracket\n");
3197     verify_key_nonexist(hkey, "No_Closing_Bracket");
3198 
3199     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3200                      "[ HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey1a]\n");
3201     verify_key_nonexist(hkey, "Subkey1a");
3202 
3203     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3204                      "[\tHKEY_CURRENT_USER\\" KEY_BASE "\\Subkey1b]\n");
3205     verify_key_nonexist(hkey, "Subkey1b");
3206 
3207     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3208                      "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey1c ]\n");
3209     verify_key(hkey, "Subkey1c ");
3210     delete_key(hkey, "Subkey1c ");
3211 
3212     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3213                      "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey1d\t]\n");
3214     verify_key(hkey, "Subkey1d\t");
3215     delete_key(hkey, "Subkey1d\t");
3216 
3217     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3218                      "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey1e\\]\n"
3219                      "\"Wine\"=\"Test value\"\n\n");
3220     verify_key(hkey, "Subkey1e\\");
3221     verify_key(hkey, "Subkey1e");
3222     open_key(hkey, "Subkey1e", 0, &subkey);
3223     verify_reg(subkey, "Wine", REG_SZ, "Test value", 11, 0);
3224     close_key(subkey);
3225     delete_key(hkey, "Subkey1e");
3226 
3227     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3228                      "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey1f\\\\]\n"
3229                      "\"Wine\"=\"Test value\"\n\n");
3230     verify_key(hkey, "Subkey1f\\\\");
3231     verify_key(hkey, "Subkey1f\\");
3232     verify_key(hkey, "Subkey1f");
3233     open_key(hkey, "Subkey1f\\\\", 0, &subkey);
3234     verify_reg(subkey, "Wine", REG_SZ, "Test value", 11, 0);
3235     close_key(subkey);
3236     delete_key(hkey, "Subkey1f\\\\");
3237 
3238     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3239                      "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey1g\\\\\\\\]\n"
3240                      "\"Wine\"=\"Test value\"\n\n");
3241     verify_key(hkey, "Subkey1g\\\\\\\\");
3242     verify_key(hkey, "Subkey1g\\\\");
3243     verify_key(hkey, "Subkey1g\\");
3244     verify_key(hkey, "Subkey1g");
3245     open_key(hkey, "Subkey1g\\\\", 0, &subkey);
3246     verify_reg(subkey, "Wine", REG_SZ, "Test value", 11, 0);
3247     close_key(subkey);
3248     delete_key(hkey, "Subkey1g\\\\");
3249 
3250     /* Test key deletion. We start by creating some registry keys. */
3251     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3252                      "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey2a]\n\n"
3253                      "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey2b]\n\n");
3254     verify_key(hkey, "Subkey2a");
3255     verify_key(hkey, "Subkey2b");
3256 
3257     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3258                      "[ -HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey2a]\n");
3259     verify_key(hkey, "Subkey2a");
3260 
3261     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3262                      "[\t-HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey2b]\n");
3263     verify_key(hkey, "Subkey2b");
3264 
3265     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3266                      "[- HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey2a]\n");
3267     verify_key(hkey, "Subkey2a");
3268 
3269     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3270                      "[-\tHKEY_CURRENT_USER\\" KEY_BASE "\\Subkey2b]\n");
3271     verify_key(hkey, "Subkey2b");
3272 
3273     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3274                      "[-HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey2a]\n\n"
3275                      "[-HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey2b]\n\n");
3276     verify_key_nonexist(hkey, "Subkey2a");
3277     verify_key_nonexist(hkey, "Subkey2b");
3278 
3279     /* Test case sensitivity when creating and deleting registry keys. */
3280     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3281                      "[hkey_CURRENT_user\\" KEY_BASE "\\Subkey3a]\n\n"
3282                      "[HkEy_CuRrEnT_uSeR\\" KEY_BASE "\\SuBkEy3b]\n\n");
3283     verify_key(hkey, "Subkey3a");
3284     verify_key(hkey, "Subkey3b");
3285 
3286     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3287                      "[-HKEY_current_USER\\" KEY_BASE "\\sUBKEY3A]\n\n"
3288                      "[-hKeY_cUrReNt_UsEr\\" KEY_BASE "\\sUbKeY3B]\n\n");
3289     verify_key_nonexist(hkey, "Subkey3a");
3290     verify_key_nonexist(hkey, "Subkey3b");
3291 
3292     /* Test mixed key creation and deletion. We start by creating a subkey. */
3293     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3294                      "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey4a]\n\n");
3295     verify_key(hkey, "Subkey4a");
3296 
3297     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3298                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n\n"
3299                      "[-HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey4a]\n"
3300                      "\"Wine1a\"=dword:12345678\n\n");
3301     verify_key_nonexist(hkey, "Subkey4a");
3302     verify_reg_nonexist(hkey, "Wine1a");
3303 
3304     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3305                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n\n"
3306                      "[HKEY_CURRENT_USERS\\" KEY_BASE "\\Subkey4b]\n"
3307                      "\"Wine1b\"=dword:12345678\n\n");
3308     verify_key_nonexist(hkey, "Subkey4b");
3309     verify_reg_nonexist(hkey, "Wine1b");
3310 
3311     close_key(hkey);
3312 
3313     delete_key(HKEY_CURRENT_USER, KEY_BASE);
3314 }
3315 
test_value_deletion(void)3316 static void test_value_deletion(void)
3317 {
3318     HKEY hkey;
3319     DWORD dword = 0x8;
3320     BYTE hex[4] = {0x11, 0x22, 0x33, 0x44};
3321 
3322     delete_tree(HKEY_CURRENT_USER, KEY_BASE);
3323     verify_key_nonexist(HKEY_CURRENT_USER, KEY_BASE);
3324 
3325     exec_import_str("REGEDIT4\n\n"
3326                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n\n");
3327 
3328     open_key(HKEY_CURRENT_USER, KEY_BASE, 0, &hkey);
3329 
3330     /* Test value deletion. We start by creating some registry values. */
3331     exec_import_str("REGEDIT4\n\n"
3332                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
3333                     "\"Wine46a\"=\"Test Value\"\n"
3334                     "\"Wine46b\"=dword:00000008\n"
3335                     "\"Wine46c\"=hex:11,22,33,44\n"
3336                     "\"Wine46d\"=hex(7):4c,69,6e,65,20,\\\n"
3337                     "  63,6f,6e,63,61,74,65,6e,61,74,69,6f,6e,00,00\n"
3338                     "\"Wine46e\"=hex(2):25,50,41,54,48,25,00\n"
3339                     "\"Wine46f\"=hex(0):56,00,61,00,6c,00,75,00,65,00,00,00\n\n");
3340     verify_reg(hkey, "Wine46a", REG_SZ, "Test Value", 11, 0);
3341     verify_reg(hkey, "Wine46b", REG_DWORD, &dword, sizeof(dword), 0);
3342     verify_reg(hkey, "Wine46c", REG_BINARY, hex, 4, 0);
3343     verify_reg(hkey, "Wine46d", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
3344     verify_reg(hkey, "Wine46e", REG_EXPAND_SZ, "%PATH%", 7, 0);
3345     verify_reg(hkey, "Wine46f", REG_NONE, "V\0a\0l\0u\0e\0\0", 12, 0);
3346 
3347     exec_import_str("REGEDIT4\n\n"
3348                     "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
3349                     "\"Wine46a\"=-\n"
3350                     "\"Wine46b\"=  -\n"
3351                     "\"Wine46c\"=  \t-\t  \n"
3352                     "\"Wine46d\"=-\"Test\"\n"
3353                     "\"Wine46e\"=- ;comment\n"
3354                     "\"Wine46f\"=- #comment\n\n");
3355     verify_reg_nonexist(hkey, "Wine46a");
3356     verify_reg_nonexist(hkey, "Wine46b");
3357     verify_reg_nonexist(hkey, "Wine46c");
3358     verify_reg(hkey, "Wine46d", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
3359     verify_reg_nonexist(hkey, "Wine46e");
3360     verify_reg(hkey, "Wine46f", REG_NONE, "V\0a\0l\0u\0e\0\0", 12, 0);
3361 
3362     close_key(hkey);
3363 
3364     delete_key(HKEY_CURRENT_USER, KEY_BASE);
3365 }
3366 
3367 
test_value_deletion_unicode(void)3368 static void test_value_deletion_unicode(void)
3369 {
3370     HKEY hkey;
3371     DWORD dword = 0x8;
3372     BYTE hex[4] = {0x11, 0x22, 0x33, 0x44};
3373 
3374     delete_tree(HKEY_CURRENT_USER, KEY_BASE);
3375     verify_key_nonexist(HKEY_CURRENT_USER, KEY_BASE);
3376 
3377     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3378                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n\n");
3379 
3380     open_key(HKEY_CURRENT_USER, KEY_BASE, 0, &hkey);
3381 
3382     /* Test value deletion. We start by creating some registry values. */
3383     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3384                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
3385                      "\"Wine46a\"=\"Test Value\"\n"
3386                      "\"Wine46b\"=dword:00000008\n"
3387                      "\"Wine46c\"=hex:11,22,33,44\n"
3388                      "\"Wine46d\"=hex(7):4c,00,69,00,6e,00,65,00,20,00,\\\n"
3389                      "  63,00,6f,00,6e,00,63,00,61,00,74,00,\\\n"
3390                      "  65,00,6e,00,61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n"
3391                      "\"Wine46e\"=hex(2):25,00,50,00,41,00,54,00,48,00,25,00,00,00\n"
3392                      "\"Wine46f\"=hex(0):56,00,61,00,6c,00,75,00,65,00,00,00\n\n");
3393     verify_reg(hkey, "Wine46a", REG_SZ, "Test Value", 11, 0);
3394     verify_reg(hkey, "Wine46b", REG_DWORD, &dword, sizeof(dword), 0);
3395     verify_reg(hkey, "Wine46c", REG_BINARY, hex, 4, 0);
3396     verify_reg(hkey, "Wine46d", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
3397     verify_reg(hkey, "Wine46e", REG_EXPAND_SZ, "%PATH%", 7, 0);
3398     verify_reg(hkey, "Wine46f", REG_NONE, "V\0a\0l\0u\0e\0\0", 12, 0);
3399 
3400     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3401                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
3402                      "\"Wine46a\"=-\n"
3403                      "\"Wine46b\"=  -\n"
3404                      "\"Wine46c\"=  \t-\t  \n"
3405                      "\"Wine46d\"=-\"Test\"\n"
3406                      "\"Wine46e\"=- ;comment\n"
3407                      "\"Wine46f\"=- #comment\n\n");
3408     verify_reg_nonexist(hkey, "Wine46a");
3409     verify_reg_nonexist(hkey, "Wine46b");
3410     verify_reg_nonexist(hkey, "Wine46c");
3411     verify_reg(hkey, "Wine46d", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
3412     verify_reg_nonexist(hkey, "Wine46e");
3413     verify_reg(hkey, "Wine46f", REG_NONE, "V\0a\0l\0u\0e\0\0", 12, 0);
3414 
3415     close_key(hkey);
3416 
3417     delete_key(HKEY_CURRENT_USER, KEY_BASE);
3418 }
3419 
3420 #define compare_export(f,e,todo) compare_export_(__LINE__,f,e,todo)
compare_export_(unsigned line,const char * filename,const char * expected,DWORD todo)3421 static BOOL compare_export_(unsigned line, const char *filename, const char *expected, DWORD todo)
3422 {
3423     FILE *fp;
3424     long file_size;
3425     WCHAR *fbuf = NULL, *wstr = NULL;
3426     size_t len;
3427     BOOL ret = FALSE;
3428 
3429     fp = fopen(filename, "rb");
3430     if (!fp) return FALSE;
3431 
3432     if (fseek(fp, 0, SEEK_END)) goto error;
3433     file_size = ftell(fp);
3434     if (file_size == -1) goto error;
3435     rewind(fp);
3436 
3437     fbuf = HeapAlloc(GetProcessHeap(), 0, file_size + sizeof(WCHAR));
3438     if (!fbuf) goto error;
3439 
3440     fread(fbuf, file_size, 1, fp);
3441     fbuf[file_size/sizeof(WCHAR)] = 0;
3442     fclose(fp);
3443 
3444     len = MultiByteToWideChar(CP_UTF8, 0, expected, -1, NULL, 0);
3445     wstr = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
3446     if (!wstr) goto exit;
3447     MultiByteToWideChar(CP_UTF8, 0, expected, -1, wstr, len);
3448 
3449     todo_wine_if (todo & TODO_REG_COMPARE)
3450         lok(!lstrcmpW(fbuf, wstr), "export data does not match expected data\n");
3451 
3452     ret = DeleteFileA(filename);
3453     lok(ret, "DeleteFile failed: %u\n", GetLastError());
3454 
3455 exit:
3456     HeapFree(GetProcessHeap(), 0, fbuf);
3457     HeapFree(GetProcessHeap(), 0, wstr);
3458     return ret;
3459 
3460 error:
3461     fclose(fp);
3462     return FALSE;
3463 }
3464 
test_export(void)3465 static void test_export(void)
3466 {
3467     HKEY hkey, subkey;
3468     DWORD dword;
3469     BYTE hex[4];
3470 
3471     const char *empty_key_test =
3472         "\xef\xbb\xbfWindows Registry Editor Version 5.00\r\n\r\n"
3473         "[HKEY_CURRENT_USER\\" KEY_BASE "]\r\n\r\n";
3474 
3475     const char *simple_test =
3476         "\xef\xbb\xbfWindows Registry Editor Version 5.00\r\n\r\n"
3477         "[HKEY_CURRENT_USER\\" KEY_BASE "]\r\n"
3478         "\"DWORD\"=dword:00000100\r\n"
3479         "\"String\"=\"Your text here...\"\r\n\r\n";
3480 
3481     const char *complex_test =
3482         "\xef\xbb\xbfWindows Registry Editor Version 5.00\r\n\r\n"
3483         "[HKEY_CURRENT_USER\\" KEY_BASE "]\r\n"
3484         "\"DWORD\"=dword:00000100\r\n"
3485         "\"String\"=\"Your text here...\"\r\n\r\n"
3486         "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey1]\r\n"
3487         "\"Binary\"=hex:11,22,33,44\r\n"
3488         "\"Undefined hex\"=hex(100):25,50,41,54,48,25,00\r\n\r\n"
3489         "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey2a]\r\n"
3490         "\"double\\\"quote\"=\"\\\"Hello, World!\\\"\"\r\n"
3491         "\"single'quote\"=dword:00000008\r\n\r\n"
3492         "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey2a\\Subkey2b]\r\n"
3493         "@=\"Default value name\"\r\n"
3494         "\"Multiple strings\"=hex(7):4c,00,69,00,6e,00,65,00,31,00,00,00,4c,00,69,00,6e,\\\r\n"
3495         "  00,65,00,32,00,00,00,4c,00,69,00,6e,00,65,00,33,00,00,00,00,00\r\n\r\n"
3496         "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey3a]\r\n"
3497         "\"Backslash\"=\"Use \\\\\\\\ to escape a backslash\"\r\n\r\n"
3498         "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey3a\\Subkey3b]\r\n\r\n"
3499         "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey3a\\Subkey3b\\Subkey3c]\r\n"
3500         "\"String expansion\"=hex(2):25,00,48,00,4f,00,4d,00,45,00,25,00,5c,00,25,00,50,\\\r\n"
3501         "  00,41,00,54,00,48,00,25,00,00,00\r\n"
3502         "\"Zero data type\"=hex(0):56,61,6c,75,65,00\r\n\r\n"
3503         "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey4]\r\n"
3504         "@=dword:12345678\r\n"
3505         "\"43981\"=hex(abcd):56,61,6c,75,65,00\r\n\r\n";
3506 
3507     const char *key_order_test =
3508         "\xef\xbb\xbfWindows Registry Editor Version 5.00\r\n\r\n"
3509         "[HKEY_CURRENT_USER\\" KEY_BASE "]\r\n\r\n"
3510         "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey1]\r\n\r\n"
3511         "[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey2]\r\n\r\n";
3512 
3513     const char *value_order_test =
3514         "\xef\xbb\xbfWindows Registry Editor Version 5.00\r\n\r\n"
3515         "[HKEY_CURRENT_USER\\" KEY_BASE "]\r\n"
3516         "\"Value 2\"=\"I was added first!\"\r\n"
3517         "\"Value 1\"=\"I was added second!\"\r\n\r\n";
3518 
3519     const char *empty_hex_test =
3520         "\xef\xbb\xbfWindows Registry Editor Version 5.00\r\n\r\n"
3521         "[HKEY_CURRENT_USER\\" KEY_BASE "]\r\n"
3522         "\"Wine1a\"=hex(0):\r\n"
3523         "\"Wine1b\"=\"\"\r\n"
3524         "\"Wine1c\"=hex(2):\r\n"
3525         "\"Wine1d\"=hex:\r\n"
3526         "\"Wine1e\"=hex(4):\r\n"
3527         "\"Wine1f\"=hex(7):\r\n"
3528         "\"Wine1g\"=hex(100):\r\n"
3529         "\"Wine1h\"=hex(abcd):\r\n\r\n";
3530 
3531     const char *empty_hex_test2 =
3532         "\xef\xbb\xbfWindows Registry Editor Version 5.00\r\n\r\n"
3533         "[HKEY_CURRENT_USER\\" KEY_BASE "]\r\n"
3534         "\"Wine2a\"=\"\"\r\n"
3535         "\"Wine2b\"=hex:\r\n"
3536         "\"Wine2c\"=hex(4):\r\n\r\n";
3537 
3538     const char *hex_types_test =
3539         "\xef\xbb\xbfWindows Registry Editor Version 5.00\r\n\r\n"
3540         "[HKEY_CURRENT_USER\\" KEY_BASE "]\r\n"
3541         "\"Wine3a\"=\"Value\"\r\n"
3542         "\"Wine3b\"=hex:12,34,56,78\r\n"
3543         "\"Wine3c\"=dword:10203040\r\n\r\n";
3544 
3545     const char *embedded_null_test =
3546         "\xef\xbb\xbfWindows Registry Editor Version 5.00\r\n\r\n"
3547         "[HKEY_CURRENT_USER\\" KEY_BASE "]\r\n"
3548         "\"Wine4a\"=dword:00000005\r\n"
3549         "\"Wine4b\"=\"\"\r\n"
3550         "\"Wine4c\"=\"Value\"\r\n"
3551         "\"Wine4d\"=\"\"\r\n"
3552         "\"Wine4e\"=dword:00000100\r\n"
3553         "\"Wine4f\"=\"\"\r\n"
3554         "\"Wine4g\"=\"Value2\"\r\n"
3555         "\"Wine4h\"=\"abc\"\r\n\r\n";
3556 
3557     const char *slashes_test =
3558         "\xef\xbb\xbfWindows Registry Editor Version 5.00\r\n\r\n"
3559         "[HKEY_CURRENT_USER\\" KEY_BASE "]\r\n"
3560         "\"count/up\"=\"one/two/three\"\r\n"
3561         "\"\\\\foo\\\\bar\"=\"\"\r\n\r\n"
3562         "[HKEY_CURRENT_USER\\" KEY_BASE "\\https://winehq.org]\r\n\r\n";
3563 
3564     const char *escaped_null_test =
3565         "\xef\xbb\xbfWindows Registry Editor Version 5.00\r\n\r\n"
3566         "[HKEY_CURRENT_USER\\" KEY_BASE "]\r\n"
3567         "\"Wine5a\"=\"\\\\0\"\r\n"
3568         "\"Wine5b\"=\"\\\\0\\\\0\"\r\n"
3569         "\"Wine5c\"=\"Value1\\\\0\"\r\n"
3570         "\"Wine5d\"=\"Value2\\\\0\\\\0\\\\0\\\\0\"\r\n"
3571         "\"Wine5e\"=\"Value3\\\\0Value4\"\r\n"
3572         "\"Wine5f\"=\"\\\\0Value5\"\r\n\r\n";
3573 
3574     delete_tree(HKEY_CURRENT_USER, KEY_BASE);
3575     verify_key_nonexist(HKEY_CURRENT_USER, KEY_BASE);
3576 
3577     /* Test registry export with an empty key */
3578     add_key(HKEY_CURRENT_USER, KEY_BASE, &hkey);
3579 
3580     run_regedit_exe("regedit.exe /e file.reg HKEY_CURRENT_USER\\" KEY_BASE);
3581     ok(compare_export("file.reg", empty_key_test, 0), "compare_export() failed\n");
3582 
3583     /* Test registry export with a simple data structure */
3584     dword = 0x100;
3585     add_value(hkey, "DWORD", REG_DWORD, &dword, sizeof(dword));
3586     add_value(hkey, "String", REG_SZ, "Your text here...", 18);
3587 
3588     run_regedit_exe("regedit.exe /e file.reg HKEY_CURRENT_USER\\" KEY_BASE);
3589     ok(compare_export("file.reg", simple_test, 0), "compare_export() failed\n");
3590 
3591     /* Test registry export with a complex data structure */
3592     add_key(hkey, "Subkey1", &subkey);
3593     add_value(subkey, "Binary", REG_BINARY, "\x11\x22\x33\x44", 4);
3594     add_value(subkey, "Undefined hex", 0x100, "%PATH%", 7);
3595     close_key(subkey);
3596 
3597     add_key(hkey, "Subkey2a", &subkey);
3598     add_value(subkey, "double\"quote", REG_SZ, "\"Hello, World!\"", 16);
3599     dword = 0x8;
3600     add_value(subkey, "single'quote", REG_DWORD, &dword, sizeof(dword));
3601     close_key(subkey);
3602 
3603     add_key(hkey, "Subkey2a\\Subkey2b", &subkey);
3604     add_value(subkey, NULL, REG_SZ, "Default value name", 19);
3605     add_value(subkey, "Multiple strings", REG_MULTI_SZ, "Line1\0Line2\0Line3\0", 19);
3606     close_key(subkey);
3607 
3608     add_key(hkey, "Subkey3a", &subkey);
3609     add_value(subkey, "Backslash", REG_SZ, "Use \\\\ to escape a backslash", 29);
3610     close_key(subkey);
3611 
3612     add_key(hkey, "Subkey3a\\Subkey3b\\Subkey3c", &subkey);
3613     add_value(subkey, "String expansion", REG_EXPAND_SZ, "%HOME%\\%PATH%", 14);
3614     add_value(subkey, "Zero data type", REG_NONE, "Value", 6);
3615     close_key(subkey);
3616 
3617     add_key(hkey, "Subkey4", &subkey);
3618     dword = 0x12345678;
3619     add_value(subkey, NULL, REG_DWORD, &dword, sizeof(dword));
3620     add_value(subkey, "43981", 0xabcd, "Value", 6);
3621     close_key(subkey);
3622     close_key(hkey);
3623 
3624     run_regedit_exe("regedit.exe /e file.reg HKEY_CURRENT_USER\\" KEY_BASE);
3625     ok(compare_export("file.reg", complex_test, 0), "compare_export() failed\n");
3626     delete_tree(HKEY_CURRENT_USER, KEY_BASE);
3627 
3628     /* Test the export order of registry keys */
3629     add_key(HKEY_CURRENT_USER, KEY_BASE, &hkey);
3630     add_key(hkey, "Subkey2", &subkey);
3631     close_key(subkey);
3632     add_key(hkey, "Subkey1", &subkey);
3633     close_key(subkey);
3634 
3635     run_regedit_exe("regedit.exe /e file.reg HKEY_CURRENT_USER\\" KEY_BASE);
3636     ok(compare_export("file.reg", key_order_test, 0), "compare_export() failed\n");
3637     delete_key(hkey, "Subkey1");
3638     delete_key(hkey, "Subkey2");
3639 
3640     /* Test the export order of registry values. Windows exports registry values
3641      * in order of creation; Wine uses alphabetical order.
3642      */
3643     add_value(hkey, "Value 2", REG_SZ, "I was added first!", 19);
3644     add_value(hkey, "Value 1", REG_SZ, "I was added second!", 20);
3645     close_key(hkey);
3646 
3647     run_regedit_exe("regedit.exe /e file.reg HKEY_CURRENT_USER\\" KEY_BASE);
3648     ok(compare_export("file.reg", value_order_test, TODO_REG_COMPARE), "compare_export() failed\n");
3649     delete_key(HKEY_CURRENT_USER, KEY_BASE);
3650 
3651     /* Test registry export with empty hex data */
3652     add_key(HKEY_CURRENT_USER, KEY_BASE, &hkey);
3653     add_value(hkey, "Wine1a", REG_NONE, NULL, 0);
3654     add_value(hkey, "Wine1b", REG_SZ, NULL, 0);
3655     add_value(hkey, "Wine1c", REG_EXPAND_SZ, NULL, 0);
3656     add_value(hkey, "Wine1d", REG_BINARY, NULL, 0);
3657     add_value(hkey, "Wine1e", REG_DWORD, NULL, 0);
3658     add_value(hkey, "Wine1f", REG_MULTI_SZ, NULL, 0);
3659     add_value(hkey, "Wine1g", 0x100, NULL, 0);
3660     add_value(hkey, "Wine1h", 0xabcd, NULL, 0);
3661     close_key(hkey);
3662 
3663     run_regedit_exe("regedit.exe /e file.reg HKEY_CURRENT_USER\\" KEY_BASE);
3664     ok(compare_export("file.reg", empty_hex_test, 0), "compare_export() failed\n");
3665     delete_key(HKEY_CURRENT_USER, KEY_BASE);
3666 
3667     /* Test registry export after importing alternative registry data types */
3668     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3669                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
3670                      "\"Wine2a\"=hex(1):\n"
3671                      "\"Wine2b\"=hex(3):\n"
3672                      "\"Wine2c\"=hex(4):\n\n");
3673     open_key(HKEY_CURRENT_USER, KEY_BASE, 0, &hkey);
3674     verify_reg(hkey, "Wine2a", REG_SZ, NULL, 0, 0);
3675     verify_reg(hkey, "Wine2b", REG_BINARY, NULL, 0, 0);
3676     verify_reg(hkey, "Wine2c", REG_DWORD, NULL, 0, 0);
3677     close_key(hkey);
3678 
3679     run_regedit_exe("regedit.exe /e file.reg HKEY_CURRENT_USER\\" KEY_BASE);
3680     ok(compare_export("file.reg", empty_hex_test2, 0), "compare_export() failed\n");
3681     delete_key(HKEY_CURRENT_USER, KEY_BASE);
3682 
3683     /* Test registry export with embedded null characters */
3684     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3685                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
3686                      "\"Wine3a\"=hex(1):56,00,61,00,6c,00,75,00,65,00,00,00\n"
3687                      "\"Wine3b\"=hex(3):12,34,56,78\n"
3688                      "\"Wine3c\"=hex(4):40,30,20,10\n\n");
3689     open_key(HKEY_CURRENT_USER, KEY_BASE, 0, &hkey);
3690     verify_reg(hkey, "Wine3a", REG_SZ, "Value", 6, 0);
3691     memcpy(hex, "\x12\x34\x56\x78", 4);
3692     verify_reg(hkey, "Wine3b", REG_BINARY, hex, 4, 0);
3693     dword = 0x10203040;
3694     verify_reg(hkey, "Wine3c", REG_DWORD, &dword, sizeof(dword), 0);
3695     close_key(hkey);
3696 
3697     run_regedit_exe("regedit.exe /e file.reg HKEY_CURRENT_USER\\" KEY_BASE);
3698     ok(compare_export("file.reg", hex_types_test, 0), "compare_export() failed\n");
3699     delete_key(HKEY_CURRENT_USER, KEY_BASE);
3700 
3701     exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3702                      "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
3703                      "\"Wine4a\"=dword:00000005\n"
3704                      "\"Wine4b\"=hex(1):00,00,00,00,00,00,00,00\n"
3705                      "\"Wine4c\"=\"Value\"\n"
3706                      "\"Wine4d\"=hex(1):00,00,61,00,62,00,63,00\n"
3707                      "\"Wine4e\"=dword:00000100\n"
3708                      "\"Wine4f\"=hex(1):00,00,56,00,61,00,6c,00,75,00,65,00,00,00\n"
3709                      "\"Wine4g\"=\"Value2\"\n"
3710                      "\"Wine4h\"=hex(1):61,00,62,00,63,00,00,00, \\\n"
3711                      "  64,00,65,00,66,00,00,00\n\n");
3712     open_key(HKEY_CURRENT_USER, KEY_BASE, 0, &hkey);
3713     dword = 0x5;
3714     verify_reg(hkey, "Wine4a", REG_DWORD, &dword, sizeof(dword), 0);
3715     verify_reg(hkey, "Wine4b", REG_SZ, "\0\0\0\0\0\0\0", 4, 0);
3716     verify_reg(hkey, "Wine4c", REG_SZ, "Value", 6, 0);
3717     verify_reg(hkey, "Wine4d", REG_SZ, "\0abc", 5, 0);
3718     dword = 0x100;
3719     verify_reg(hkey, "Wine4e", REG_DWORD, &dword, sizeof(dword), 0);
3720     verify_reg(hkey, "Wine4f", REG_SZ, "\0Value", 7, 0);
3721     verify_reg(hkey, "Wine4g", REG_SZ, "Value2", 7, 0);
3722     verify_reg(hkey, "Wine4h", REG_SZ, "abc\0def", 8, 0);
3723     close_key(hkey);
3724 
3725     run_regedit_exe("regedit.exe /e file.reg HKEY_CURRENT_USER\\" KEY_BASE);
3726     ok(compare_export("file.reg", embedded_null_test, 0), "compare_export() failed\n");
3727     delete_key(HKEY_CURRENT_USER, KEY_BASE);
3728 
3729     /* Test registry export with forward and back slashes */
3730     add_key(HKEY_CURRENT_USER, KEY_BASE, &hkey);
3731     add_key(hkey, "https://winehq.org", &subkey);
3732     close_key(subkey);
3733     add_value(hkey, "count/up", REG_SZ, "one/two/three", 14);
3734     add_value(hkey, "\\foo\\bar", REG_SZ, "", 1);
3735     close_key(hkey);
3736 
3737     run_regedit_exe("regedit.exe /e file.reg HKEY_CURRENT_USER\\" KEY_BASE);
3738     ok(compare_export("file.reg", slashes_test, TODO_REG_COMPARE), "compare_export() failed\n");
3739     delete_tree(HKEY_CURRENT_USER, KEY_BASE);
3740 
3741     /* Test registry export with escaped null characters */
3742     add_key(HKEY_CURRENT_USER, KEY_BASE, &hkey);
3743     add_value(hkey, "Wine5a", REG_SZ, "\\0", 3);
3744     add_value(hkey, "Wine5b", REG_SZ, "\\0\\0", 5);
3745     add_value(hkey, "Wine5c", REG_SZ, "Value1\\0", 9);
3746     add_value(hkey, "Wine5d", REG_SZ, "Value2\\0\\0\\0\\0", 15);
3747     add_value(hkey, "Wine5e", REG_SZ, "Value3\\0Value4", 15);
3748     add_value(hkey, "Wine5f", REG_SZ, "\\0Value5", 9);
3749     close_key(hkey);
3750 
3751     run_regedit_exe("regedit.exe /e file.reg HKEY_CURRENT_USER\\" KEY_BASE);
3752     ok(compare_export("file.reg", escaped_null_test, 0), "compare_export() failed\n");
3753     delete_key(HKEY_CURRENT_USER, KEY_BASE);
3754 }
3755 
START_TEST(regedit)3756 START_TEST(regedit)
3757 {
3758     HKEY hkey;
3759     LONG err;
3760 
3761     /* Check if regedit.exe is running with elevated privileges */
3762     err = RegDeleteKeyA(HKEY_CLASSES_ROOT, KEY_BASE);
3763     if (err == ERROR_ACCESS_DENIED)
3764     {
3765         win_skip("User is a non-elevated admin; skipping regedit tests.\n");
3766         return;
3767     }
3768     if (err == ERROR_FILE_NOT_FOUND)
3769     {
3770         if (RegCreateKeyExA(HKEY_CLASSES_ROOT, KEY_BASE, 0, NULL, REG_OPTION_NON_VOLATILE,
3771                             KEY_READ, NULL, &hkey, NULL))
3772         {
3773             win_skip("User is a non-elevated admin; skipping regedit tests.\n");
3774             return;
3775         }
3776         RegCloseKey(hkey);
3777         RegDeleteKeyA(HKEY_CLASSES_ROOT, KEY_BASE);
3778     }
3779 
3780     test_basic_import();
3781     test_basic_import_unicode();
3782     test_basic_import_31();
3783     test_invalid_import();
3784     test_invalid_import_unicode();
3785     test_invalid_import_31();
3786     test_comments();
3787     test_comments_unicode();
3788     test_import_with_whitespace();
3789     test_import_with_whitespace_unicode();
3790     test_key_creation_and_deletion();
3791     test_key_creation_and_deletion_unicode();
3792     test_value_deletion();
3793     test_value_deletion_unicode();
3794     test_export();
3795 }
3796