regedit.c 167 KB

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