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