ÿØÿà JFIF    ÿÛ „ !.%+&8&+/1555$;@;4?.451 4,$,44444444444414444444444444444444444444444444444444ÿÀ  á á" ÿÄ     ÿÄ ?    !1AQaq"2‘¡±ÁðBRbrÑá#‚’¢²3S CñÿÄ   ÿÄ !    !1QAa‘2ÿÚ   ? 5˜Z¯V¦cø)›t/? z¨±>Õ5€¶‹Á¤·¼z¼Ü¬+ñ®v¤¨_ˆR­BFn©—˜ý®ç̝P8gýt·ÉSTŦˆìät?þé¼íìN/Þa)ì–í6ô… Ï¿øÃj´¿KÇü]ÿ ªô¹-eKànëÕHTx}ýSÜ›ÿ ”7Ø×&µ<¦  ¥ÑO¶[Ù¯ä¨ÞÃÿ PZ-¬;#õ|•oaÿ ©CìÞz3˜öː/¤­ñTûIØ}š^ mÓ%ªxˆ¥ÉŸu=Z+ISe¿45™¼u;ú&WØ÷€æßQ™®{|íx*TC“#ZŠìZ§²‹ 6pv…³¿¡äª*áZÐ%ÒOáˆo"x«OHk w±æ+¬V(kMúŸ5Vö«$ ÁrÏbàb57/luR ¸ÑÛj Òµì`Мq­û žICÀÊ•©4€Âcà¨Ï€O´<èÐ:›ù(Ë^L8þ‘ÍÌ#¸Ð_Ì©ÙK(Öz 4¬û+¸;ü’V’84‘¬ÃŽ:[â‡ÔÌáõp¢~§ªlæ£ö{®G>J¼"°‡7¯ÆÉèßû ‹É‹§ÁòÃýâßî ^ƾÙõ‹×óH#«LP½ïX=xÑÍ$|W?•~• îëÔ©ª‹ {ÝT…Kÿ ”hûâá)J*ö˜–ÔU;iÇ€/ ÆþjóZ\ýwØ=Ìm ºèËL9 ýèÆð/¨’¥öo=nË.%Îì ŽÕ¯È|{Oj²ƒE6e/ßdÄõ²Ìâ1O®ò×TsəԸhOMýíMˆ¿¼H˜l²,7Â¥#MF/Úf°Ö½± ¸–dr‹NýÊ íjqx{œÉ ä-È ¦ øÄër¨q°ð †nцýÑÄÆ’mä…n<0È™;ÁÝá¯ÁZƒ7FÀmì­ É&9ˆîéi¶ùN§Y• ÃZãAâ?•‡©‰ , ó¾IŸŠc1 4â&y­&pŠ­6;M À 0¹qç»p.á …ŸÅáK@%6·y6ƒ‰3?”úºŽ‰éX5ªPT §µ!=Mž«Ú½‹ÅgÂSâÉaþÓoö–¯ÁÔìR>5éÿ üs¶ÆUcÌ kÇR ]ÿ ù¬¼«VŽ;Â|‡~¢¦”ÏŰæ {L™Õ°Óv¹ò¸írޡעCÃ!íVÕ {¶»sŒNPg/ "uÕbkm²“$ďå¿é¹§°½æz¯6 †s¿!s–wÚÝ“™Œ °.ûj>·+™Òa…©Œ&rÝÎtÛë긪Ît’LAVp%c Úý[ÄzJ¾ÇàXXç@˜ó<êL]·T˜¾¥1Ó©V‡g´æ½¦Ý@¹óø!_@´ÞâSÁ —S3™•& ]@JHÚý©ZŽ €×æÔr»Áf!‡yÞ4Mv*èÓã_{‘åóUuљØ«Oïé*®EvÑ Œ÷‡U \"㪒ÍK+À 4“M¡ï:0¥5í!'<@î´”>Ç»&Z–ïCCV˜Ì5Šo&îhè.žû |ÓK©h$s6KìŒëã)¹hI¦GïOåóI;ììü#É$Š0…Ææ¥TØ.5­¾gn´ “ÂÖ\:hœ89G)J@„}œ:’Ò{/Š"¦_Æ×7Æ3VÇŠÊa]ÚŒÙ€Ä–=®uÁßâACZƒ§§£ Qnâ:«,×{tyø¬iÛcœÜÄ€H½ÄÍCk´÷šß .W'b¤Íåh]÷€=,Žv×cÚEÚHXJX¶îo¨FÒtèöŸ>ªª6[J®Fµ£sGÁeqõfe\íjÒÐïÄÐGˆe1Ø‹.Ø”‘Ëuø Y­ˆÜ ŽG|zùªüMpDnQWÄ”%JŠ™)â*p@Örš«ÕT2Ð%ˆG#ª„ ·¤!°ŸOTÂT¸aÚ%4&h™LµšØüÐ.F¿²ÐÞ_Ç‚¾ÅÃaÜ÷09Æ q€öy˜v‡85õN÷]¬äѼóS{°_MެúÔ#°Ç¸0åÞè2ëôPcvÆw9®ií1Ä8F™˜à‰´+‰Ik1òÝ7“Ñ×ÒsÝ\x‚h`ÞÑ`ó"|µEcý£n˜h`}GÞ !±ù²Ápü²ß6 0ïi󜵩SÈÇ7˜-ÕURO˜¦´f$ªž-Í6(œ}<„ éc øs]ŽŽ„*—¾ ìdŽ„)méª\¿êÎIg¾ØÞ~I#C/¼¼´EÁÈŽi8“©õådô·>euä ƒ'Ê×लR1ÉJE1ÐAát`t;ÇР%Ý<‡¥„ÍÆ`×Oyó)õiI€ñQaŸ4Ûù\áàaÃÔ¹HÃu¹*k€¦<„e S‡&õÏ B!ŽhüÞ`yj}mªf×\¿ Ç~æ­9‡û\՞Ǖg²1Žû5V7 !àöšm° c`ܬøÇìµÒ'P"?…´Ö,"§^•õލsÔ)6˜sæéÍR¼ ò|Sl”‹7 nPW Gòú÷½§O¯‡„l¡kSÞŒr½PÊ@æ¢pŽ-mÿ #Ÿ˜Àº¶Áä¦;ïÔæ$1££`“Õ>„—·ž)ßð³ñ#Ï Ô$¶œ‰ÊE‹À;÷º ¯«P:Ñ”8–IÊtpÞ3ª“>ê“þës4ò2OÏÕ­±zô†Õ§‰.÷ä¸;¿˜“'œ›žª}«Œ{ª±Ì 9ÔóÞÕ‡0 $íWV3Üì¬ —@kÝ4@¿r¼±½¬™›?øØæ´'Áé®CË3-g$˜ö‡×auÚi´Žp/êÛ æF›Ú2v‹ã¿¿,nB1̨ƃqÞa5͝@&Æû“él÷ \C²½UÍc ¯k×¢U ÖéQå™—-r wô ÞÏ<Ò=&=ÿ Ôê Òêˈt,i—;LîÜ á¸*ÚÃ1$êL•LÍ <É)ýÐà’ ;F™{ƒ™˜€&'}‚ãÄK`¡ÞT@I;®žZóè‚s’7®°›+§O­Åq©é»²9<Ô J ¼9O’HL»Ùïì¸rk¼Ž_ý‘TŸu[²ßÚŒ·ü÷B%¯E ŸÔX5êO´ Ç•€’I0 ÉJX` ñ¹õ%;µŸD‘«´€àwÒ™U ûئžÖö\×®×´8 ½‡ºÐÆÓ§?Àkmœ=;d5*@-ì0F Rªýš[Ü6âö̃ڸr*KA9· u*µæ£?U¸Âêí†8@¦X4 e-ò„0s{ HâUpU?¼mñRa°®a%Ð'tÉ×’\¾ÊÉ]t›h>·(Ë@R¼¡Ãt h}’O÷au<+nT…Ö…MӐ??Óe95 q>í/;&JSû °¯ÊéÞ øƒ*Ã2½Ài&:nôUl=¾¿5eˆ3”ñc|Ú2V”>„»&eE;«ÚäC p¢Û úy 9š[ŒÌx¼擼A&DåÒ¯ˆ¤ÀÌ;"˜ ÏQä¸åhÊ}Ûq«Û0WžÒ|»€ø®öCm5•\ÇÀ§Pe3£]0ÃàLDÉ‰1øªxjgwT‚÷¿LΨK‹›ùs—xˆÜ±µ kæ¸f‰‰ÜGk/LÛØ6d9ò¶ùA{ƒA3š/¬D¬khÓk‰`˜"㯒r¿±Óã jx‡°e}<Ñø\3y:'À•/h½Í€Ç4~g ?Û(¼]v‘ªlKÎâ~?O‚W%{Ì:“'©úNq¾›úo(X’¥¯ˆ nFê{Ç€ü?º'ë ø‹ì Þ09ŒÌç9Æ —ËC`j@ÓÄ(+a‹un¸#ÂꟋ{K`‘ÑÍÍ'à´»/Û,KW;Þ4²þð ï Nm|~fGÏ(…³Ã)«1ö­Õ ¥‡¨©ƒÃ™ü-s=à=U66Ï«Ýc蓦W¹íž®›nÔ%êÇìŒ<#Ü×84ån®Ð ÒåOC` ñânÑs‡¢ç 1õ%Îhì½Ã½® e:ݼUZo™`  ÅZŸŒÊ«ê1ÏÄo$q¹Þ€©ˆhÐÉä¯ñ[!…Ú˜àJ:x2$Íß&PåT£6ç— ‡Í*4Ýšçjÿ ‰É nófÐ ó(L5C•åÆ\rMÒ@ò }y-W}™üýVù—ú¢=Ù”c®‘< M ž ´Phr ¦©TD ‘ù.$´÷O‡‘V2Æò.=IUŒ=ž‡â¬i™aþÓåÙ?òUø'ØÖ•.~* šTŒ!•-×áºTâ®ä#õü'´ eýlYÅÓeÕKÂrT"CÚ@u!Óxƒ{š3€}1¿(r}%«nËamjÑ%ÑNEò v ˜à  σöK³,*º.àzù¨™Ó ÚçâU¦*¿ 9{%Ö¹ njûdaXöb) kÛÆ±ûÓ\°M7ˆÂ=û›ç¿Ã‚­V»Cg–8ÙêE- j)k$º`Ã-ùEýeBÆÇ]c¡°ñty&Òd0nõ'¡W+ƒ*|–øµFa\GQªEAÔp5\Ǽ·¼Ç8·õ -â§Ú[ ‡ uZeÖ 3}×d'+¹:ð+K†Û®s!Ï$úe€<Û”x)1»a­¡LC]¸µík…ÚàA»AYº{†ªS[¦5HÒ7ù --,ísòDØ€èk ÞÀîÜ ò@â( ËNˆë›4ô½•/¦o‡€Û7 ê•ÆêòðÜy'Án½µ á˜ݦ ndeo…[ì¶Ê,¥R³Ä=À±—–ß;£™´ñSâ*g§”ïaið‘Jå~™ÓÞ ß³Õ¢»8x埒²52>AÊb&-÷\7´éÄù€T˜,w;3{ï˜k…à¹ÄqÀ«œ{€\ ˆ¾[´¨јr &Úé„Ívˆ±8†¿]|¬ņ4I×pÞS1ÈÖz‰#Ìv‡G!YNògñ:màTz¢Ý1ô©^O=~ë|5Bã™ç•¼µõ•bÆ@úÕS¬ÈŒ#¬zünrŸ û” Z²•èðV"ÁHÚý©wÝ €7¼Ìu1hÑa3Éä û f$o¿É ™Ú›ÝçnpÒ3äÌ3†Í§,Äï]$‰/pê †«À¼¸e9­Æê_C]žƒ·ý·frÁN«, E=›Çq -‰öŒ:aÏ¿±í&£Í:-} 84‘ÿ eƒQÑeëSsuiA ³g㟥ú£?ÿ ʼn*”“÷aühe:ÊWa@ÒÞk±eØ] F Ô—r.åä˜ @ö¥ªZoÐýYL·¥S²G/‡ñ <~*ZÆ´è>JlòàÛÆ½ÿ 窘ìGN¢:I®KšJp/`íIÁÀõ#Ä-€ö­šµŒoF4|ÆQØÆ@Ì|£Ô…¢À{9˜è½Üó›€ôYÒÎYsið;ís¤€à²ˆ‚4qÉVŒI$ ‰"° æµ8cXGjœˏ¡Aâý•ËÜ¢ûï e·çLx']á"oÅÎê3¯Ç—¹”ó0nå‚âg{Œñ> S´˜îè°g238‚ãköÝfÚd´6Ò€;ò÷±¢™¼›º ¢Æ'¥Ðx'e¬ç ]bÈÆV¢ó‹kýBO ðÊâ$Ÿ!×T 3Mýמ žìٍàÌü‘8÷€àæØ8æ©6‰©L´«…oãpð„~Çk‰!ñ;‹”ÛžÍ àž±z Ÿôû øŸÝužÏ;ÿ #|u6™Þ¬ÚˆÐõA4¶â|ôl|Ê2ŽÇ¤ÝÅÇY.<#Aí.k§hóF‚”Y; M½Ö4hŸ4&›­¿tès´%FìL¥£Ãk‰ÇT¤haÁ¤ÚxfÉ`ÑìË›>i 3t‚:,–+^÷´–{Û–Nxi"x‘Ûg î¨>¥Õ܁ùZH,2Û“:8xÊ¢Çí9.É-Ìâã-=çjwµS˜dütžçwýGòú®®ûº_ˆýx$–¡ãøO EÚÛÏ÷R„×w+3£Á£öUMyR²¹âŒ°š›¸Ñãò9§Ó_Dl+Ùßc›úšGÅÌc†Ž!Ko=¶.‘Îÿ c²(2®V mª.ÿ ¹B›¹å ù„öŸSV>™ü¯$y:G¢Z×àøúdî¹û­·ýÇ´:•c LÍõi_‹ö+ÎæGÊè>OŠ•äž´§Þ{X}¨1ÚTc›»Qþ•êô°t¿OP?eæ~É{5]•ÙR£r5†nZ\ã@ &îJõ ¾àC°þV>fé¥/ü5ñÊIº_é5 ;e­h<@ Ä&æÃëE%;X,ÒãÆÞ`Oò¦kŸm#˜!ÀyÄ¢| óLšò¥Ä` ¶R=|ÈCâh5ò3DˆïF†ðÒ#ÅìÛœ?¸yhBãœí ZxßÎÄhºRK„`Þödvײ™ÀÈÑÒgŒuY w³%†ƒÓzõ ÖÏp‚dH®¦A´ù§»ÓÇMæ~)ˆð‡û:ù&Ä •vGD´À n ݇¼Ö8Fö óáà£~Ë¥x`oK|Ä?fxiØü%pìR>éò+Û±éÎ>núlFŤ'tq8LZÏvÃ?„¡ß±È⽆¯³íü@x|PöUäèØã¡ð‚ŒAìÏ"vÍwóŸÍ{ ý0.z È•Ö{,N¡£¡ŸKÕÙž>Ýœþ ÍÀ°<×EA!Å‚D™IúOÍ¡>ôG}Â` ÍßkÜL™Ž Þð™ {IøF²¹òQ3&!ÃÂÞz.d&Ï-sH¸,Ôõ˜ŽP€ 77ˆÝ¼ÊëÜw =cÕ Ú,ØÐ5ÎYÐ)ì´öœgŒ[¤ßv㙑8心>h]§µháYš£²ºÑ.{Ï7Sð•?´~×SÃKýJÛ˜ ™Íäiúu<µX¶1õ^kâçIÑ£sZ4h>j*ÔšD:4­¿_ ÷¸ Õxæÿ ¸?Mù _•­ÊÐ ä ÷ý ÑwL œ­ïnTkÛUÍN©ë:¦fV ¶ÜÔÜMªÅâA½–¿R×TXš-%iTÊT•‡Ù‚JôϐZxWÑè‰f‰òG º ×Õû2aZ7OU3[“×AT–ÞŒ…-‘¤”Ì ì&(ˆ¿­•ƒkï’:ðY¦W‘ Å)“†‘˜³Åtcø˜ñTÂwÚÇ4|üLÇªí–v- qˆèU qPE.†â‘˜µ Æ,ÐÅs]8¾„oúÑ i>ÜxxÈó)ƒ ´æÁâØ$À‰vžŸf$Ž |ãw;ÀÁIJ»b` {¦Ó¤Ú$©YÀ‘n@Óïž«9J¼êG m¤ ܯ¹ÌW4€ÐÒÅÛ‡#褕Ÿn-?í|с¥÷Ú¹¬'´ÞÜ9ÓK `hê£SÄSà?7—Wí_´…óB›»:=Ãïq`<8ñÓŒÑlú2d¬ê³£hÖ[l|$vÝro~'R®‰§°ñmY ͧäP |PUª¹·:3Œ[Û{Xÿ ºâ@‚W–Äé u‚ ¯´*=íή.pûÒdt @G‰¬ s¸ ëÉücr ÞæÑ¨Ê@>¤¢Ö±. Þ'¯°ÌME[YéïĵÂCå½ Ué©Áû'Ê9%eÔðNU”ë‘ÌsD3/®+UI˜9h.WC”빓$#:pz:YÓ ¿xž* ³$Í +$kñAŠ‹†¢ Uê>¸)_š¬÷©ßAÂÔb9ÇU ¯¾á•9¯ÏÏ÷O÷¼¼Fähal1‰3Ì[Ïr•´UCksNÐ] R‘¸¥H+§Šé†c©vÖÞ0iÓ76s†î!§=ß ¼~Ô'°Ãmäoäš³ªøi1úÉ)³yV8 CLÄØÁ‘WYïi€H6ÖÑiámø^ÈY´°Ñ7¥Û*—Ñ©L«Qƒï—Ùrÿ ›£Ð*š¸ˆL©ˆ$ˆ ÷¾D§9È®«qbqC)–ˆïv´çñsÑVT­Ø, <àïºÀO«Jý·õ àfPìð .wFšir´þ’2_Y *Æ€x\« ì€9š@ Ž|F⇥ˆkZ@hÖÄ0t¿-<“‹qµ¾*ZL¤Ú)&BJpÓF5=$„at*Zš$’ÑtdûÝRI1 2މ$€$I$#‰SÞ’Hë¬ï;Á$¡t$’`<(ñÇt)$‡Ð.Êf¢X’Kt=Éé$‚ˆªè¢oÝëòI%Rgcª÷ŠyI%¡‰ÿ !ñ)´õ $¤ Ô’IIGÿÙa 3gU @sddlZddlZddlZddlZddlmZddlZddlmZm Z ej ddgdddl Tzej ej dd ZWneefydZYn0edd Zed krd nd Zedkrd nd ZdefZdeZdeZddefddefddefddefdgdefdgdefddefd d!d"efd#d$d%efd&d'efg ZGd(d)d)ej Z!Gd*d+d+e!Z"e#ed,Gd-d.d.e!Z$e#ed/Gd0d1d1e!Z%e&d2krese'd3d4e(dS)5N)support)machine win32_editionwinregwin)Z required_on)*z--remoteZAMD64TF)rz Python Test Key [%d] - Delete Mez SOFTWARE\zSOFTWARE\Classes\z Int Value-z Qword Valuelw*M z String ValzA string valueZ StringExpandzThe path is %path%z Multi-string)ZLotsZofstringvaluesz Multi-nul)rrrzRaw Datas binarydataz Big Stringxi?z Big Binaryxi@uJapanese 日本u 日本語c@sTeZdZddZddZdefddZdefdd Zdd d Z dd d Z ddZ dS)BaseWinregTestscCs|ttdSN) delete_treeHKEY_CURRENT_USER test_key_nameselfr//opt/python39/lib/python3.9/test/test_winreg.pysetUp6szBaseWinregTests.setUpcCsrzt||dt}Wnty&YdS0zt|d}WntyLYq\Yn0|||q(t|t||dSNr)OpenKeyKEY_ALL_ACCESSOSErrorEnumKeyrCloseKey DeleteKey)rrootZsubkeyhkeyZ subsubkeyrrrr;s   zBaseWinregTests.delete_treesub_keycCs$t|ttd||t}||jdk|||}tD]\}}}t||d||q6t|\} } } || dd|| ddt|\} } } || dd|| t tdt |} t |zt| | dWnt yYn0t |} |zt| | dWnt yYn0dS)N Default valuerrz"Not the correct number of sub keysz Not the correct number of valueszAIt appears the CloseKey() function does not close the actual key!zBIt appears the key.Close() function does not close the actual key!)SetValuerREG_SZ assertTruehandle test_data SetValueEx QueryInfoKey assertEquallenintr failrClose)rroot_key subkeystr CreateKeykeyr$ value_name value_data value_typenkeysnvalues since_modZ int_sub_keyZint_keyrrr_write_test_dataKs8    z BaseWinregTests._write_test_datac Cs8t|t}||dd||t}|||}d}zt||}WntyVYqtYn0||tvdd|d}q2||ttdtD]4\} } } t|| \} } || | d|| | dqWdn1s0Y|t |d} || |d zt |d| d Wnty*Yn0|dS) Nr%z+Registry didn't give back the correct valuerTz&Didn't read back the correct test datarz'Didn't read the correct number of itemsz!Could not directly read the valuezRead subkey value wrongz2Was able to get a second key when I only have one!) QueryValuerr- EnumValuerr*r. QueryValueExr1rr0)rr2r3rvalr5r$indexdatar6r7r8Zread_valZread_typrrr_read_test_datausF        $  zBaseWinregTests._read_test_datac Cst|tdt}t||dt}tD]\}}}t||q t|\}} } ||dd|| dd|t||zt||| dWnt yYn0|t|tzt|t}| dWnt yYn0dS)Nrzsubkey not empty before deletez Deleting the key twice succeededzCould open the non-existent key) rrrr*Z DeleteValuer,r-r1r!r0r) rr2r3r5r$r6r7r8r9r:r;rrr_delete_test_datas*       z!BaseWinregTests._delete_test_datacCs(|||||||||dSr)r<rCrD)rr2r3rrr _test_alls  zBaseWinregTests._test_allcCst||dtd }||jdkWdn1s60Yt||dtd }||jdkWdn1sv0YdS)Nr)r5r$reservedaccess) CreateKeyExrr(r) OpenKeyEx)rr5r$ZckeyZokeyrrr_test_named_argss.z BaseWinregTests._test_named_argsN)r$)r$) __name__ __module__ __qualname__rrr4r<rrCrDrErJrrrrr4s *(  rc@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ e edkdddZddZddZddZdd Zd!S)"LocalWinregTestscCs|t|tddS)Nu 日本-subkey)rErrrrrtest_registry_workss z$LocalWinregTests.test_registry_workscCs:dd}|jt|ddd}|jt|d|tdS)NcSst||dtSr)rHrr5r$rrrzILocalWinregTests.test_registry_works_extended_functions..)r4cSst||dtSr)rIKEY_READrPrrrrQrR)r)r<rrCrD)rZckeZokerrr&test_registry_works_extended_functionss z7LocalWinregTests.test_registry_works_extended_functionscCs|tttttdSr)rJrrr!rrrrtest_named_argumentss z%LocalWinregTests.test_named_argumentscCs2tdt}||jd|||jddSr)ConnectRegistryHKEY_LOCAL_MACHINEassertNotEqualr)r1r-rhrrr,test_connect_registry_to_local_machine_workss z=LocalWinregTests.test_connect_registry_to_local_machine_workscCsdd}|t|dS)NcSs tdtS)NZ abcdefghijkl)rVrrrrrrQrRzCLocalWinregTests.test_nonexistent_remote_registry..) assertRaisesr)rconnectrrr test_nonexistent_remote_registrysz1LocalWinregTests.test_nonexistent_remote_registrycCs2td}|t|t||tjdddS)Nz %windir%\testZwindirz\test)ZExpandEnvironmentStringsr-typestrosenviron)rrrrrtestExpandEnvironmentStringssz-LocalWinregTests.testExpandEnvironmentStringscCsfz@tdt"}||jdtWdn1s40YWn ty`||jdYn0dSr)rVrWrXr)rr-rYrrrtest_context_managers  & z%LocalWinregTests.test_context_managerc sdGfdddtj}|}|ztttdR}tdD]8}t|\}}}t|D]}t||} t || dq\qBWdn1s0YWd| t ttdt ttn&d| t ttdt tt0dS)NFcseZdZfddZdS)z>LocalWinregTests.test_changing_value..VeryActiveThreadcs\ttt>}d}d}s:|r dn|}| }t|dt|qWdn1sN0YdS)NTAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrZchanging_value)r4rrr&r')rr5Z use_shortZ long_stringsdonerrruns  zBLocalWinregTests.test_changing_value..VeryActiveThread.runN)rKrLrMrirrgrrVeryActiveThreadsrjz\changing_valueirT) threadingThreadstartr4rrranger,r>r=joinr!) rrjthreadr5_ num_subkeys num_valuestinamerrgrtest_changing_values,    2 z$LocalWinregTests.test_changing_valuec Csd}zrttt6}t||tdt|\}}}t|dWdn1sL0YWttdt|ftttn ttdt|fttt0dS)NAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrr\) r4rrr&r'r,rr!ro)rrvr5rrrsrtrrr test_long_keys * zLocalWinregTests.test_long_keyc Cs`zttdWnBtyP}z*|jtjtjfvr:|dWYd}~n d}~00ttddS)NrzMaccess denied to registry key (are you running in a non-interactive session?)r)r>ZHKEY_PERFORMANCE_DATArerrnoEPERMZEACCESZskipTestr?)rerrrtest_dynamic_key)s z!LocalWinregTests.test_dynamic_key)r zRequires Windows XPc Cs>z*ttt}||jdWdn1s20Yttt}||jd|tt|Wdn1s|0Y|tt |Wdn1s0Y|tt |Wdn1s0Y|tt ttWdn1s0YWt ttn t tt0dSr) r4rrrXr)rr\NotImplementedErrorDisableReflectionKeyEnableReflectionKeyQueryReflectionKey DeleteKeyExr!)rckr5rrrtest_reflection_unsupported7s ,  & & & ,z,LocalWinregTests.test_reflection_unsupportedc CshzVttt.}||jdt|ddtdWdn1s@0YWtttn ttt0dS)Nr test_name)r4rrrXr)r+ REG_DWORDr!)rrrrrtest_setvalueex_value_rangeKs  0z,LocalWinregTests.test_setvalueex_value_rangec CsztttX}||jdd}t|ddt|t|d\}}||t|||Wdn1sj0YWt ttn t tt0dS)Nrrr) r4rrrXr)r+rr?r-r!rrZtest_valZret_valZret_typerrrtest_queryvalueex_return_valueWs  ,z/LocalWinregTests.test_queryvalueex_return_valuec CsztttX}||jdd}t|ddt|t|d\}}||t|||Wdn1sj0YWt ttn t tt0dS)Nrr) r4rrrXr)r+ REG_BINARYr?r-r!rrrr#test_setvalueex_crash_with_none_arggs  ,z4LocalWinregTests.test_setvalueex_crash_with_none_argc CsztttX}||jdd}t|ddt|t|d\}}||t||dWdn1sj0YWt ttn t tt0dS)NrzA string with a nullrzA string) r4rrrXr)r+r'r?r-r!rrrr test_read_string_containing_nullts  ,z1LocalWinregTests.test_read_string_containing_nullN)rKrLrMrOrTrUr[r^rdrerwryr}unittest skipUnlessWIN_VERrrrrrrrrrrNs       rNzSkipping remote registry testsc@seZdZddZdS)RemoteWinregTestscCsttt}||dSr)rV REMOTE_NAMErrE)rZ remote_keyrrrtest_remote_registry_workss z,RemoteWinregTests.test_remote_registry_worksN)rKrLrMrrrrrrsrzx64 specific registry testsc@s^eZdZddZeedvdddZee ddd Z ee dd d Z d d Z dS)Win64WinregTestscCs |ttttttdddS)Nr)r5r$rGrF)rJrrrrrrrrrUs z%Win64WinregTests.test_named_arguments)ZWindowsCoreHeadlessZ IoTEdgeOSz)APIs not available on WindowsCoreHeadlesscCsfttdH}|t||t||t||t|Wdn1sX0YdS)NZSoftware)rrWr(rZ assertIsNonerr)rr5rrrtest_reflection_functionss  z*Win64WinregTests.test_reflection_functionszOS doesn't support reflectionc Csxz`tttdttB}||jdtttdttB}||jdWdn1s\0Yt|ddt ddd}| t |Wdn1s0Ytttdtt B@}||jd| dt|dt|ddt dWdn1s0YtttdttB"}| dt|dWdn1sH0YWttttdnttttd0dS)NrrZ32KEYcSstttdttBSr)rrtest_reflect_key_namerSKEY_WOW64_64KEYrrrrrQsz2Win64WinregTests.test_reflection..Z64KEY)rHrrrKEY_WOW64_32KEYrXr)rr+r'r\rrr-r=rSr)r created_keyr5 open_failrrrtest_reflections>,*04 z Win64WinregTests.test_reflectionc CsztttdttBH}t|}|t|t| |t || t|Wdn1sb0Ydd}| t |tttdttB}||jdWdn1s0YWttttdnttttd0dS)NrcSstttdttBSr)rIrrrSrrrrrrQsz:Win64WinregTests.test_disable_reflection..)rHrrrrrr-r_boolZ assertFalserr(r\rrIrSrXr)r)rrdisabledrr5rrrtest_disable_reflections, , . z(Win64WinregTests.test_disable_reflectioncCs8|t}ttdWdn1s*0YdS)NZsome_value_that_does_not_exist)r\FileNotFoundErrorr=ZHKEY_CLASSES_ROOT)rctxrrrtest_exception_numberss z'Win64WinregTests.test_exception_numbersN) rKrLrMrUrZskipIfrrrHAS_REFLECTIONrrrrrrrrs  +  r__main__z)Remote registry calls can be tested usingz('test_winreg.py --remote \\machine_name'))rasysrzrtestrrkplatformrr import_modulerargvrAr IndexError ValueErrorZgetwindowsversionrZ WIN64_MACHINErgetpidZ test_key_baserrrZ REG_QWORDr'Z REG_EXPAND_SZZ REG_MULTI_SZrr*ZTestCaserrNrrrrKprintmainrrrrsR      9  b