a zeU @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_nameselfrD/opt/bitninja-python-dojo/embedded/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