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