5286b6030d201bf69f20e765581a719763c0cdaa
2 * Copyright 2014 Akihiro Sagawa
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>
25 #define lok ok_(__FILE__,line)
26 #define KEY_BASE "Software\\Wine\\reg_test"
27 #define REG_EXIT_SUCCESS 0
28 #define REG_EXIT_FAILURE 1
29 #define TODO_REG_TYPE (0x0001u)
30 #define TODO_REG_SIZE (0x0002u)
31 #define TODO_REG_DATA (0x0004u)
33 #define run_reg_exe(c,r) run_reg_exe_(__LINE__,c,r)
34 static BOOL
run_reg_exe_(unsigned line
, const char *cmd
, DWORD
*rc
)
36 STARTUPINFOA si
= {sizeof(STARTUPINFOA
)};
37 PROCESS_INFORMATION pi
;
42 si
.dwFlags
= STARTF_USESTDHANDLES
;
43 si
.hStdInput
= INVALID_HANDLE_VALUE
;
44 si
.hStdOutput
= INVALID_HANDLE_VALUE
;
45 si
.hStdError
= INVALID_HANDLE_VALUE
;
48 if (!CreateProcessA(NULL
, cmdline
, NULL
, NULL
, TRUE
, 0, NULL
, NULL
, &si
, &pi
))
51 ret
= WaitForSingleObject(pi
.hProcess
, 10000);
52 if (ret
== WAIT_TIMEOUT
)
53 TerminateProcess(pi
.hProcess
, 1);
55 bret
= GetExitCodeProcess(pi
.hProcess
, rc
);
56 lok(bret
, "GetExitCodeProcess failed: %d\n", GetLastError());
58 CloseHandle(pi
.hThread
);
59 CloseHandle(pi
.hProcess
);
63 #define verify_reg(k,v,t,d,s,todo) verify_reg_(__LINE__,k,v,t,d,s,todo)
64 static void verify_reg_(unsigned line
, HKEY hkey
, const char* value
,
65 DWORD exp_type
, const void *exp_data
, DWORD exp_size
, DWORD todo
)
72 memset(data
, 0xdd, size
);
73 err
= RegQueryValueExA(hkey
, value
, NULL
, &type
, data
, &size
);
74 lok(err
== ERROR_SUCCESS
, "RegQueryValueEx failed: got %d\n", err
);
75 if (err
!= ERROR_SUCCESS
)
78 todo_wine_if (todo
& TODO_REG_TYPE
)
79 lok(type
== exp_type
, "got wrong type %d, expected %d\n", type
, exp_type
);
80 todo_wine_if (todo
& TODO_REG_SIZE
)
81 lok(size
== exp_size
, "got wrong size %d, expected %d\n", size
, exp_size
);
82 todo_wine_if (todo
& TODO_REG_DATA
)
83 lok(memcmp(data
, exp_data
, size
) == 0, "got wrong data\n");
86 #define verify_reg_nonexist(k,v) verify_reg_nonexist_(__LINE__,k,v)
87 static void verify_reg_nonexist_(unsigned line
, HKEY hkey
, const char *value
)
91 err
= RegQueryValueExA(hkey
, value
, NULL
, NULL
, NULL
, NULL
);
92 lok(err
== ERROR_FILE_NOT_FOUND
, "registry value '%s' shouldn't exist; got %d, expected 2\n",
96 static void test_add(void)
100 DWORD r
, dword
, type
, size
;
103 run_reg_exe("reg add", &r
);
104 ok(r
== REG_EXIT_FAILURE
, "got exit code %d, expected 1\n", r
);
106 run_reg_exe("reg add /?", &r
);
107 ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
109 err
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
);
110 ok(err
== ERROR_SUCCESS
|| err
== ERROR_FILE_NOT_FOUND
, "got %d\n", err
);
112 err
= RegOpenKeyExA(HKEY_CURRENT_USER
, KEY_BASE
, 0, KEY_READ
, &hkey
);
113 ok(err
== ERROR_FILE_NOT_FOUND
, "got %d\n", err
);
115 run_reg_exe("reg add HKCU\\" KEY_BASE
" /f", &r
);
116 ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
118 err
= RegOpenKeyExA(HKEY_CURRENT_USER
, KEY_BASE
, 0, KEY_READ
, &hkey
);
119 ok(err
== ERROR_SUCCESS
, "key creation failed, got %d\n", err
);
121 /* Test empty type */
122 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v emptyType /t \"\" /d WineTest /f", &r
);
123 ok(r
== REG_EXIT_FAILURE
, "got exit code %u\n", r
);
125 /* Test input key formats */
126 run_reg_exe("reg add \\HKCU\\" KEY_BASE
"\\keytest0 /f", &r
);
127 ok(r
== REG_EXIT_FAILURE
, "got exit code %u\n", r
);
128 err
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
"\\keytest0");
129 ok(err
== ERROR_FILE_NOT_FOUND
, "got exit code %d\n", err
);
131 run_reg_exe("reg add \\\\HKCU\\" KEY_BASE
"\\keytest1 /f", &r
);
132 ok(r
== REG_EXIT_FAILURE
, "got exit code %u\n", r
);
133 err
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
"\\keytest1");
134 ok(err
== ERROR_FILE_NOT_FOUND
, "got exit code %d\n", err
);
136 run_reg_exe("reg add HKCU\\" KEY_BASE
"\\keytest2\\\\ /f", &r
);
137 ok(r
== REG_EXIT_FAILURE
|| broken(r
== REG_EXIT_SUCCESS
/* WinXP */),
138 "got exit code %u\n", r
);
139 err
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
"\\keytest2");
140 ok(err
== ERROR_FILE_NOT_FOUND
|| broken(err
== ERROR_SUCCESS
/* WinXP */),
141 "got exit code %d\n", err
);
143 run_reg_exe("reg add HKCU\\" KEY_BASE
"\\keytest3\\ /f", &r
);
144 ok(r
== REG_EXIT_SUCCESS
, "got exit code %u\n", r
);
145 err
= RegOpenKeyExA(HKEY_CURRENT_USER
, KEY_BASE
"\\keytest3", 0, KEY_READ
, &subkey
);
146 ok(err
== ERROR_SUCCESS
, "key creation failed, got %d\n", err
);
148 err
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
"\\keytest3");
149 ok(err
== ERROR_SUCCESS
, "got exit code %d\n", err
);
151 run_reg_exe("reg add HKCU\\" KEY_BASE
"\\keytest4 /f", &r
);
152 ok(r
== REG_EXIT_SUCCESS
, "got exit code %u\n", r
);
153 err
= RegOpenKeyExA(HKEY_CURRENT_USER
, KEY_BASE
"\\keytest4", 0, KEY_READ
, &subkey
);
154 ok(err
== ERROR_SUCCESS
, "key creation failed, got %d\n", err
);
156 err
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
"\\keytest4");
157 ok(err
== ERROR_SUCCESS
, "got exit code %d\n", err
);
160 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v none0 /d deadbeef /t REG_NONE /f", &r
);
161 ok(r
== REG_EXIT_SUCCESS
, "got exit code %d\n", r
);
162 verify_reg(hkey
, "none0", REG_NONE
, "d\0e\0a\0d\0b\0e\0e\0f\0\0", 18, 0);
164 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v none1 /t REG_NONE /f", &r
);
165 ok(r
== REG_EXIT_SUCCESS
, "got exit code %u, expected 0\n", r
);
166 verify_reg(hkey
, "none1", REG_NONE
, "\0", 2, 0);
168 run_reg_exe("reg add HKCU\\" KEY_BASE
" /ve /t REG_NONE /f", &r
);
169 ok(r
== REG_EXIT_SUCCESS
, "got exit code %u, expected 0\n", r
);
170 verify_reg(hkey
, NULL
, REG_NONE
, "\0", 2, 0);
173 run_reg_exe("reg add HKCU\\" KEY_BASE
" /d WineTest /f", &r
);
174 ok(r
== REG_EXIT_SUCCESS
|| broken(r
== REG_EXIT_FAILURE
/* WinXP */),
175 "got exit code %d, expected 0\n", r
);
176 if (r
== REG_EXIT_SUCCESS
)
177 verify_reg(hkey
, "", REG_SZ
, "WineTest", 9, 0);
179 win_skip("broken reg.exe detected\n");
181 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v test /d deadbeef /f", &r
);
182 ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
183 verify_reg(hkey
, "test", REG_SZ
, "deadbeef", 9, 0);
185 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v test /f", &r
);
186 ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
187 verify_reg(hkey
, "test", REG_SZ
, "", 1, 0);
189 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v test1 /t REG_SZ /f /d", &r
);
190 ok(r
== REG_EXIT_FAILURE
, "got exit code %d, expected 1\n", r
);
192 run_reg_exe("reg add HKEY_CURRENT_USER\\" KEY_BASE
" /ve /d WineTEST /f", &r
);
193 ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
194 verify_reg(hkey
, "", REG_SZ
, "WineTEST", 9, 0);
196 run_reg_exe("reg add HKCU\\" KEY_BASE
" /t REG_SZ /v test2 /f", &r
);
197 ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
198 verify_reg(hkey
, "test2", REG_SZ
, "", 1, 0);
200 run_reg_exe("reg add HKCU\\" KEY_BASE
" /t REG_SZ /v test3 /f /d \"\"", &r
);
201 ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
202 verify_reg(hkey
, "test3", REG_SZ
, "", 1, 0);
204 run_reg_exe("reg add HKCU\\" KEY_BASE
" /ve /f", &r
);
205 ok(r
== REG_EXIT_SUCCESS
, "got exit code %u, expected 0\n", r
);
206 verify_reg(hkey
, NULL
, REG_SZ
, "", 1, 0);
208 run_reg_exe("reg add HKCU\\" KEY_BASE
" /ve /t REG_SZ /f", &r
);
209 ok(r
== REG_EXIT_SUCCESS
, "got exit code %u, expected 0\n", r
);
210 verify_reg(hkey
, NULL
, REG_SZ
, "", 1, 0);
213 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v expand0 /t REG_EXpand_sz /d \"dead%PATH%beef\" /f", &r
);
214 ok(r
== REG_EXIT_SUCCESS
, "got exit code %u\n", r
);
215 verify_reg(hkey
, "expand0", REG_EXPAND_SZ
, "dead%PATH%beef", 15, 0);
217 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v expand1 /t REG_EXpand_sz /d \"dead^%PATH^%beef\" /f", &r
);
218 ok(r
== REG_EXIT_SUCCESS
, "got exit code %u\n", r
);
219 verify_reg(hkey
, "expand1", REG_EXPAND_SZ
, "dead^%PATH^%beef", 17, 0);
221 run_reg_exe("reg add HKCU\\" KEY_BASE
" /t REG_EXPAND_SZ /v expand2 /f", &r
);
222 ok(r
== REG_EXIT_SUCCESS
, "got exit code %u\n", r
);
223 verify_reg(hkey
, "expand2", REG_EXPAND_SZ
, "", 1, 0);
225 run_reg_exe("reg add HKEY_CURRENT_USER\\" KEY_BASE
" /ve /t REG_EXPAND_SZ /d WineTEST /f", &r
);
226 ok(r
== REG_EXIT_SUCCESS
, "got exit code %u\n", r
);
227 verify_reg(hkey
, "", REG_EXPAND_SZ
, "WineTEST", 9, 0);
229 run_reg_exe("reg add HKCU\\" KEY_BASE
" /t REG_EXPAND_SZ /v expand3 /f /d \"\"", &r
);
230 ok(r
== REG_EXIT_SUCCESS
, "got exit code %u\n", r
);
231 verify_reg(hkey
, "expand3", REG_EXPAND_SZ
, "", 1, 0);
233 run_reg_exe("reg add HKCU\\" KEY_BASE
" /ve /t REG_EXPAND_SZ /f", &r
);
234 ok(r
== REG_EXIT_SUCCESS
, "got exit code %u, expected 0\n", r
);
235 verify_reg(hkey
, NULL
, REG_EXPAND_SZ
, "", 1, 0);
238 run_reg_exe("reg add HKCU\\" KEY_BASE
" /t REG_BINARY /v bin0 /f", &r
);
239 ok(r
== REG_EXIT_SUCCESS
, "got exit code %u\n", r
);
240 verify_reg(hkey
, "bin0", REG_BINARY
, buffer
, 0, 0);
242 run_reg_exe("reg add HKEY_CURRENT_USER\\" KEY_BASE
" /ve /t REG_BINARY /d deadbeef /f", &r
);
243 ok(r
== REG_EXIT_SUCCESS
, "got exit code %u\n", r
);
245 verify_reg(hkey
, "", REG_BINARY
, &dword
, sizeof(DWORD
), 0);
247 run_reg_exe("reg add HKCU\\" KEY_BASE
" /t REG_BINARY /v bin1 /f /d 0xDeAdBeEf", &r
);
248 ok(r
== REG_EXIT_FAILURE
, "got exit code %u\n", r
);
249 run_reg_exe("reg add HKCU\\" KEY_BASE
" /t REG_BINARY /v bin2 /f /d x01", &r
);
250 ok(r
== REG_EXIT_FAILURE
, "got exit code %u\n", r
);
251 run_reg_exe("reg add HKCU\\" KEY_BASE
" /t REG_BINARY /v bin3 /f /d 01x", &r
);
252 ok(r
== REG_EXIT_FAILURE
, "got exit code %u\n", r
);
254 run_reg_exe("reg add HKCU\\" KEY_BASE
" /t REG_BINARY /v bin4 /f /d DeAdBeEf0DD", &r
);
255 ok(r
== REG_EXIT_SUCCESS
, "got exit code %u\n", r
);
256 /* Remaining nibble prefixed */
257 buffer
[0] = 0x0d; buffer
[1] = 0xea; buffer
[2] = 0xdb;
258 buffer
[3] = 0xee; buffer
[4] = 0xf0; buffer
[5] = 0xdd;
259 /* Remaining nibble suffixed on winXP */
260 buffer
[6] = 0xde; buffer
[7] = 0xad; buffer
[8] = 0xbe;
261 buffer
[9] = 0xef; buffer
[10] = 0x0d; buffer
[11] = 0xd0;
263 err
= RegQueryValueExA(hkey
, "bin4", NULL
, &type
, (void *) (buffer
+12), &size
);
264 ok(err
== ERROR_SUCCESS
, "RegQueryValueEx failed: got %d\n", err
);
265 ok(type
== REG_BINARY
, "got wrong type %u\n", type
);
266 ok(size
== 6, "got wrong size %u\n", size
);
267 ok(memcmp(buffer
, buffer
+12, 6) == 0 ||
268 broken(memcmp(buffer
+6, buffer
+12, 6) == 0 /* WinXP */), "got wrong data\n");
270 run_reg_exe("reg add HKCU\\" KEY_BASE
" /t REG_BINARY /v bin5 /d \"\" /f", &r
);
271 ok(r
== REG_EXIT_SUCCESS
, "got exit code %u\n", r
);
272 verify_reg(hkey
, "bin5", REG_BINARY
, buffer
, 0, 0);
274 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v bin6 /t REG_BINARY /f /d", &r
);
275 ok(r
== REG_EXIT_FAILURE
, "got exit code %d, expected 1\n", r
);
277 run_reg_exe("reg add HKCU\\" KEY_BASE
" /ve /t REG_BINARY /f", &r
);
278 ok(r
== REG_EXIT_SUCCESS
, "got exit code %u, expected 0\n", r
);
279 verify_reg(hkey
, NULL
, REG_BINARY
, buffer
, 0, 0);
282 run_reg_exe("reg add HKCU\\" KEY_BASE
" /t REG_DWORD /f /d 12345678", &r
);
283 ok(r
== REG_EXIT_SUCCESS
|| broken(r
== REG_EXIT_FAILURE
/* WinXP */),
284 "got exit code %d, expected 0\n", r
);
286 if (r
== REG_EXIT_SUCCESS
)
287 verify_reg(hkey
, "", REG_DWORD
, &dword
, sizeof(dword
), 0);
289 win_skip("broken reg.exe detected\n");
291 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v dword0 /t REG_DWORD /f /d", &r
);
292 ok(r
== REG_EXIT_FAILURE
, "got exit code %d, expected 1\n", r
);
293 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v dword1 /t REG_DWORD /f", &r
);
294 ok(r
== REG_EXIT_FAILURE
|| broken(r
== REG_EXIT_SUCCESS
/* WinXP */),
295 "got exit code %d, expected 1\n", r
);
296 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v dword2 /t REG_DWORD /d zzz /f", &r
);
297 ok(r
== REG_EXIT_FAILURE
, "got exit code %d, expected 1\n", r
);
298 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v dword3 /t REG_DWORD /d deadbeef /f", &r
);
299 ok(r
== REG_EXIT_FAILURE
, "got exit code %d, expected 1\n", r
);
300 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v dword4 /t REG_DWORD /d 123xyz /f", &r
);
301 ok(r
== REG_EXIT_FAILURE
, "got exit code %d, expected 1\n", r
);
303 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v dword5 /t reg_dword /d 12345678 /f", &r
);
304 ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
306 verify_reg(hkey
, "dword5", REG_DWORD
, &dword
, sizeof(dword
), 0);
308 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v dword6 /t REG_DWORD /D 0123 /f", &r
);
309 ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
310 size
= sizeof(dword
);
311 err
= RegQueryValueExA(hkey
, "dword6", NULL
, &type
, (LPBYTE
)&dword
, &size
);
312 ok(err
== ERROR_SUCCESS
, "RegQueryValueEx failed: got %d\n", err
);
313 ok(type
== REG_DWORD
, "got wrong type %d, expected %d\n", type
, REG_DWORD
);
314 ok(size
== sizeof(DWORD
), "got wrong size %d, expected %d\n", size
, (int)sizeof(DWORD
));
315 ok(dword
== 123 || broken(dword
== 0123 /* WinXP */), "got wrong data %d, expected 123\n", dword
);
317 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v dword7 /t reg_dword /d 0xabcdefg /f", &r
);
318 ok(r
== REG_EXIT_FAILURE
, "got exit code %d, expected 1\n", r
);
320 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v dword8 /t REG_dword /d 0xdeadbeef /f", &r
);
321 ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
323 verify_reg(hkey
, "dword8", REG_DWORD
, &dword
, sizeof(dword
), 0);
325 run_reg_exe("reg add HKCU\\" KEY_BASE
" /t REG_DWORD /v dword9 /f /d -1", &r
);
326 ok(r
== REG_EXIT_FAILURE
|| broken(r
== REG_EXIT_SUCCESS
/* WinXP */), "got exit code %u\n", r
);
327 run_reg_exe("reg add HKCU\\" KEY_BASE
" /t REG_DWORD /v dword10 /f /d -0x1", &r
);
328 ok(r
== REG_EXIT_FAILURE
|| broken(r
== REG_EXIT_SUCCESS
/* WinXP */), "got exit code %u\n", r
);
330 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v dword8 /t REG_dword /d 0x01ffffffff /f", &r
);
331 ok(r
== REG_EXIT_FAILURE
|| broken(r
== REG_EXIT_SUCCESS
/* WinXP */), "got exit code %d\n", r
);
333 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v dword12 /t REG_DWORD /d 0xffffffff /f", &r
);
334 ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
336 verify_reg(hkey
, "dword12", REG_DWORD
, &dword
, sizeof(dword
), 0);
338 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v dword13 /t REG_DWORD /d 00x123 /f", &r
);
339 ok(r
== REG_EXIT_FAILURE
, "got exit code %d, expected 1\n", r
);
341 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v dword14 /t REG_DWORD /d 0X123 /f", &r
);
342 ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
344 verify_reg(hkey
, "dword14", REG_DWORD
, &dword
, sizeof(dword
), 0);
346 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v dword15 /t REG_DWORD /d 4294967296 /f", &r
);
347 ok(r
== REG_EXIT_FAILURE
|| broken(r
== REG_EXIT_SUCCESS
/* WinXP */), "got exit code %u\n", r
);
349 run_reg_exe("reg add HKCU\\" KEY_BASE
" /ve /t REG_DWORD /f", &r
);
350 ok(r
== REG_EXIT_FAILURE
|| broken(r
== REG_EXIT_SUCCESS
/* WinXP */), "got exit code %u\n", r
);
352 /* REG_DWORD_LITTLE_ENDIAN */
353 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v DWORD_LE /t REG_DWORD_LITTLE_ENDIAN /d 456 /f", &r
);
354 ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
356 verify_reg(hkey
, "DWORD_LE", REG_DWORD_LITTLE_ENDIAN
, &dword
, sizeof(dword
), 0);
358 /* REG_DWORD_BIG_ENDIAN */
359 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v DWORD_BE /t REG_DWORD_BIG_ENDIAN /d 456 /f", &r
);
360 ok(r
== REG_EXIT_SUCCESS
, "got exit code %u\n", r
);
362 verify_reg(hkey
, "DWORD_BE", REG_DWORD_BIG_ENDIAN
, &dword
, sizeof(dword
), 0);
363 /* REG_DWORD_BIG_ENDIAN is broken in every version of windows. It behaves like
364 * an ordinary REG_DWORD - that is little endian. GG */
366 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v DWORD_BE2 /t REG_DWORD_BIG_ENDIAN /f /d", &r
);
367 ok(r
== REG_EXIT_FAILURE
, "got exit code %u, expected 1\n", r
);
369 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v DWORD_BE3 /t REG_DWORD_BIG_ENDIAN /f", &r
);
370 ok(r
== REG_EXIT_FAILURE
|| broken(r
== REG_EXIT_SUCCESS
/* WinXP */), "got exit code %u\n", r
);
372 run_reg_exe("reg add HKCU\\" KEY_BASE
" /ve /t REG_DWORD_BIG_ENDIAN /f", &r
);
373 ok(r
== REG_EXIT_FAILURE
|| broken(r
== REG_EXIT_SUCCESS
/* WinXP */), "got exit code %u\n", r
);
376 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v multi0 /t REG_MULTI_SZ /d \"three\\0little\\0strings\" /f", &r
);
377 ok(r
== REG_EXIT_SUCCESS
, "got exit code %u, expected 0\n", r
);
378 memcpy(buffer
, "three\0little\0strings\0", 22);
379 verify_reg(hkey
, "multi0", REG_MULTI_SZ
, buffer
, 22, 0);
381 run_reg_exe("reg add HKCU\\" KEY_BASE
" /t REG_MULTI_SZ /v multi1 /s \"#\" /d \"three#little#strings\" /f", &r
);
382 ok(r
== REG_EXIT_SUCCESS
, "got exit code %u, expected 0\n", r
);
383 verify_reg(hkey
, "multi1", REG_MULTI_SZ
, buffer
, 22, 0);
385 run_reg_exe("reg add HKCU\\" KEY_BASE
" /t REG_MULTI_SZ /v multi2 /d \"\" /f", &r
);
386 ok(r
== REG_EXIT_SUCCESS
, "got exit code %u, expected 0\n", r
);
387 verify_reg(hkey
, "multi2", REG_MULTI_SZ
, &buffer
[21], 1, 0);
389 run_reg_exe("reg add HKCU\\" KEY_BASE
" /t REG_MULTI_SZ /v multi3 /f", &r
);
390 ok(r
== REG_EXIT_SUCCESS
, "got exit code %u\n", r
);
391 verify_reg(hkey
, "multi3", REG_MULTI_SZ
, &buffer
[21], 1, 0);
393 run_reg_exe("reg add HKCU\\" KEY_BASE
" /t REG_MULTI_SZ /v multi4 /s \"#\" /d \"threelittlestrings\" /f", &r
);
394 ok(r
== REG_EXIT_SUCCESS
, "got exit code %u, expected 0\n", r
);
395 verify_reg(hkey
, "multi4", REG_MULTI_SZ
, "threelittlestrings\0", 20, 0);
397 run_reg_exe("reg add HKCU\\" KEY_BASE
" /t REG_MULTI_SZ /v multi5 /s \"#randomgibberish\" /d \"three#little#strings\" /f", &r
);
398 ok(r
== REG_EXIT_FAILURE
, "got exit code %u\n", r
);
399 run_reg_exe("reg add HKCU\\" KEY_BASE
" /t REG_MULTI_SZ /v multi6 /s \"\\0\" /d \"three\\0little\\0strings\" /f", &r
);
400 ok(r
== REG_EXIT_FAILURE
, "got exit code %u\n", r
);
401 run_reg_exe("reg add HKCU\\" KEY_BASE
" /t REG_MULTI_SZ /v multi7 /s \"\" /d \"three#little#strings\" /f", &r
);
402 ok(r
== REG_EXIT_FAILURE
, "got exit code %u\n", r
);
403 run_reg_exe("reg add HKCU\\" KEY_BASE
" /t REG_MULTI_SZ /v multi8 /s \"#\" /d \"##\" /f", &r
);
404 ok(r
== REG_EXIT_FAILURE
, "got exit code %u\n", r
);
405 run_reg_exe("reg add HKCU\\" KEY_BASE
" /t REG_MULTI_SZ /v multi9 /s \"#\" /d \"two##strings\" /f", &r
);
406 ok(r
== REG_EXIT_FAILURE
, "got exit code %u\n", r
);
407 run_reg_exe("reg add HKCU\\" KEY_BASE
" /t REG_MULTI_SZ /v multi10 /s \"#\" /d \"#a\" /f", &r
);
408 ok(r
== REG_EXIT_FAILURE
, "got exit code %u\n", r
);
410 run_reg_exe("reg add HKCU\\" KEY_BASE
" /t REG_MULTI_SZ /v multi11 /s \"#\" /d \"a#\" /f", &r
);
411 ok(r
== REG_EXIT_SUCCESS
, "got exit code %u, expected 0\n", r
);
412 buffer
[0]='a'; buffer
[1]=0; buffer
[2]=0;
413 verify_reg(hkey
, "multi11", REG_MULTI_SZ
, buffer
, 3, 0);
415 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v multi12 /t REG_MULTI_SZ /f /d", &r
);
416 ok(r
== REG_EXIT_FAILURE
, "got exit code %d, expected 1\n", r
);
418 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v multi13 /t REG_MULTI_SZ /f /s", &r
);
419 ok(r
== REG_EXIT_FAILURE
, "got exit code %d, expected 1\n", r
);
421 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v multi14 /t REG_MULTI_SZ /d \"\\0a\" /f", &r
);
422 ok(r
== REG_EXIT_FAILURE
, "got exit code %u, expected 1\n", r
);
424 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v multi15 /t REG_MULTI_SZ /d \"a\\0\" /f", &r
);
425 ok(r
== REG_EXIT_SUCCESS
, "got exit code %u, expected 0\n", r
);
426 verify_reg(hkey
, "multi15", REG_MULTI_SZ
, buffer
, 3, 0);
428 run_reg_exe("reg add HKCU\\" KEY_BASE
" /t REG_MULTI_SZ /v multi16 /d \"two\\0\\0strings\" /f", &r
);
429 ok(r
== REG_EXIT_FAILURE
, "got exit code %u, expected 1\n", r
);
431 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v multi17 /t REG_MULTI_SZ /s \"#\" /d \"#\" /f", &r
);
432 ok(r
== REG_EXIT_SUCCESS
, "got exit code %u, expected 0\n", r
);
433 buffer
[0] = 0; buffer
[1] = 0;
434 verify_reg(hkey
, "multi17", REG_MULTI_SZ
, buffer
, 2, 0);
436 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v multi18 /t REG_MULTI_SZ /d \"\\0\" /f", &r
);
437 ok(r
== REG_EXIT_SUCCESS
, "got exit code %u, expected 0\n", r
);
438 verify_reg(hkey
, "multi18", REG_MULTI_SZ
, buffer
, 2, 0);
440 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v multi19 /t REG_MULTI_SZ /s \"#\" /d \"two\\0#strings\" /f", &r
);
441 ok(r
== REG_EXIT_SUCCESS
, "got exit code %u, expected 0\n", r
);
442 verify_reg(hkey
, "multi19", REG_MULTI_SZ
, "two\\0\0strings\0", 15, 0);
444 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v multi20 /t REG_MULTI_SZ /s \"#\" /d \"two#\\0strings\" /f", &r
);
445 ok(r
== REG_EXIT_SUCCESS
, "got exit code %u, expected 0\n", r
);
446 verify_reg(hkey
, "multi20", REG_MULTI_SZ
, "two\0\\0strings\0", 15, 0);
448 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v multi21 /t REG_MULTI_SZ /s \"#\" /d \"two\\0\\0strings\" /f", &r
);
449 ok(r
== REG_EXIT_SUCCESS
, "got exit code %u, expected 0\n", r
);
450 verify_reg(hkey
, "multi21", REG_MULTI_SZ
, "two\\0\\0strings\0", 16, 0);
452 run_reg_exe("reg add HKCU\\" KEY_BASE
" /ve /t REG_MULTI_SZ /f", &r
);
453 ok(r
== REG_EXIT_SUCCESS
, "got exit code %u, expected 0\n", r
);
454 verify_reg(hkey
, NULL
, REG_MULTI_SZ
, buffer
, 1, 0);
458 /* Test duplicate switches */
459 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v dup1 /t REG_DWORD /d 123 /f /t REG_SZ", &r
);
460 ok(r
== REG_EXIT_FAILURE
|| broken(r
== REG_EXIT_SUCCESS
/* WinXP */),
461 "got exit code %u, expected 1\n", r
);
463 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v dup2 /t REG_DWORD /d 123 /f /d 456", &r
);
464 ok(r
== REG_EXIT_FAILURE
, "got exit code %u, expected 1\n", r
);
466 /* Test invalid switches */
467 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v invalid1 /a", &r
);
468 ok(r
== REG_EXIT_FAILURE
, "got exit code %u, expected 1\n", r
);
470 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v invalid2 /ae", &r
);
471 ok(r
== REG_EXIT_FAILURE
, "got exit code %u, expected 1\n", r
);
473 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v invalid3 /", &r
);
474 ok(r
== REG_EXIT_FAILURE
, "got exit code %u, expected 1\n", r
);
476 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v invalid4 -", &r
);
477 ok(r
== REG_EXIT_FAILURE
, "got exit code %u, expected 1\n", r
);
479 err
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
);
480 ok(err
== ERROR_SUCCESS
, "got %d\n", err
);
483 static void test_delete(void)
488 const DWORD deadbeef
= 0xdeadbeef;
490 run_reg_exe("reg delete", &r
);
491 ok(r
== REG_EXIT_FAILURE
, "got exit code %d, expected 1\n", r
);
493 run_reg_exe("reg delete /?", &r
);
494 ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
496 err
= RegCreateKeyExA(HKEY_CURRENT_USER
, KEY_BASE
, 0, NULL
, 0, KEY_ALL_ACCESS
, NULL
, &hkey
, NULL
);
497 ok(err
== ERROR_SUCCESS
, "got %d\n", err
);
499 err
= RegSetValueExA(hkey
, "foo", 0, REG_DWORD
, (LPBYTE
)&deadbeef
, sizeof(deadbeef
));
500 ok(err
== ERROR_SUCCESS
, "got %d\n" ,err
);
502 err
= RegSetValueExA(hkey
, "bar", 0, REG_DWORD
, (LPBYTE
)&deadbeef
, sizeof(deadbeef
));
503 ok(err
== ERROR_SUCCESS
, "got %d\n" ,err
);
505 err
= RegSetValueExA(hkey
, "", 0, REG_DWORD
, (LPBYTE
)&deadbeef
, sizeof(deadbeef
));
506 ok(err
== ERROR_SUCCESS
, "got %d\n" ,err
);
508 err
= RegCreateKeyExA(hkey
, "subkey", 0, NULL
, 0, KEY_ALL_ACCESS
, NULL
, &hsubkey
, NULL
);
509 ok(err
== ERROR_SUCCESS
, "got %d\n" ,err
);
510 RegCloseKey(hsubkey
);
512 run_reg_exe("reg delete HKCU\\" KEY_BASE
" /v bar /f", &r
);
513 ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
514 verify_reg_nonexist(hkey
, "bar");
516 run_reg_exe("reg delete HKCU\\" KEY_BASE
" /ve /f", &r
);
517 ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
518 verify_reg_nonexist(hkey
, "");
520 run_reg_exe("reg delete HKCU\\" KEY_BASE
" /va /f", &r
);
521 ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
522 verify_reg_nonexist(hkey
, "foo");
523 err
= RegOpenKeyExA(hkey
, "subkey", 0, KEY_READ
, &hsubkey
);
524 ok(err
== ERROR_SUCCESS
, "got %d\n", err
);
525 RegCloseKey(hsubkey
);
528 run_reg_exe("reg delete HKCU\\" KEY_BASE
" /f", &r
);
529 ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
530 err
= RegOpenKeyExA(HKEY_CURRENT_USER
, KEY_BASE
, 0, KEY_READ
, &hkey
);
531 ok(err
== ERROR_FILE_NOT_FOUND
, "got %d\n", err
);
533 run_reg_exe("reg delete HKCU\\" KEY_BASE
" /f", &r
);
534 ok(r
== REG_EXIT_FAILURE
, "got exit code %u\n", r
);
537 static void test_query(void)
542 const char hello
[] = "Hello";
543 const char world
[] = "World";
544 const char empty1
[] = "Empty1";
545 const char empty2
[] = "Empty2";
546 const DWORD dword1
= 0x123;
547 const DWORD dword2
= 0xabc;
549 run_reg_exe("reg query", &r
);
550 ok(r
== REG_EXIT_FAILURE
, "got exit code %d, expected 1\n", r
);
552 run_reg_exe("reg query /?", &r
);
553 ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
555 /* Create a test key */
556 err
= RegCreateKeyExA(HKEY_CURRENT_USER
, KEY_BASE
, 0, NULL
, 0, KEY_ALL_ACCESS
, NULL
, &key
, NULL
);
557 ok(err
== ERROR_SUCCESS
, "got %d, expected 0\n", err
);
559 run_reg_exe("reg query HKCU\\" KEY_BASE
" /ve", &r
);
560 ok(r
== REG_EXIT_SUCCESS
|| broken(r
== REG_EXIT_FAILURE
/* WinXP */),
561 "got exit code %d, expected 0\n", r
);
563 err
= RegSetValueExA(key
, "Test", 0, REG_SZ
, (BYTE
*)hello
, sizeof(hello
));
564 ok(err
== ERROR_SUCCESS
, "got %d, expected 0\n", err
);
566 err
= RegSetValueExA(key
, "Wine", 0, REG_DWORD
, (BYTE
*)&dword1
, sizeof(dword1
));
567 ok(err
== ERROR_SUCCESS
, "got %d, expected 0\n", err
);
569 err
= RegSetValueExA(key
, NULL
, 0, REG_SZ
, (BYTE
*)empty1
, sizeof(empty1
));
570 ok(err
== ERROR_SUCCESS
, "got %d, expected 0\n", err
);
572 run_reg_exe("reg query HKCU\\" KEY_BASE
, &r
);
573 ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
575 run_reg_exe("reg query HKCU\\" KEY_BASE
" /v", &r
);
576 ok(r
== REG_EXIT_FAILURE
, "got exit code %d, expected 1\n", r
);
578 run_reg_exe("reg query HKCU\\" KEY_BASE
" /v Missing", &r
);
579 ok(r
== REG_EXIT_FAILURE
, "got exit code %d, expected 1\n", r
);
581 run_reg_exe("reg query HKCU\\" KEY_BASE
" /v Test", &r
);
582 ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
584 run_reg_exe("reg query HKCU\\" KEY_BASE
" /v Wine", &r
);
585 ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
587 run_reg_exe("reg query HKCU\\" KEY_BASE
" /ve", &r
);
588 ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
590 /* Create a test subkey */
591 err
= RegCreateKeyExA(key
, "Subkey", 0, NULL
, 0, KEY_ALL_ACCESS
, NULL
, &subkey
, NULL
);
592 ok(err
== ERROR_SUCCESS
, "got %d\n", err
);
594 err
= RegSetValueExA(subkey
, "Test", 0, REG_SZ
, (BYTE
*)world
, sizeof(world
));
595 ok(err
== ERROR_SUCCESS
, "got %d, expected 0\n", err
);
597 err
= RegSetValueExA(subkey
, "Wine", 0, REG_DWORD
, (BYTE
*)&dword2
, sizeof(dword2
));
598 ok(err
== ERROR_SUCCESS
, "got %d, expected 0\n", err
);
600 err
= RegSetValueExA(subkey
, NULL
, 0, REG_SZ
, (BYTE
*)empty2
, sizeof(empty2
));
601 ok(err
== ERROR_SUCCESS
, "got %d, expected 0\n", err
);
603 err
= RegCloseKey(subkey
);
604 ok(err
== ERROR_SUCCESS
, "got %d, expected 0\n", err
);
606 run_reg_exe("reg query HKCU\\" KEY_BASE
"\\subkey", &r
);
607 ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
609 run_reg_exe("reg query HKCU\\" KEY_BASE
"\\subkey /v Test", &r
);
610 ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
612 run_reg_exe("reg query HKCU\\" KEY_BASE
"\\subkey /v Wine", &r
);
613 ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
615 run_reg_exe("reg query HKCU\\" KEY_BASE
"\\subkey /ve", &r
);
616 ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
619 run_reg_exe("reg query HKCU\\" KEY_BASE
" /s", &r
);
620 ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
622 run_reg_exe("reg query HKCU\\" KEY_BASE
" /v Test /s", &r
);
623 ok(r
== REG_EXIT_SUCCESS
|| r
== REG_EXIT_FAILURE
/* WinXP */,
624 "got exit code %d, expected 0\n", r
);
626 run_reg_exe("reg query HKCU\\" KEY_BASE
" /v Wine /s", &r
);
627 ok(r
== REG_EXIT_SUCCESS
|| r
== REG_EXIT_FAILURE
/* WinXP */,
628 "got exit code %d, expected 0\n", r
);
630 run_reg_exe("reg query HKCU\\" KEY_BASE
" /ve /s", &r
);
631 ok(r
== REG_EXIT_SUCCESS
|| r
== REG_EXIT_FAILURE
/* WinXP */,
632 "got exit code %d, expected 0\n", r
);
634 /* Clean-up, then query */
635 err
= RegDeleteKeyA(key
, "subkey");
636 ok(err
== ERROR_SUCCESS
, "got %d, expected 0\n", err
);
638 err
= RegCloseKey(key
);
639 ok(err
== ERROR_SUCCESS
, "got %d, expected 0\n", err
);
641 run_reg_exe("reg query HKCU\\" KEY_BASE
"\\subkey", &r
);
642 ok(r
== REG_EXIT_FAILURE
, "got exit code %d, expected 1\n", r
);
644 err
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
);
645 ok(err
== ERROR_SUCCESS
, "got %d, expected 0\n", err
);
647 run_reg_exe("reg query HKCU\\" KEY_BASE
, &r
);
648 ok(r
== REG_EXIT_FAILURE
, "got exit code %d, expected 1\n", r
);
651 static void test_v_flags(void)
655 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v Wine /ve", &r
);
656 ok(r
== REG_EXIT_FAILURE
, "got exit code %d, expected 1\n", r
);
658 run_reg_exe("reg delete HKCU\\" KEY_BASE
" /v Wine /ve", &r
);
659 ok(r
== REG_EXIT_FAILURE
, "got exit code %d, expected 1\n", r
);
661 run_reg_exe("reg delete HKCU\\" KEY_BASE
" /v Wine /va", &r
);
662 ok(r
== REG_EXIT_FAILURE
, "got exit code %d, expected 1\n", r
);
664 run_reg_exe("reg delete HKCU\\" KEY_BASE
" /ve /va", &r
);
665 ok(r
== REG_EXIT_FAILURE
, "got exit code %d, expected 1\n", r
);
668 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v", &r
);
669 ok(r
== REG_EXIT_FAILURE
, "got exit code %d, expected 1\n", r
);
671 run_reg_exe("reg add HKCU\\" KEY_BASE
" /d Test /f /v", &r
);
672 ok(r
== REG_EXIT_FAILURE
, "got exit code %d, expected 1\n", r
);
674 run_reg_exe("reg delete HKCU\\" KEY_BASE
" /v", &r
);
675 ok(r
== REG_EXIT_FAILURE
, "got exit code %d, expected 1\n", r
);
677 run_reg_exe("reg delete HKCU\\" KEY_BASE
" /f /v", &r
);
678 ok(r
== REG_EXIT_FAILURE
, "got exit code %d, expected 1\n", r
);
680 /* Multiple /v switches */
681 run_reg_exe("reg add HKCU\\" KEY_BASE
" /v Wine /t REG_DWORD /d 0x1 /v Test /f", &r
);
682 ok(r
== REG_EXIT_FAILURE
, "got exit code %d, expected 1\n", r
);
684 run_reg_exe("reg delete HKCU\\" KEY_BASE
" /v Wine /v Test /f", &r
);
685 ok(r
== REG_EXIT_FAILURE
, "got exit code %d, expected 1\n", r
);
688 static BOOL
write_reg_file(const char *value
, char *tmp_name
)
690 static const char regedit4
[] = "REGEDIT4";
691 static const char key
[] = "[HKEY_CURRENT_USER\\" KEY_BASE
"]";
692 char file_data
[MAX_PATH
], tmp_path
[MAX_PATH
];
697 sprintf(file_data
, "%s\n\n%s\n%s\n", regedit4
, key
, value
);
699 GetTempPathA(MAX_PATH
, tmp_path
);
700 GetTempFileNameA(tmp_path
, "reg", 0, tmp_name
);
702 hfile
= CreateFileA(tmp_name
, GENERIC_WRITE
, 0, NULL
, CREATE_ALWAYS
, FILE_ATTRIBUTE_NORMAL
, 0);
703 if (hfile
== INVALID_HANDLE_VALUE
)
706 ret
= WriteFile(hfile
, file_data
, strlen(file_data
), &written
, NULL
);
711 #define test_import_str(c,r) test_import_str_(__LINE__,c,r)
712 static BOOL
test_import_str_(unsigned line
, const char *file_contents
, DWORD
*rc
)
718 regfile
= CreateFileA("test.reg", GENERIC_WRITE
, 0, NULL
, CREATE_ALWAYS
,
719 FILE_ATTRIBUTE_NORMAL
, NULL
);
720 lok(regfile
!= INVALID_HANDLE_VALUE
, "Failed to create test.reg file\n");
721 if(regfile
== INVALID_HANDLE_VALUE
)
724 ret
= WriteFile(regfile
, file_contents
, strlen(file_contents
), &written
, NULL
);
725 lok(ret
, "WriteFile failed: %u\n", GetLastError());
726 CloseHandle(regfile
);
728 run_reg_exe("reg import test.reg", rc
);
730 ret
= DeleteFileA("test.reg");
731 lok(ret
, "DeleteFile failed: %u\n", GetLastError());
736 #define test_import_wstr(c,r) test_import_wstr_(__LINE__,c,r)
737 static BOOL
test_import_wstr_(unsigned line
, const char *file_contents
, DWORD
*rc
)
739 int lenA
, len
, memsize
;
745 lenA
= strlen(file_contents
);
747 len
= MultiByteToWideChar(CP_UTF8
, 0, file_contents
, lenA
, NULL
, 0);
748 memsize
= len
* sizeof(WCHAR
);
749 wstr
= HeapAlloc(GetProcessHeap(), 0, memsize
);
750 if (!wstr
) return FALSE
;
751 MultiByteToWideChar(CP_UTF8
, 0, file_contents
, lenA
, wstr
, memsize
);
753 regfile
= CreateFileA("test.reg", GENERIC_WRITE
, 0, NULL
, CREATE_ALWAYS
,
754 FILE_ATTRIBUTE_NORMAL
, NULL
);
755 lok(regfile
!= INVALID_HANDLE_VALUE
, "Failed to create test.reg file\n");
756 if(regfile
== INVALID_HANDLE_VALUE
)
759 ret
= WriteFile(regfile
, wstr
, memsize
, &written
, NULL
);
760 lok(ret
, "WriteFile failed: %u\n", GetLastError());
761 CloseHandle(regfile
);
763 HeapFree(GetProcessHeap(), 0, wstr
);
765 run_reg_exe("reg import test.reg", rc
);
767 ret
= DeleteFileA("test.reg");
768 lok(ret
, "DeleteFile failed: %u\n", GetLastError());
773 static void test_import(void)
775 DWORD r
, dword
= 0x123;
776 char test1_reg
[MAX_PATH
], test2_reg
[MAX_PATH
];
777 char cmdline
[MAX_PATH
];
778 char test_string
[] = "Test string";
782 run_reg_exe("reg import", &r
);
783 ok(r
== REG_EXIT_FAILURE
, "got exit code %d, expected 1\n", r
);
785 run_reg_exe("reg import /?", &r
);
786 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
788 run_reg_exe("reg import missing.reg", &r
);
789 ok(r
== REG_EXIT_FAILURE
, "got exit code %d, expected 1\n", r
);
791 /* Create test files */
792 ok(write_reg_file("\"Wine\"=dword:00000123", test1_reg
), "Failed to write registry file\n");
793 ok(write_reg_file("@=\"Test string\"", test2_reg
), "Failed to write registry file\n");
795 sprintf(cmdline
, "reg import %s", test1_reg
);
796 run_reg_exe(cmdline
, &r
);
797 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
799 sprintf(cmdline
, "reg import %s", test2_reg
);
800 run_reg_exe(cmdline
, &r
);
801 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
803 err
= RegOpenKeyExA(HKEY_CURRENT_USER
, KEY_BASE
, 0, KEY_READ
, &hkey
);
804 todo_wine
ok(err
== ERROR_SUCCESS
, "got %d, expected 0\n", err
);
806 todo_wine
verify_reg(hkey
, "Wine", REG_DWORD
, &dword
, sizeof(dword
), 0);
807 todo_wine
verify_reg(hkey
, "", REG_SZ
, test_string
, sizeof(test_string
), 0);
809 err
= RegCloseKey(hkey
);
810 todo_wine
ok(err
== ERROR_SUCCESS
, "got %d, expected 0\n", err
);
812 err
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
);
813 todo_wine
ok(err
== ERROR_SUCCESS
, "got %d, expected 0\n", err
);
815 sprintf(cmdline
, "reg import %s %s", test1_reg
, test2_reg
);
816 run_reg_exe(cmdline
, &r
);
817 ok(r
== REG_EXIT_FAILURE
, "got exit code %d, expected 1\n", r
);
819 DeleteFileA(test1_reg
);
820 DeleteFileA(test2_reg
);
822 /* Test file contents */
823 test_import_str("regedit\n", &r
);
824 ok(r
== REG_EXIT_FAILURE
|| broken(r
== REG_EXIT_SUCCESS
) /* WinXP */,
825 "got exit code %d, expected 1\n", r
);
827 test_import_str("regedit4\n", &r
);
828 ok(r
== REG_EXIT_FAILURE
|| broken(r
== REG_EXIT_SUCCESS
) /* WinXP */,
829 "got exit code %d, expected 1\n", r
);
831 test_import_str("REGEDIT", &r
);
832 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
834 test_import_str("REGEDIT\n", &r
);
835 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
837 test_import_str("REGEDIT4\n", &r
);
838 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
840 test_import_str(" REGEDIT4\n", &r
);
841 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
843 test_import_str("\tREGEDIT4\n", &r
);
844 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
846 test_import_str("\nREGEDIT4\n", &r
);
847 ok(r
== REG_EXIT_FAILURE
|| broken(r
== REG_EXIT_SUCCESS
) /* WinXP */,
848 "got exit code %d, expected 1\n", r
);
850 test_import_str("AREGEDIT4\n", &r
);
851 ok(r
== REG_EXIT_FAILURE
|| broken(r
== REG_EXIT_SUCCESS
) /* WinXP */,
852 "got exit code %d, expected 1\n", r
);
854 test_import_str("1REGEDIT4\n", &r
);
855 ok(r
== REG_EXIT_FAILURE
|| broken(r
== REG_EXIT_SUCCESS
) /* WinXP */,
856 "got exit code %d, expected 1\n", r
);
858 test_import_str("REGEDIT3\n", &r
);
859 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
861 test_import_str("REGEDIT5\n", &r
);
862 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
864 test_import_str("REGEDIT9\n", &r
);
865 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
867 test_import_str("REGEDIT 4\n", &r
);
868 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
870 test_import_str("REGEDIT4 FOO\n", &r
);
871 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
873 test_import_str("REGEDIT4\n"
874 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n", &r
);
875 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
877 err
= RegOpenKeyExA(HKEY_CURRENT_USER
, KEY_BASE
, 0, KEY_READ
, &hkey
);
878 todo_wine
ok(err
== ERROR_SUCCESS
, "got %d, expected 0\n", err
);
880 test_import_str("REGEDIT4\n"
881 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
882 "\"Test1\"=\"Value1\"\n", &r
);
883 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
884 todo_wine
verify_reg(hkey
, "Test1", REG_SZ
, "Value1", 7, 0);
886 test_import_str("REGEDIT4\n"
887 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
888 "\"Test2\"=\"Value2\"\n\n", &r
);
889 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
890 todo_wine
verify_reg(hkey
, "Test2", REG_SZ
, "Value2", 7, 0);
892 test_import_str("REGEDIT4\n\n"
893 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
894 "\"Test3\"=\"Value3\"\n\n", &r
);
895 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
896 todo_wine
verify_reg(hkey
, "Test3", REG_SZ
, "Value3", 7, 0);
898 test_import_str("Windows Registry Editor Version 4.00\n", &r
);
899 ok(r
== REG_EXIT_FAILURE
|| broken(r
== REG_EXIT_SUCCESS
) /* WinXP */,
900 "got exit code %d, expected 1\n", r
);
902 test_import_str("Windows Registry Editor Version 5.00\n", &r
);
903 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
905 test_import_str("Windows Registry Editor Version 5.00\n"
906 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
907 "\"Test4\"=\"Value4\"\n", &r
);
908 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
909 todo_wine
verify_reg(hkey
, "Test4", REG_SZ
, "Value4", 7, 0);
911 test_import_str("Windows Registry Editor Version 5.00\n"
912 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
913 "\"Test5\"=\"Value5\"\n\n", &r
);
914 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
915 todo_wine
verify_reg(hkey
, "Test5", REG_SZ
, "Value5", 7, 0);
917 test_import_str("Windows Registry Editor Version 5.00\n\n"
918 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
919 "\"Test6\"=\"Value6\"\n\n", &r
);
920 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
921 todo_wine
verify_reg(hkey
, "Test6", REG_SZ
, "Value6", 7, 0);
923 test_import_str("REGEDIT4\n\n"
924 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
925 "\"Line1\"=\"Value1\"\n\n"
926 "\"Line2\"=\"Value2\"\n\n\n"
927 "\"Line3\"=\"Value3\"\n\n\n\n"
928 "\"Line4\"=\"Value4\"\n\n", &r
);
929 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
930 todo_wine
verify_reg(hkey
, "Line1", REG_SZ
, "Value1", 7, TODO_REG_TYPE
|TODO_REG_SIZE
|TODO_REG_DATA
);
931 todo_wine
verify_reg(hkey
, "Line2", REG_SZ
, "Value2", 7, TODO_REG_TYPE
|TODO_REG_SIZE
|TODO_REG_DATA
);
932 todo_wine
verify_reg(hkey
, "Line3", REG_SZ
, "Value3", 7, TODO_REG_TYPE
|TODO_REG_SIZE
|TODO_REG_DATA
);
933 todo_wine
verify_reg(hkey
, "Line4", REG_SZ
, "Value4", 7, TODO_REG_TYPE
|TODO_REG_SIZE
|TODO_REG_DATA
);
935 test_import_str("REGEDIT4\n\n"
936 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
937 "\"Wine1\"=dword:00000782\n\n"
938 "\"Wine2\"=\"Test Value\"\n"
939 "\"Wine3\"=hex(7):4c,69,6e,65,20,\\\n"
940 " 63,6f,6e,63,61,74,65,6e,61,74,69,6f,6e,00,00\n"
944 "\"Wine4\"=dword:12345678\n\n", &r
);
945 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
947 todo_wine
verify_reg(hkey
, "Wine1", REG_DWORD
, &dword
, sizeof(dword
),
948 TODO_REG_TYPE
|TODO_REG_SIZE
|TODO_REG_DATA
);
949 todo_wine
verify_reg(hkey
, "Wine2", REG_SZ
, "Test Value", 11,
950 TODO_REG_TYPE
|TODO_REG_SIZE
|TODO_REG_DATA
);
951 todo_wine
verify_reg(hkey
, "Wine3", REG_MULTI_SZ
, "Line concatenation\0", 20,
952 TODO_REG_TYPE
|TODO_REG_SIZE
|TODO_REG_DATA
);
953 todo_wine
verify_reg(hkey
, "", REG_SZ
, "Test", 5,
954 TODO_REG_TYPE
|TODO_REG_SIZE
|TODO_REG_DATA
);
956 todo_wine
verify_reg(hkey
, "Wine4", REG_DWORD
, &dword
, sizeof(dword
),
957 TODO_REG_TYPE
|TODO_REG_SIZE
|TODO_REG_DATA
);
959 test_import_str("REGEDIT4\n\n"
960 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
961 "\"Wine5\"=\"No newline\"", &r
);
962 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
963 err
= RegQueryValueExA(hkey
, "Wine5", NULL
, NULL
, NULL
, NULL
);
964 todo_wine
ok(err
== ERROR_SUCCESS
|| broken(err
== ERROR_FILE_NOT_FOUND
/* WinXP */),
965 "got %d, expected 0\n", err
);
966 if (err
== ERROR_SUCCESS
)
967 verify_reg(hkey
, "Wine5", REG_SZ
, "No newline", 11, 0);
969 test_import_str("REGEDIT4\n\n"
970 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
971 "\"Wine6\"=dword:00000050\n\n"
972 "\"Wine7\"=\"No newline\"", &r
);
973 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
975 todo_wine
verify_reg(hkey
, "Wine6", REG_DWORD
, &dword
, sizeof(dword
),
976 TODO_REG_TYPE
|TODO_REG_SIZE
|TODO_REG_DATA
);
977 err
= RegQueryValueExA(hkey
, "Wine7", NULL
, NULL
, NULL
, NULL
);
978 todo_wine
ok(err
== ERROR_SUCCESS
|| broken(err
== ERROR_FILE_NOT_FOUND
/* WinXP */),
979 "got %d, expected 0\n", err
);
980 if (err
== ERROR_SUCCESS
)
981 verify_reg(hkey
, "Wine7", REG_SZ
, "No newline", 11, 0);
983 test_import_str("REGEDIT4\n\n"
984 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
986 "\"Wine8\"=\"Line 1\"\n"
988 "\"Wine9\"=\"Line 2\"\n\n", &r
);
989 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
990 todo_wine
verify_reg(hkey
, "Wine8", REG_SZ
, "Line 1", 7, 0);
991 todo_wine
verify_reg(hkey
, "Wine9", REG_SZ
, "Line 2", 7, 0);
993 test_import_str("REGEDIT4\n\n"
994 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
995 "\"Wine10\"=\"Value 1\"#comment\n"
996 "\"Wine11\"=\"Value 2\";comment\n"
997 "\"Wine12\"=dword:01020304 #comment\n"
998 "\"Wine13\"=dword:02040608 ;comment\n\n", &r
);
999 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1000 todo_wine
verify_reg_nonexist(hkey
, "Wine10");
1001 todo_wine
verify_reg(hkey
, "Wine11", REG_SZ
, "Value 2", 8, 0);
1002 todo_wine
verify_reg_nonexist(hkey
, "Wine12");
1004 todo_wine
verify_reg(hkey
, "Wine13", REG_DWORD
, &dword
, sizeof(dword
), 0);
1006 test_import_str("REGEDIT4\n\n"
1007 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1008 "\"Wine14\"=hex(7):4c,69,6e,65,20,\\\n"
1010 " 63,6f,6e,63,61,74,65,6e,61,74,69,6f,6e,00,00\n"
1011 "\"Wine15\"=\"A valid line\"\n"
1012 "\"Wine16\"=hex(7):4c,69,6e,65,20,\\\n"
1014 " 63,6f,6e,63,61,74,65,6e,61,74,69,6f,6e,00,00\n"
1015 "\"Wine17\"=\"Another valid line\"\n\n", &r
);
1016 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1017 todo_wine
verify_reg_nonexist(hkey
, "Wine14");
1018 todo_wine
verify_reg(hkey
, "Wine15", REG_SZ
, "A valid line", 13, 0);
1019 todo_wine
verify_reg(hkey
, "Wine16", REG_MULTI_SZ
, "Line concatenation\0", 20, 0);
1020 todo_wine
verify_reg(hkey
, "Wine17", REG_SZ
, "Another valid line", 19, 0);
1022 test_import_str("REGEDIT4\n\n"
1023 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1024 "#\"Comment1\"=\"Value 1\"\n"
1025 ";\"Comment2\"=\"Value 2\"\n"
1026 " #\"Comment3\"=\"Value 3\"\n"
1027 " ;\"Comment4\"=\"Value 4\"\n"
1028 "\"Wine18\"=\"Value 6\"#\"Comment5\"=\"Value 5\"\n"
1029 "\"Wine19\"=\"Value 7\";\"Comment6\"=\"Value 6\"\n\n", &r
);
1030 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1031 todo_wine
verify_reg_nonexist(hkey
, "Comment1");
1032 todo_wine
verify_reg_nonexist(hkey
, "Comment2");
1033 todo_wine
verify_reg_nonexist(hkey
, "Comment3");
1034 todo_wine
verify_reg_nonexist(hkey
, "Comment4");
1035 todo_wine
verify_reg_nonexist(hkey
, "Wine18");
1036 todo_wine
verify_reg_nonexist(hkey
, "Comment5");
1037 todo_wine
verify_reg(hkey
, "Wine19", REG_SZ
, "Value 7", 8, TODO_REG_SIZE
|TODO_REG_DATA
);
1038 todo_wine
verify_reg_nonexist(hkey
, "Comment6");
1040 test_import_str("REGEDIT4\n\n"
1041 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1042 "\"Wine20\"=#\"Value 8\"\n"
1043 "\"Wine21\"=;\"Value 9\"\n"
1044 "\"Wine22\"=\"#comment1\"\n"
1045 "\"Wine23\"=\";comment2\"\n"
1046 "\"Wine24\"=\"Value#comment3\"\n"
1047 "\"Wine25\"=\"Value;comment4\"\n"
1048 "\"Wine26\"=\"Value #comment5\"\n"
1049 "\"Wine27\"=\"Value ;comment6\"\n"
1050 "\"Wine28\"=#dword:00000001\n"
1051 "\"Wine29\"=;dword:00000002\n"
1052 "\"Wine30\"=dword:00000003#comment\n"
1053 "\"Wine31\"=dword:00000004;comment\n\n", &r
);
1054 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1055 todo_wine
verify_reg_nonexist(hkey
, "Wine20");
1056 todo_wine
verify_reg_nonexist(hkey
, "Wine21");
1057 todo_wine
verify_reg(hkey
, "Wine22", REG_SZ
, "#comment1", 10, 0);
1058 todo_wine
verify_reg(hkey
, "Wine23", REG_SZ
, ";comment2", 10, 0);
1059 todo_wine
verify_reg(hkey
, "Wine24", REG_SZ
, "Value#comment3", 15, 0);
1060 todo_wine
verify_reg(hkey
, "Wine25", REG_SZ
, "Value;comment4", 15, 0);
1061 todo_wine
verify_reg(hkey
, "Wine26", REG_SZ
, "Value #comment5", 16, 0);
1062 todo_wine
verify_reg(hkey
, "Wine27", REG_SZ
, "Value ;comment6", 16, 0);
1063 todo_wine
verify_reg_nonexist(hkey
, "Wine28");
1064 todo_wine
verify_reg_nonexist(hkey
, "Wine29");
1065 todo_wine
verify_reg_nonexist(hkey
, "Wine30");
1067 todo_wine
verify_reg(hkey
, "Wine31", REG_DWORD
, &dword
, sizeof(dword
), 0);
1069 test_import_str("REGEDIT4\n\n"
1070 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1071 "\"Multi-Line1\"=hex(7):4c,69,6e,65,20,\\\n"
1072 " 63,6f,6e,\\;comment\n"
1073 " 63,61,74,\\;comment\n"
1074 " 65,6e,61,74,69,6f,6e,00,00\n\n", &r
);
1075 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1076 todo_wine
verify_reg(hkey
, "Multi-Line1", REG_MULTI_SZ
, "Line concatenation\0", 20, 0);
1078 test_import_str("REGEDIT4\n\n"
1079 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1080 "\"Multi-Line2\"=hex(7):4c,69,6e,65,20,\\\n"
1081 " 63,6f,6e,\\;comment\n"
1082 " 63,61,74,;comment\n"
1083 " 65,6e,61,74,69,6f,6e,00,00\n\n", &r
);
1084 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1085 todo_wine
verify_reg(hkey
, "Multi-Line2", REG_MULTI_SZ
, "Line concat", 12, 0);
1087 test_import_str("REGEDIT4\n\n"
1088 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1089 "\"double\\\"quote\"=\"valid \\\"or\\\" not\"\n"
1090 "\"single'quote\"=dword:00000008\n\n", &r
);
1091 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1092 todo_wine
verify_reg(hkey
, "double\"quote", REG_SZ
, "valid \"or\" not", 15, 0);
1094 todo_wine
verify_reg(hkey
, "single'quote", REG_DWORD
, &dword
, sizeof(dword
), 0);
1096 test_import_str("REGEDIT4\n\n"
1097 "[HKEY_CURRENT_USER\\" KEY_BASE
"\\Subkey\"1]\n"
1098 "\"Wine\\\\31\"=\"Test value\"\n\n", &r
);
1099 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1100 err
= RegOpenKeyExA(hkey
, "Subkey\"1", 0, KEY_READ
, &subkey
);
1101 todo_wine
ok(err
== ERROR_SUCCESS
, "got %d, expected 0\n", err
);
1102 todo_wine
verify_reg(subkey
, "Wine\\31", REG_SZ
, "Test value", 11, 0);
1103 err
= RegCloseKey(subkey
);
1104 todo_wine
ok(err
== ERROR_SUCCESS
, "got %d, expected 0\n", err
);
1105 err
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
"\\Subkey\"1");
1106 todo_wine
ok(err
== ERROR_SUCCESS
, "got %d, expected 0\n", err
);
1108 test_import_str("REGEDIT4\n\n"
1109 "[HKEY_CURRENT_USER\\" KEY_BASE
"\\Subkey/2]\n"
1110 "\"123/\\\"4;'5\"=\"Random value name\"\n\n", &r
);
1111 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1112 err
= RegOpenKeyExA(hkey
, "Subkey/2", 0, KEY_READ
, &subkey
);
1113 todo_wine
ok(err
== ERROR_SUCCESS
, "got %d, expected 0\n", err
);
1114 todo_wine
verify_reg(subkey
, "123/\"4;'5", REG_SZ
, "Random value name", 18, 0);
1115 err
= RegCloseKey(subkey
);
1116 todo_wine
ok(err
== ERROR_SUCCESS
, "got %d, expected 0\n", err
);
1117 err
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
"\\Subkey/2");
1118 todo_wine
ok(err
== ERROR_SUCCESS
, "got %d, expected 0\n", err
);
1120 err
= RegCloseKey(hkey
);
1121 todo_wine
ok(err
== ERROR_SUCCESS
, "got %d, expected 0\n", err
);
1123 err
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
);
1124 todo_wine
ok(err
== ERROR_SUCCESS
, "got %d, expected 0\n", err
);
1126 /* Test file contents - Unicode */
1127 test_import_wstr("REGEDIT\n", &r
);
1128 ok(r
== REG_EXIT_FAILURE
|| broken(r
== REG_EXIT_SUCCESS
) /* WinXP */,
1129 "got exit code %d, expected 1\n", r
);
1131 test_import_wstr("REGEDIT4\n", &r
);
1132 ok(r
== REG_EXIT_FAILURE
|| broken(r
== REG_EXIT_SUCCESS
) /* WinXP */,
1133 "got exit code %d, expected 1\n", r
);
1135 test_import_wstr("\xef\xbb\xbfREGEDIT", &r
);
1136 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1138 test_import_wstr("\xef\xbb\xbfREGEDIT\n", &r
);
1139 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1141 test_import_wstr("\xef\xbb\xbfREGEDIT4", &r
);
1142 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1144 test_import_wstr("\xef\xbb\xbfREGEDIT4\n", &r
);
1145 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1147 test_import_wstr("\xef\xbb\xbf REGEDIT4\n", &r
);
1148 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1150 test_import_wstr("\xef\xbb\xbf\tREGEDIT4\n", &r
);
1151 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1153 test_import_wstr("\xef\xbb\xbf\nREGEDIT4\n", &r
);
1154 ok(r
== REG_EXIT_FAILURE
|| broken(r
== REG_EXIT_SUCCESS
) /* WinXP */,
1155 "got exit code %d, expected 1\n", r
);
1157 test_import_wstr("\xef\xbb\xbfREGEDIT4\n"
1158 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n", &r
);
1159 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1161 err
= RegOpenKeyExA(HKEY_CURRENT_USER
, KEY_BASE
, 0, KEY_READ
, &hkey
);
1162 todo_wine
ok(err
== ERROR_SUCCESS
, "got %d, expected 0\n", err
);
1164 test_import_wstr("\xef\xbb\xbfREGEDIT4\n"
1165 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1166 "\"Unicode1\"=\"Value1\"\n", &r
);
1167 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1168 todo_wine
verify_reg(hkey
, "Unicode1", REG_SZ
, "Value1", 7, 0);
1170 test_import_wstr("\xef\xbb\xbfREGEDIT4\n"
1171 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1172 "\"Unicode2\"=\"Value2\"\n\n", &r
);
1173 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1174 todo_wine
verify_reg(hkey
, "Unicode2", REG_SZ
, "Value2", 7, 0);
1176 test_import_wstr("\xef\xbb\xbfREGEDIT4\n\n"
1177 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1178 "\"Unicode3\"=\"Value3\"\n\n", &r
);
1179 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1180 todo_wine
verify_reg(hkey
, "Unicode3", REG_SZ
, "Value3", 7, 0);
1182 test_import_wstr("Windows Registry Editor Version 4.00\n", &r
);
1183 ok(r
== REG_EXIT_FAILURE
|| broken(r
== REG_EXIT_SUCCESS
) /* WinXP */,
1184 "got exit code %d, expected 1\n", r
);
1186 test_import_wstr("Windows Registry Editor Version 5.00\n", &r
);
1187 ok(r
== REG_EXIT_FAILURE
|| broken(r
== REG_EXIT_SUCCESS
) /* WinXP */,
1188 "got exit code %d, expected 1\n", r
);
1190 test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5\n", &r
);
1191 ok(r
== REG_EXIT_FAILURE
|| broken(r
== REG_EXIT_SUCCESS
) /* WinXP */,
1192 "got exit code %d, expected 1\n", r
);
1194 test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00", &r
);
1195 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1197 test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n", &r
);
1198 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1200 test_import_wstr("\xef\xbb\xbfWINDOWS Registry Editor Version 5.00\n", &r
);
1201 ok(r
== REG_EXIT_FAILURE
|| broken(r
== REG_EXIT_SUCCESS
) /* WinXP */,
1202 "got exit code %d, expected 1\n", r
);
1204 test_import_wstr("\xef\xbb\xbf Windows Registry Editor Version 5.00\n", &r
);
1205 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1207 test_import_wstr("\xef\xbb\xbf\tWindows Registry Editor Version 5.00\n", &r
);
1208 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1210 test_import_wstr("\xef\xbb\xbf\nWindows Registry Editor Version 5.00\n", &r
);
1211 ok(r
== REG_EXIT_FAILURE
|| broken(r
== REG_EXIT_SUCCESS
) /* WinXP */,
1212 "got exit code %d, expected 1\n", r
);
1214 test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n"
1215 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1216 "\"Unicode4\"=\"Value4\"\n", &r
);
1217 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1218 todo_wine
verify_reg(hkey
, "Unicode4", REG_SZ
, "Value4", 7, 0);
1220 test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n"
1221 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1222 "\"Unicode5\"=\"Value5\"\n\n", &r
);
1223 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1224 todo_wine
verify_reg(hkey
, "Unicode5", REG_SZ
, "Value5", 7, 0);
1226 test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1227 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1228 "\"Unicode6\"=\"Value6\"\n\n", &r
);
1229 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1230 todo_wine
verify_reg(hkey
, "Unicode6", REG_SZ
, "Value6", 7, 0);
1232 test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1233 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1234 "\"Line1\"=\"Value1\"\n\n"
1235 "\"Line2\"=\"Value2\"\n\n\n"
1236 "\"Line3\"=\"Value3\"\n\n\n\n"
1237 "\"Line4\"=\"Value4\"\n\n", &r
);
1238 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1239 todo_wine
verify_reg(hkey
, "Line1", REG_SZ
, "Value1", 7, TODO_REG_TYPE
|TODO_REG_SIZE
|TODO_REG_DATA
);
1240 todo_wine
verify_reg(hkey
, "Line2", REG_SZ
, "Value2", 7, TODO_REG_TYPE
|TODO_REG_SIZE
|TODO_REG_DATA
);
1241 todo_wine
verify_reg(hkey
, "Line3", REG_SZ
, "Value3", 7, TODO_REG_TYPE
|TODO_REG_SIZE
|TODO_REG_DATA
);
1242 todo_wine
verify_reg(hkey
, "Line4", REG_SZ
, "Value4", 7, TODO_REG_TYPE
|TODO_REG_SIZE
|TODO_REG_DATA
);
1244 test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1245 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1246 "\"Wine1\"=dword:00000782\n\n"
1247 "\"Wine2\"=\"Test Value\"\n"
1248 "\"Wine3\"=hex(7):4c,00,69,00,6e,00,65,00,20,00,63,00,6f,00,6e,00,63,00,\\\n"
1249 " 61,00,74,00,65,00,6e,00,61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n"
1253 "\"Wine4\"=dword:12345678\n\n", &r
);
1254 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1256 todo_wine
verify_reg(hkey
, "Wine1", REG_DWORD
, &dword
, sizeof(dword
),
1257 TODO_REG_TYPE
|TODO_REG_SIZE
|TODO_REG_DATA
);
1258 todo_wine
verify_reg(hkey
, "Wine2", REG_SZ
, "Test Value", 11,
1259 TODO_REG_TYPE
|TODO_REG_SIZE
|TODO_REG_DATA
);
1260 todo_wine
verify_reg(hkey
, "Wine3", REG_MULTI_SZ
, "Line concatenation\0", 20,
1261 TODO_REG_TYPE
|TODO_REG_SIZE
|TODO_REG_DATA
);
1262 todo_wine
verify_reg(hkey
, "", REG_SZ
, "Test", 5,
1263 TODO_REG_TYPE
|TODO_REG_SIZE
|TODO_REG_DATA
);
1265 todo_wine
verify_reg(hkey
, "Wine4", REG_DWORD
, &dword
, sizeof(dword
),
1266 TODO_REG_TYPE
|TODO_REG_SIZE
|TODO_REG_DATA
);
1268 test_import_wstr("\xef\xbb\xbfREGEDIT4\n\n"
1269 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1270 "\"Wine5\"=\"No newline\"", &r
);
1271 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1272 err
= RegQueryValueExA(hkey
, "Wine5", NULL
, NULL
, NULL
, NULL
);
1273 todo_wine
ok(err
== ERROR_SUCCESS
|| broken(err
== ERROR_FILE_NOT_FOUND
/* WinXP */),
1274 "got %d, expected 0\n", err
);
1275 if (err
== ERROR_SUCCESS
)
1276 verify_reg(hkey
, "Wine5", REG_SZ
, "No newline", 11, 0);
1278 test_import_wstr("\xef\xbb\xbfREGEDIT4\n\n"
1279 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1280 "\"Wine6\"=dword:00000050\n\n"
1281 "\"Wine7\"=\"No newline\"", &r
);
1282 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1284 todo_wine
verify_reg(hkey
, "Wine6", REG_DWORD
, &dword
, sizeof(dword
),
1285 TODO_REG_TYPE
|TODO_REG_SIZE
|TODO_REG_DATA
);
1286 err
= RegQueryValueExA(hkey
, "Wine7", NULL
, NULL
, NULL
, NULL
);
1287 todo_wine
ok(err
== ERROR_SUCCESS
|| broken(err
== ERROR_FILE_NOT_FOUND
/* WinXP */),
1288 "got %d, expected 0\n", err
);
1289 if (err
== ERROR_SUCCESS
)
1290 verify_reg(hkey
, "Wine7", REG_SZ
, "No newline", 11, 0);
1292 test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1293 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1295 "\"Wine8\"=\"Line 1\"\n"
1297 "\"Wine9\"=\"Line 2\"\n\n", &r
);
1298 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1299 todo_wine
verify_reg(hkey
, "Wine8", REG_SZ
, "Line 1", 7, 0);
1300 todo_wine
verify_reg(hkey
, "Wine9", REG_SZ
, "Line 2", 7, 0);
1302 test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1303 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1304 "\"Wine10\"=\"Value 1\"#comment\n"
1305 "\"Wine11\"=\"Value 2\";comment\n"
1306 "\"Wine12\"=dword:01020304 #comment\n"
1307 "\"Wine13\"=dword:02040608 ;comment\n\n", &r
);
1308 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1309 todo_wine
verify_reg_nonexist(hkey
, "Wine10");
1310 todo_wine
verify_reg(hkey
, "Wine11", REG_SZ
, "Value 2", 8, 0);
1311 todo_wine
verify_reg_nonexist(hkey
, "Wine12");
1313 todo_wine
verify_reg(hkey
, "Wine13", REG_DWORD
, &dword
, sizeof(dword
), 0);
1315 test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1316 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1317 "\"Wine14\"=hex(7):4c,00,69,00,6e,00,65,00,20,00,63,00,6f,00,6e,00,63,00,\\\n"
1319 " 61,00,74,00,65,00,6e,00,61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n"
1320 "\"Wine15\"=\"A valid line\"\n"
1321 "\"Wine16\"=hex(7):4c,00,69,00,6e,00,65,00,20,00,63,00,6f,00,6e,00,63,00,\\\n"
1323 " 61,00,74,00,65,00,6e,00,61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n"
1324 "\"Wine17\"=\"Another valid line\"\n\n", &r
);
1325 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1326 todo_wine
verify_reg_nonexist(hkey
, "Wine14");
1327 todo_wine
verify_reg(hkey
, "Wine15", REG_SZ
, "A valid line", 13, 0);
1328 todo_wine
verify_reg(hkey
, "Wine16", REG_MULTI_SZ
, "Line concatenation\0", 20, 0);
1329 todo_wine
verify_reg(hkey
, "Wine17", REG_SZ
, "Another valid line", 19, 0);
1331 test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1332 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1333 "#\"Comment1\"=\"Value 1\"\n"
1334 ";\"Comment2\"=\"Value 2\"\n"
1335 " #\"Comment3\"=\"Value 3\"\n"
1336 " ;\"Comment4\"=\"Value 4\"\n"
1337 "\"Wine18\"=\"Value 6\"#\"Comment5\"=\"Value 5\"\n"
1338 "\"Wine19\"=\"Value 7\";\"Comment6\"=\"Value 6\"\n\n", &r
);
1339 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1340 todo_wine
verify_reg_nonexist(hkey
, "Comment1");
1341 todo_wine
verify_reg_nonexist(hkey
, "Comment2");
1342 todo_wine
verify_reg_nonexist(hkey
, "Comment3");
1343 todo_wine
verify_reg_nonexist(hkey
, "Comment4");
1344 todo_wine
verify_reg_nonexist(hkey
, "Wine18");
1345 todo_wine
verify_reg_nonexist(hkey
, "Comment5");
1346 todo_wine
verify_reg(hkey
, "Wine19", REG_SZ
, "Value 7", 8, TODO_REG_SIZE
|TODO_REG_DATA
);
1347 todo_wine
verify_reg_nonexist(hkey
, "Comment6");
1349 test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1350 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1351 "\"Wine20\"=#\"Value 8\"\n"
1352 "\"Wine21\"=;\"Value 9\"\n"
1353 "\"Wine22\"=\"#comment1\"\n"
1354 "\"Wine23\"=\";comment2\"\n"
1355 "\"Wine24\"=\"Value#comment3\"\n"
1356 "\"Wine25\"=\"Value;comment4\"\n"
1357 "\"Wine26\"=\"Value #comment5\"\n"
1358 "\"Wine27\"=\"Value ;comment6\"\n"
1359 "\"Wine28\"=#dword:00000001\n"
1360 "\"Wine29\"=;dword:00000002\n"
1361 "\"Wine30\"=dword:00000003#comment\n"
1362 "\"Wine31\"=dword:00000004;comment\n\n", &r
);
1363 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1364 todo_wine
verify_reg_nonexist(hkey
, "Wine20");
1365 todo_wine
verify_reg_nonexist(hkey
, "Wine21");
1366 todo_wine
verify_reg(hkey
, "Wine22", REG_SZ
, "#comment1", 10, 0);
1367 todo_wine
verify_reg(hkey
, "Wine23", REG_SZ
, ";comment2", 10, 0);
1368 todo_wine
verify_reg(hkey
, "Wine24", REG_SZ
, "Value#comment3", 15, 0);
1369 todo_wine
verify_reg(hkey
, "Wine25", REG_SZ
, "Value;comment4", 15, 0);
1370 todo_wine
verify_reg(hkey
, "Wine26", REG_SZ
, "Value #comment5", 16, 0);
1371 todo_wine
verify_reg(hkey
, "Wine27", REG_SZ
, "Value ;comment6", 16, 0);
1372 todo_wine
verify_reg_nonexist(hkey
, "Wine28");
1373 todo_wine
verify_reg_nonexist(hkey
, "Wine29");
1374 todo_wine
verify_reg_nonexist(hkey
, "Wine30");
1376 todo_wine
verify_reg(hkey
, "Wine31", REG_DWORD
, &dword
, sizeof(dword
), 0);
1378 test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1379 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1380 "\"Multi-Line1\"=hex(7):4c,00,69,00,6e,00,65,00,20,00,\\\n"
1381 " 63,00,6f,00,6e,00,\\;comment\n"
1382 " 63,00,61,00,74,00,\\;comment\n"
1383 " 65,00,6e,00,61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n\n", &r
);
1384 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1385 todo_wine
verify_reg(hkey
, "Multi-Line1", REG_MULTI_SZ
, "Line concatenation\0", 20, 0);
1387 test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1388 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1389 "\"Multi-Line2\"=hex(7):4c,00,69,00,6e,00,65,00,20,00,\\\n"
1390 " 63,00,6f,00,6e,00,\\;comment\n"
1391 " 63,00,61,00,74,00,;comment\n"
1392 " 65,00,6e,00,61,00,74,00,69,00,6f,00,6e,00,00,00,00,00\n\n", &r
);
1393 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1394 todo_wine
verify_reg(hkey
, "Multi-Line2", REG_MULTI_SZ
, "Line concat", 12, 0);
1396 test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1397 "[HKEY_CURRENT_USER\\" KEY_BASE
"]\n"
1398 "\"double\\\"quote\"=\"valid \\\"or\\\" not\"\n"
1399 "\"single'quote\"=dword:00000008\n\n", &r
);
1400 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1401 todo_wine
verify_reg(hkey
, "double\"quote", REG_SZ
, "valid \"or\" not", 15, 0);
1403 todo_wine
verify_reg(hkey
, "single'quote", REG_DWORD
, &dword
, sizeof(dword
), 0);
1405 test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1406 "[HKEY_CURRENT_USER\\" KEY_BASE
"\\Subkey\"1]\n"
1407 "\"Wine\\\\31\"=\"Test value\"\n\n", &r
);
1408 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1409 err
= RegOpenKeyExA(hkey
, "Subkey\"1", 0, KEY_READ
, &subkey
);
1410 todo_wine
ok(err
== ERROR_SUCCESS
, "got %d, expected 0\n", err
);
1411 todo_wine
verify_reg(subkey
, "Wine\\31", REG_SZ
, "Test value", 11, 0);
1412 err
= RegCloseKey(subkey
);
1413 todo_wine
ok(err
== ERROR_SUCCESS
, "got %d, expected 0\n", err
);
1414 err
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
"\\Subkey\"1");
1415 todo_wine
ok(err
== ERROR_SUCCESS
, "got %d, expected 0\n", err
);
1417 test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
1418 "[HKEY_CURRENT_USER\\" KEY_BASE
"\\Subkey/2]\n"
1419 "\"123/\\\"4;'5\"=\"Random value name\"\n\n", &r
);
1420 todo_wine
ok(r
== REG_EXIT_SUCCESS
, "got exit code %d, expected 0\n", r
);
1421 err
= RegOpenKeyExA(hkey
, "Subkey/2", 0, KEY_READ
, &subkey
);
1422 todo_wine
ok(err
== ERROR_SUCCESS
, "got %d, expected 0\n", err
);
1423 todo_wine
verify_reg(subkey
, "123/\"4;'5", REG_SZ
, "Random value name", 18, 0);
1424 err
= RegCloseKey(subkey
);
1425 todo_wine
ok(err
== ERROR_SUCCESS
, "got %d, expected 0\n", err
);
1426 err
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
"\\Subkey/2");
1427 todo_wine
ok(err
== ERROR_SUCCESS
, "got %d, expected 0\n", err
);
1429 err
= RegCloseKey(hkey
);
1430 todo_wine
ok(err
== ERROR_SUCCESS
, "got %d, expected 0\n", err
);
1432 err
= RegDeleteKeyA(HKEY_CURRENT_USER
, KEY_BASE
);
1433 todo_wine
ok(err
== ERROR_SUCCESS
, "got %d, expected 0\n", err
);
1439 if (!run_reg_exe("reg.exe /?", &r
)) {
1440 win_skip("reg.exe not available, skipping reg.exe tests\n");