60f93c92c28718de0c250b9177cc4a9ac910d723
2 * Copyright 2010 Andrew Eikum for CodeWeavers
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.
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.
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
21 #include "wine/test.h"
23 #define lok ok_(__FILE__,line)
25 #define run_regedit_exe(c) run_regedit_exe_(__LINE__,c)
26 static BOOL
run_regedit_exe_(unsigned line
, const char *cmd
)
28 STARTUPINFOA si
= {sizeof(STARTUPINFOA
)};
29 PROCESS_INFORMATION pi
;
33 si
.dwFlags
= STARTF_USESTDHANDLES
;
34 si
.hStdInput
= INVALID_HANDLE_VALUE
;
35 si
.hStdOutput
= INVALID_HANDLE_VALUE
;
36 si
.hStdError
= INVALID_HANDLE_VALUE
;
39 if (!CreateProcessA(NULL
, cmdline
, NULL
, NULL
, TRUE
, 0, NULL
, NULL
, &si
, &pi
))
42 ret
= WaitForSingleObject(pi
.hProcess
, 10000);
43 if (ret
== WAIT_TIMEOUT
)
44 TerminateProcess(pi
.hProcess
, 1);
46 CloseHandle(pi
.hThread
);
47 CloseHandle(pi
.hProcess
);
48 return (ret
!= WAIT_TIMEOUT
);
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
)
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
)
64 br
= WriteFile(regfile
, file_contents
, strlen(file_contents
), &written
, NULL
);
65 lok(br
, "WriteFile failed: %u\n", GetLastError());
68 run_regedit_exe("regedit.exe /s test.reg");
70 br
= DeleteFileA("test.reg");
71 lok(br
, "DeleteFile failed: %u\n", GetLastError());
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
)
79 int lenA
, len
, memsize
;
85 lenA
= strlen(file_contents
);
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
);
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
)
98 HeapFree(GetProcessHeap(), 0, wstr
);
102 br
= WriteFile(regfile
, wstr
, memsize
, &written
, NULL
);
103 lok(br
, "WriteFile failed: %u\n", GetLastError());
104 CloseHandle(regfile
);
106 HeapFree(GetProcessHeap(), 0, wstr
);
108 run_regedit_exe("regedit.exe /s test.reg");
110 br
= DeleteFileA("test.reg");
111 lok(br
, "DeleteFile failed: %u\n", GetLastError());
116 #define TODO_REG_TYPE (0x0001u)
117 #define TODO_REG_SIZE (0x0002u)
118 #define TODO_REG_DATA (0x0004u)
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
)
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
)
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");
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
)
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
);
154 #define verify_key(k,s) verify_key_(__LINE__,k,s)
155 static void verify_key_(unsigned line
, HKEY key_base
, const char *subkey
)
160 lr
= RegOpenKeyExA(key_base
, subkey
, 0, KEY_READ
, &hkey
);
161 lok(lr
== ERROR_SUCCESS
, "RegOpenKeyExA failed: got %d\n", lr
);
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
)
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",
181 #define KEY_BASE "Software\\Wine\\regedit_test"
183 static void test_basic_import(void)
186 DWORD dword
= 0x17, type
, size
;
187 char exp_binary
[] = {0xAA,0xBB,0xCC,0x11};
192 lr
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
);
193 ok(lr
== ERROR_SUCCESS
|| lr
== ERROR_FILE_NOT_FOUND
,
194 "RegDeleteKeyA failed: %d\n", lr
);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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"
265 "\"Wine4\"=dword:12345678\n\n");
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);
272 verify_reg(hkey
, "Wine4", REG_DWORD
, &dword
, sizeof(dword
), 0);
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);
279 exec_import_str("REGEDIT4\n\n"
280 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
281 "\"Wine6\"=dword:00000050\n\n"
282 "\"Wine7\"=\"No newline\"");
284 verify_reg(hkey
, "Wine6", REG_DWORD
, &dword
, sizeof(dword
), 0);
285 verify_reg(hkey
, "Wine7", REG_SZ
, "No newline", 11, 0);
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");
292 verify_reg(hkey
, "Wine8a", REG_DWORD
, &dword
, sizeof(dword
), 0);
294 verify_reg(hkey
, "Wine8b", REG_DWORD
, &dword
, sizeof(dword
), 0);
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);
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);
319 verify_reg(hkey
, "single'quote", REG_DWORD
, &dword
, sizeof(dword
), 0);
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"
330 "\"Wine10d\"=hex(0):56,00,61,00,\\;comment\n"
333 "\"Wine10e\"=hex(0):56,00,61,00,\\;comment\n"
334 " 6c,00,75,00,;comment\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);
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"
347 "\"Wine11c\"=hex(2):25,50,41,\\;comment\n"
350 "\"Wine11d\"=hex(2):25,50,41,\\;comment\n"
353 "\"Wine11e\"=hex(2):25,50,41,\\;comment\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);
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");
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");
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"
380 "\"Wine12c\"=hex:11,22,33,44,\\;comment\n"
383 "\"Wine12d\"=hex:11,22,33,44,\\;comment\n"
386 "\"Wine12e\"=hex:11,22,33,44,\\;comment\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);
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
);
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
);
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");
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);
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);
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);
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);
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);
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);
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);
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);
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);
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");
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");
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"
532 "\"Wine19c\"=hex(100):25,50,41,\\;comment\n"
535 "\"Wine19d\"=hex(100):25,50,41,\\;comment\n"
538 "\"Wine19e\"=hex(100):25,50,41,\\;comment\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);
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);
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);
576 lr
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
);
577 ok(lr
== ERROR_SUCCESS
, "RegDeleteKeyA failed: %d\n", lr
);
580 static void test_basic_import_unicode(void)
583 DWORD dword
= 0x17, type
, size
;
584 char exp_binary
[] = {0xAA,0xBB,0xCC,0x11};
589 lr
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
);
590 ok(lr
== ERROR_SUCCESS
|| lr
== ERROR_FILE_NOT_FOUND
, "RegDeleteKeyA failed: %d\n", lr
);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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"
662 "\"Wine4\"=dword:12345678\n\n");
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);
669 verify_reg(hkey
, "Wine4", REG_DWORD
, &dword
, sizeof(dword
), 0);
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);
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\"");
681 verify_reg(hkey
, "Wine6", REG_DWORD
, &dword
, sizeof(dword
), 0);
682 verify_reg(hkey
, "Wine7", REG_SZ
, "No newline", 11, 0);
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");
689 verify_reg(hkey
, "Wine8a", REG_DWORD
, &dword
, sizeof(dword
), 0);
691 verify_reg(hkey
, "Wine8b", REG_DWORD
, &dword
, sizeof(dword
), 0);
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);
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);
716 verify_reg(hkey
, "single'quote", REG_DWORD
, &dword
, sizeof(dword
), 0);
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"
727 "\"Wine10d\"=hex(0):56,00,61,00,\\;comment\n"
730 "\"Wine10e\"=hex(0):56,00,61,00,\\;comment\n"
731 " 6c,00,75,00,;comment\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);
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"
747 "\"Wine11d\"=hex(2):25,00,50,00,41,00,\\;comment\n"
750 "\"Wine11e\"=hex(2):25,00,50,00,41,00,\\;comment\n"
751 " 54,00,48,00,;comment\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);
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");
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");
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"
777 "\"Wine12c\"=hex:11,22,33,44,\\;comment\n"
780 "\"Wine12d\"=hex:11,22,33,44,\\;comment\n"
783 "\"Wine12e\"=hex:11,22,33,44,\\;comment\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);
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
);
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
);
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");
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);
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);
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);
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);
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);
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);
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);
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);
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);
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");
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");
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"
932 "\"Wine19c\"=hex(100):25,50,41,\\;comment\n"
935 "\"Wine19d\"=hex(100):25,50,41,\\;comment\n"
938 "\"Wine19e\"=hex(100):25,50,41,\\;comment\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);
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);
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);
976 lr
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
);
977 ok(lr
== ERROR_SUCCESS
, "RegDeleteKeyA failed: %d\n", lr
);
980 static void test_basic_import_31(void)
985 lr
= RegDeleteKeyA(HKEY_CLASSES_ROOT
, KEY_BASE
);
986 ok(lr
== ERROR_SUCCESS
|| lr
== ERROR_FILE_NOT_FOUND
,
987 "RegDeleteKeyA failed: %d\n", lr
);
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
)
994 win_skip("regedit.exe is not running with elevated privileges; "
995 "skipping Windows 3.1 import tests\n");
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);
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);
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);
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);
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);
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);
1025 exec_import_str("REGEDIT\r\n"
1026 "HKEY_CLASSES_ROOT\\" KEY_BASE
"\r\n");
1027 verify_reg(hkey
, "", REG_SZ
, "", 1, 0);
1029 exec_import_str("REGEDIT\r\n"
1030 "HKEY_CLASSES_ROOT\\" KEY_BASE
" \r\n");
1031 verify_reg(hkey
, "", REG_SZ
, "", 1, 0);
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);
1039 lr
= RegDeleteKeyA(HKEY_CLASSES_ROOT
, KEY_BASE
);
1040 ok(lr
== ERROR_SUCCESS
, "RegDeleteKeyA failed: %d\n", lr
);
1043 static void test_invalid_import(void)
1049 lr
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
);
1050 ok(lr
== ERROR_SUCCESS
|| lr
== ERROR_FILE_NOT_FOUND
, "RegDeleteKeyA failed: %d\n", lr
);
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");
1059 exec_import_str("REGEDIT4\n\n"
1060 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1061 "\"TestNoBeginQuote\"=Asdffdsa\"\n");
1062 verify_reg_nonexist(hkey
, "TestNoBeginQuote");
1064 exec_import_str("REGEDIT4\n\n"
1065 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1066 "\"TestNoQuotes\"=Asdffdsa\n");
1067 verify_reg_nonexist(hkey
, "TestNoQuotes");
1069 exec_import_str("REGEDIT4\n\n"
1070 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1071 "\"NameNoEndQuote=\"Asdffdsa\"\n");
1072 verify_reg_nonexist(hkey
, "NameNoEndQuote");
1074 exec_import_str("REGEDIT4\n\n"
1075 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1076 "NameNoBeginQuote\"=\"Asdffdsa\"\n");
1077 verify_reg_nonexist(hkey
, "NameNoBeginQuote");
1079 exec_import_str("REGEDIT4\n\n"
1080 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1081 "NameNoQuotes=\"Asdffdsa\"\n");
1082 verify_reg_nonexist(hkey
, "NameNoQuotes");
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");
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");
1096 exec_import_str("regedit4\n\n"
1097 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1098 "\"Test2\"=\"Value\"\n");
1099 verify_reg_nonexist(hkey
, "Test2");
1101 exec_import_str("Regedit4\n\n"
1102 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1103 "\"Test3\"=\"Value\"\n");
1104 verify_reg_nonexist(hkey
, "Test3");
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");
1111 exec_import_str("REGEDIT4FOO\n\n"
1112 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1113 "\"Test5\"=\"Value\"\n");
1114 verify_reg_nonexist(hkey
, "Test5");
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");
1121 exec_import_str("REGEDIT5\n\n"
1122 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1123 "\"Test7\"=\"Value\"\n");
1124 verify_reg_nonexist(hkey
, "Test7");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
1207 exec_import_str("REGEDIT4\n\n"
1208 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\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");
1218 /* Test key name and value name concatenation */
1219 exec_import_str("REGEDIT4\n\n"
1220 "[HKEY_CURRENT_USER\\" KEY_BASE
"\\\n"
1222 verify_key_nonexist(hkey
, "Subkey1");
1224 exec_import_str("REGEDIT4\n\n"
1225 "[HKEY_CURRENT_USER\\" KEY_BASE
"\n"
1227 verify_key_nonexist(hkey
, "Subkey2");
1229 exec_import_str("REGEDIT4\n\n"
1230 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1232 "17a\"=\"Value 1\"\n"
1233 "\"Test17b\"=\"Value 2\"\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");
1240 exec_import_str("REGEDIT4\n\n"
1241 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1242 "\"Test18a\"=dword:1234\\\n"
1244 "\"Test18b\"=\"Test \\\n"
1246 verify_reg_nonexist(hkey
, "Test18a");
1247 verify_reg_nonexist(hkey
, "Test18b");
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");
1272 exec_import_str("REGEDIT4\n\n"
1273 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1274 "\"Test20a\"=hex(2):25,50,41\\\n"
1276 "\"Test20b\"=hex(2):25,50,41\\\n"
1278 "\"Test20c\"=hex(2):25,50,41\\\n"
1280 "\"Test20d\"=hex(2):25,50,4\\\n"
1282 "\"Test20e\"=hex(2):25,50,4\\\n"
1284 "\"Test20f\"=hex(2):25,50,41,\\;comment\n"
1285 " 54,48,\\#comment\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");
1294 exec_import_str("REGEDIT4\n\n"
1295 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1296 "\"Test21a\"=hex:11,22,33,44\\\n"
1298 "\"Test21b\"=hex:11,22,33,44\\\n"
1300 "\"Test21c\"=hex:11,22,33,44\\\n"
1302 "\"Test21d\"=hex:11,22,33,4\\\n"
1304 "\"Test21e\"=hex:11,22,33,4\\\n"
1306 "\"Test21f\"=hex:11,22,33,\\;comment\n"
1307 " 44,55,66,\\#comment\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");
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");
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"
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");
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");
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");
1367 lr
= RegDeleteKeyA(hkey
, "Subkey2");
1368 ok(lr
== ERROR_SUCCESS
, "RegDeleteKey failed: %u\n", lr
);
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"
1375 "\"Wine25c\"=hex(2):4c,69,6e,65,20,\\\n"
1377 "\"Wine25d\"=\"Test value\"\n"
1379 "\"Wine25e\"=hex(2):4c,69,6e,65,20,\\\n"
1381 "\"Wine25f\"=\"Test value\"\n"
1383 "\"Wine25g\"=hex(2):4c,69,6e,65,20,\\\n\n"
1384 "\"Wine25h\"=\"Test value\"\n"
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);
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"
1404 "\"Wine26c\"=hex(2):4c,69,6e,65,20,\\\n"
1406 "\"Wine26d\"=dword:00000008\n"
1408 "\"Wine26e\"=hex(2):4c,69,6e,65,20,\\\n"
1410 "\"Wine26f\"=dword:00000008\n"
1412 "\"Wine26g\"=hex(2):4c,69,6e,65,20,\\\n\n"
1413 "\"Wine26h\"=dword:00000008\n"
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);
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"
1433 "\"Wine27c\"=hex(2):25,48,4f,4d,45,25,5c,\\\n"
1435 "\"Wine27d\"=hex(2):25,50,41,54,48,25,00\n"
1437 "\"Wine27e\"=hex(2):25,48,4f,4d,45,25,5c,\\\n"
1439 "\"Wine27f\"=hex(2):25,50,41,54,48,25,00\n"
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"
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);
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
);
1464 exec_import_str("REGEDIT4\n\n"
1465 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1466 "\"Wine28b\"=hex(2):4c,69,6e,65,20,\\\n"
1468 "@=\"Default value 2\"\n\n");
1469 verify_reg_nonexist(hkey
, "Wine28b");
1470 verify_reg_nonexist(hkey
, NULL
);
1472 exec_import_str("REGEDIT4\n\n"
1473 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1474 "\"Wine28c\"=hex(2):4c,69,6e,65,20,\\\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);
1480 lr
= RegDeleteValueW(hkey
, NULL
);
1481 ok(lr
== ERROR_SUCCESS
, "RegDeleteValue failed: %u\n", lr
);
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
);
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);
1497 exec_import_str("REGEDIT4\n\n"
1498 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1499 "\"Wine29a\"=hex:11,22,33,\\\n"
1502 "\"Wine29b\"=hex:11,22,33,\\\n"
1505 verify_reg_nonexist(hkey
, "Wine29a");
1506 verify_reg_nonexist(hkey
, "Wine29b");
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");
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");
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");
1533 lr
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
);
1534 ok(lr
== ERROR_SUCCESS
, "RegDeleteKeyA failed: %d\n", lr
);
1537 static void test_invalid_import_unicode(void)
1541 DWORD dword
= 0x8, os_version
, major_version
, minor_version
;
1543 lr
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
);
1544 ok(lr
== ERROR_SUCCESS
|| lr
== ERROR_FILE_NOT_FOUND
, "RegDeleteKeyA failed: %d\n", lr
);
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
1635 os_version
= GetVersion();
1636 major_version
= LOBYTE(LOWORD(os_version
));
1637 minor_version
= HIBYTE(LOWORD(os_version
));
1639 if (major_version
> 5 || (major_version
== 5 && minor_version
> 0))
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");
1646 else /* Windows 2000 */
1647 win_skip("Skipping a non-standard header test\n");
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");
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");
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");
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");
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");
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");
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");
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");
1714 exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1715 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\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");
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"
1729 verify_key_nonexist(hkey
, "Subkey1");
1731 exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1732 "[HKEY_CURRENT_USER\\" KEY_BASE
"\n"
1734 verify_key_nonexist(hkey
, "Subkey2");
1736 exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1737 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1739 "17a\"=\"Value 1\"\n"
1740 "\"Test17b\"=\"Value 2\"\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");
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"
1751 "\"Test18b\"=\"Test \\\n"
1753 verify_reg_nonexist(hkey
, "Test18a");
1754 verify_reg_nonexist(hkey
, "Test18b");
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");
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");
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"
1805 "\"Test21b\"=hex:11,22,33,44\\\n"
1807 "\"Test21c\"=hex:11,22,33,44\\\n"
1809 "\"Test21d\"=hex:11,22,33,4\\\n"
1811 "\"Test21e\"=hex:11,22,33,4\\\n"
1813 "\"Test21f\"=hex:11,22,33,\\;comment\n"
1814 " 44,55,66,\\#comment\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");
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");
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");
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");
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");
1874 lr
= RegDeleteKeyA(hkey
, "Subkey2");
1875 ok(lr
== ERROR_SUCCESS
, "RegDeleteKey failed: %u\n", lr
);
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"
1882 "\"Wine25c\"=hex(2):4c,00,69,00,6e,00,65,00,20,00,\\\n"
1884 "\"Wine25d\"=\"Test value\"\n"
1886 "\"Wine25e\"=hex(2):4c,00,69,00,6e,00,65,00,20,00,\\\n"
1888 "\"Wine25f\"=\"Test value\"\n"
1890 "\"Wine25g\"=hex(2):4c,00,69,00,6e,00,65,00,20,00,\\\n\n"
1891 "\"Wine25h\"=\"Test value\"\n"
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);
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"
1911 "\"Wine26c\"=hex(2):4c,00,69,00,6e,00,65,00,20,00,\\\n"
1913 "\"Wine26d\"=dword:00000008\n"
1915 "\"Wine26e\"=hex(2):4c,00,69,00,6e,00,65,00,20,00,\\\n"
1917 "\"Wine26f\"=dword:00000008\n"
1919 "\"Wine26g\"=hex(2):4c,00,69,00,6e,00,65,00,20,00,\\\n\n"
1920 "\"Wine26h\"=dword:00000008\n"
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);
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"
1940 "\"Wine27c\"=hex(2):25,00,48,00,4f,00,4d,00,45,00,25,00,5c,00,\\\n"
1942 "\"Wine27d\"=hex(2):25,00,50,00,41,00,54,00,48,00,25,00,00,00\n"
1944 "\"Wine27e\"=hex(2):25,00,48,00,4f,00,4d,00,45,00,25,00,5c,00,\\\n"
1946 "\"Wine27f\"=hex(2):25,00,50,00,41,00,54,00,48,00,25,00,00,00\n"
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"
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);
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
);
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"
1975 "@=\"Default value 2\"\n\n");
1976 verify_reg_nonexist(hkey
, "Wine28b");
1977 verify_reg_nonexist(hkey
, NULL
);
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"
1983 "@=\"Default value 3\"\n\n");
1984 verify_reg_nonexist(hkey
, "Wine28c");
1985 verify_reg(hkey
, NULL
, REG_SZ
, "Default value 3", 16, 0);
1987 lr
= RegDeleteValueW(hkey
, NULL
);
1988 ok(lr
== ERROR_SUCCESS
, "RegDeleteValue failed: %u\n", lr
);
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
);
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);
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"
2009 "\"Wine29b\"=hex:11,22,33,\\\n"
2012 verify_reg_nonexist(hkey
, "Wine29a");
2013 verify_reg_nonexist(hkey
, "Wine29b");
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");
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");
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");
2042 lr
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
);
2043 ok(lr
== ERROR_SUCCESS
, "RegDeleteKeyA failed: %d\n", lr
);
2046 static void test_invalid_import_31(void)
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
)
2056 win_skip("regedit.exe is not running with elevated privileges; "
2057 "skipping Windows 3.1 invalid import tests\n");
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
, "");
2066 exec_import_str("REGEDIT\r\n"
2067 " HKEY_CLASSES_ROOT\\" KEY_BASE
" = Value1b\r\n");
2068 verify_reg_nonexist(hkey
, "");
2070 exec_import_str("REGEDIT\r\n"
2071 "\tHKEY_CLASSES_ROOT\\" KEY_BASE
" = Value1c\r\n");
2072 verify_reg_nonexist(hkey
, "");
2074 exec_import_str("REGEDIT\r\n"
2075 ";HKEY_CLASSES_ROOT\\" KEY_BASE
" = Value2a\r\n");
2076 verify_reg_nonexist(hkey
, "");
2078 exec_import_str("REGEDIT\r\n"
2079 "#HKEY_CLASSES_ROOT\\" KEY_BASE
" = Value2b\r\n");
2080 verify_reg_nonexist(hkey
, "");
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
, "");
2087 exec_import_str("REGEDIT\r\n"
2088 "hKEY_CLASSES_ROOT\\" KEY_BASE
" = Value3b\r\n");
2089 verify_reg_nonexist(hkey
, "");
2091 exec_import_str("REGEDIT\r\n"
2092 "Hkey_Classes_Root\\" KEY_BASE
" = Value3c\r\n");
2093 verify_reg_nonexist(hkey
, "");
2097 lr
= RegDeleteKeyA(HKEY_CLASSES_ROOT
, KEY_BASE
);
2098 ok(lr
== ERROR_SUCCESS
, "RegDeleteKeyA failed: %d\n", lr
);
2101 static void test_comments(void)
2107 lr
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
);
2108 ok(lr
== ERROR_SUCCESS
|| lr
== ERROR_FILE_NOT_FOUND
, "RegDeleteKeyA failed: %d\n", lr
);
2110 exec_import_str("REGEDIT4\n\n"
2111 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
2113 "\"Wine1\"=\"Line 1\"\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);
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");
2131 verify_reg(hkey
, "Wine6", REG_DWORD
, &dword
, sizeof(dword
), 0);
2133 exec_import_str("REGEDIT4\n\n"
2134 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
2135 "\"Wine7\"=hex(7):4c,69,6e,65,20,\\\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"
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);
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");
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");
2191 verify_reg(hkey
, "Wine24", REG_DWORD
, &dword
, sizeof(dword
), 0);
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");
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");
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");
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);
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);
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);
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);
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");
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"
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);
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");
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");
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"
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);
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"
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);
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"
2323 " 65,6e,\\;comment\n"
2324 " 61,74,69,6f,6e,00,00\n\n");
2325 verify_reg_nonexist(hkey
, "Wine29c");
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"
2332 " 65,6e,\\;comment\n"
2333 " 61,74,69,6f,6e,00,00\n\n");
2334 verify_reg_nonexist(hkey
, "Wine29d");
2338 lr
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
);
2339 ok(lr
== ERROR_SUCCESS
, "RegDeleteKeyA failed: %d\n", lr
);
2342 static void test_comments_unicode(void)
2348 lr
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
);
2349 ok(lr
== ERROR_SUCCESS
|| lr
== ERROR_FILE_NOT_FOUND
, "RegDeleteKeyA failed: %d\n", lr
);
2351 exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
2352 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
2354 "\"Wine1\"=\"Line 1\"\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);
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");
2372 verify_reg(hkey
, "Wine6", REG_DWORD
, &dword
, sizeof(dword
), 0);
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"
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"
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);
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");
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");
2434 verify_reg(hkey
, "Wine24", REG_DWORD
, &dword
, sizeof(dword
), 0);
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");
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");
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");
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);
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);
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);
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);
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");
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);
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");
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");
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"
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);
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"
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);
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"
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");
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"
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");
2581 lr
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
);
2582 ok(lr
== ERROR_SUCCESS
, "RegDeleteKeyA failed: %d\n", lr
);
2585 static void test_import_with_whitespace(void)
2591 lr
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
);
2592 ok(lr
== ERROR_SUCCESS
|| lr
== ERROR_FILE_NOT_FOUND
, "RegDeleteKeyA failed: %d\n", lr
);
2594 exec_import_str(" REGEDIT4\n\n"
2595 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n\n");
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
);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
2655 verify_reg(hkey
, "Wine4b", REG_DWORD
, &dword
, sizeof(dword
), 0);
2656 verify_reg(hkey
, "Wine4c", REG_MULTI_SZ
, "Line concatenation\0", 20, 0);
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);
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);
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);
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);
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");
2697 verify_reg(hkey
, "Wine9a", REG_DWORD
, &dword
, sizeof(dword
), 0);
2698 verify_reg(hkey
, "Wine9b", REG_DWORD
, &dword
, sizeof(dword
), 0);
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);
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);
2710 exec_import_str("REGEDIT4\n\n"
2711 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
2712 "\"Wine10a\"=hex(7):4c,69,6e,65,20,\\\n"
2714 " 63,61,74,\\\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);
2719 exec_import_str("REGEDIT4\n\n"
2720 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
2721 "\"Wine10b\"=hex(7):4c,69,6e,65,20,\\\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);
2728 lr
= RegCloseKey(hkey
);
2729 ok(lr
== ERROR_SUCCESS
, "RegCloseKey failed: got %d, expected 0\n", lr
);
2731 lr
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
);
2732 ok(lr
== ERROR_SUCCESS
, "RegDeleteKeyA failed: got %d, expected 0\n", lr
);
2735 static void test_import_with_whitespace_unicode(void)
2741 lr
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
);
2742 ok(lr
== ERROR_SUCCESS
|| lr
== ERROR_FILE_NOT_FOUND
, "RegDeleteKeyA failed: %d\n", lr
);
2744 exec_import_wstr("\xef\xbb\xbf Windows Registry Editor Version 5.00\n\n"
2745 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n\n");
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
);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
2805 verify_reg(hkey
, "Wine4b", REG_DWORD
, &dword
, sizeof(dword
), 0);
2806 verify_reg(hkey
, "Wine4c", REG_MULTI_SZ
, "Line concatenation\0", 20, 0);
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);
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);
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);
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);
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");
2847 verify_reg(hkey
, "Wine9a", REG_DWORD
, &dword
, sizeof(dword
), 0);
2848 verify_reg(hkey
, "Wine9b", REG_DWORD
, &dword
, sizeof(dword
), 0);
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);
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);
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);
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);
2878 lr
= RegCloseKey(hkey
);
2879 ok(lr
== ERROR_SUCCESS
, "RegCloseKey failed: got %d, expected 0\n", lr
);
2881 lr
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
);
2882 ok(lr
== ERROR_SUCCESS
, "RegDeleteKeyA failed: got %d, expected 0\n", lr
);
2885 static void test_key_creation_and_deletion(void)
2890 lr
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
);
2891 ok(lr
== ERROR_SUCCESS
|| lr
== ERROR_FILE_NOT_FOUND
, "RegDeleteKeyA failed: %d\n", lr
);
2893 exec_import_str("REGEDIT4\n\n"
2894 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n\n");
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
);
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");
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");
2908 exec_import_str("REGEDIT4\n\n"
2909 "[ HKEY_CURRENT_USER\\" KEY_BASE
"\\Subkey1a]\n");
2910 verify_key_nonexist(hkey
, "Subkey1a");
2912 exec_import_str("REGEDIT4\n\n"
2913 "[\tHKEY_CURRENT_USER\\" KEY_BASE
"\\Subkey1b]\n");
2914 verify_key_nonexist(hkey
, "Subkey1b");
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
);
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
);
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
);
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
);
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
);
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");
2974 exec_import_str("REGEDIT4\n\n"
2975 "[ -HKEY_CURRENT_USER\\" KEY_BASE
"\\Subkey2a]\n");
2976 verify_key(hkey
, "Subkey2a");
2978 exec_import_str("REGEDIT4\n\n"
2979 "[\t-HKEY_CURRENT_USER\\" KEY_BASE
"\\Subkey2b]\n");
2980 verify_key(hkey
, "Subkey2b");
2982 exec_import_str("REGEDIT4\n\n"
2983 "[- HKEY_CURRENT_USER\\" KEY_BASE
"\\Subkey2a]\n");
2984 verify_key(hkey
, "Subkey2a");
2986 exec_import_str("REGEDIT4\n\n"
2987 "[-\tHKEY_CURRENT_USER\\" KEY_BASE
"\\Subkey2b]\n");
2988 verify_key(hkey
, "Subkey2b");
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");
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");
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");
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");
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");
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");
3028 lr
= RegCloseKey(hkey
);
3029 ok(lr
== ERROR_SUCCESS
, "RegCloseKey failed: got %d, expected 0\n", lr
);
3031 lr
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
);
3032 ok(lr
== ERROR_SUCCESS
, "RegDeleteKeyA failed: got %d, expected 0\n", lr
);
3035 static void test_key_creation_and_deletion_unicode(void)
3040 lr
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
);
3041 ok(lr
== ERROR_SUCCESS
|| lr
== ERROR_FILE_NOT_FOUND
, "RegDeleteKeyA failed: %d\n", lr
);
3043 exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3044 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n\n");
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
);
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");
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");
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");
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");
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
);
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
);
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
);
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
);
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
);
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
3178 lr
= RegCloseKey(hkey
);
3179 ok(lr
== ERROR_SUCCESS
, "RegCloseKey failed: got %d, expected 0\n", lr
);
3181 lr
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
);
3182 ok(lr
== ERROR_SUCCESS
, "RegDeleteKeyA failed: got %d, expected 0\n", lr
);
3185 static void test_value_deletion(void)
3190 BYTE hex
[4] = {0x11, 0x22, 0x33, 0x44};
3192 lr
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
);
3193 ok(lr
== ERROR_SUCCESS
|| lr
== ERROR_FILE_NOT_FOUND
, "RegDeleteKeyA failed: %d\n", lr
);
3195 exec_import_str("REGEDIT4\n\n"
3196 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n\n");
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
);
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);
3218 exec_import_str("REGEDIT4\n\n"
3219 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\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);
3233 lr
= RegCloseKey(hkey
);
3234 ok(lr
== ERROR_SUCCESS
, "RegCloseKey failed: got %d, expected 0\n", lr
);
3236 lr
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
);
3237 ok(lr
== ERROR_SUCCESS
, "RegDeleteKeyA failed: got %d, expected 0\n", lr
);
3241 static void test_value_deletion_unicode(void)
3246 BYTE hex
[4] = {0x11, 0x22, 0x33, 0x44};
3248 lr
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
);
3249 ok(lr
== ERROR_SUCCESS
|| lr
== ERROR_FILE_NOT_FOUND
, "RegDeleteKeyA failed: %d\n", lr
);
3251 exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3252 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n\n");
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
);
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);
3275 exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
3276 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\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);
3290 lr
= RegCloseKey(hkey
);
3291 ok(lr
== ERROR_SUCCESS
, "RegCloseKey failed: got %d, expected 0\n", lr
);
3293 lr
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
);
3294 ok(lr
== ERROR_SUCCESS
, "RegDeleteKeyA failed: got %d, expected 0\n", lr
);
3299 if(!exec_import_str("REGEDIT4\r\n\r\n")){
3300 win_skip("regedit not available, skipping regedit tests\n");
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();
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();