o
    àý°j“y  ã                   @   sÜ  d dl mZmZ d dlmZmZmZmZmZ d dl	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZ d dlmZmZ d dlmZ edƒZG dd	„ d	eƒZ eZ!eZ"eZ#eZ$eZ%d
Z&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4d Z5dZ6dZ7d
Z8dZ9dZ:d
Z;dZ<d
Z=dZ>dZ?dZ@G dd„ deƒZAG dd„ deƒZBG dd„ deƒZCG dd„ deƒZDG dd „ d eƒZEG d!d"„ d"eƒZFG d#d$„ d$eƒZGG d%d&„ d&eƒZHG d'd(„ d(eƒZIG d)d*„ d*eƒZJG d+d,„ d,eƒZKG d-d.„ d.eƒZLG d/d0„ d0eƒZMG d1d2„ d2eƒZNG d3d4„ d4eƒZOG d5d6„ d6eƒZPG d7d8„ d8eƒZQG d9d:„ d:eƒZRG d;d<„ d<eƒZSG d=d>„ d>eƒZTG d?d@„ d@eƒZUG dAdB„ dBeƒZVG dCdD„ dDeƒZWG dEdF„ dFeƒZXG dGdH„ dHeƒZYG dIdJ„ dJeƒZZG dKdL„ dLeƒZ[G dMdN„ dNeƒZ\G dOdP„ dPeƒZ]G dQdR„ dReƒZ^G dSdT„ dTeƒZ_G dUdV„ dVeƒZ`G dWdX„ dXeƒZaG dYdZ„ dZeƒZbG d[d\„ d\eƒZcG d]d^„ d^eƒZdG d_d`„ d`eƒZeG dadb„ dbeƒZfG dcdd„ ddeƒZgG dedf„ dfeƒZhG dgdh„ dheƒZiG didj„ djeƒZjG dkdl„ dleƒZkG dmdn„ dneƒZlG dodp„ dpeƒZmG dqdr„ dreƒZnG dsdt„ dteƒZoG dudv„ dveƒZpG dwdx„ dxeƒZqG dydz„ dzeƒZrG d{d|„ d|eƒZsG d}d~„ d~eƒZtG dd€„ d€eƒZuG d�d‚„ d‚eƒZvG dƒd„„ d„eƒZwG d…d†„ d†eƒZxG d‡dˆ„ dˆeƒZyG d‰dŠ„ dŠeƒZzG d‹dŒ„ dŒeƒZ{G d�dŽ„ dŽeƒZ|G d�d�„ d�eƒZ}G d‘d’„ d’eƒZ~G d“d”„ d”eƒZG d•d–„ d–eƒZ€G d—d˜„ d˜eƒZ�G d™dš„ dšeƒZ‚G d›dœ„ dœeƒZƒG d�dž„ džeƒZ„G dŸd „ d eƒZ…G d¡d¢„ d¢eƒZ†i d eIeJf“d
eKeLf“deMeNf“deOePf“deQeRf“deSeTf“deUeVf“deWeXf“deYeZf“d£e[e\f“d¤e]e^f“de_e`f“d¥eaebf“d¦ecedf“d§eeeff“d¨egehf“d©eiejf“ekelfemenfeoepfeqerfesetfeuevfewexfeyezfe{e|fe}e~fee€fe�e‚feƒe„fe…e†fdªœ¥Z‡d«d¬„ Zˆd­d®„ Z‰d¯d°„ ZŠefd±d²„Z‹efd³d´„ZŒefdµd¶„Z�efd·d¸„ZŽefd¹dº„Z�d»d¼„ Z�ed
eee;fd½d¾„Z‘d¿dÀ„ Z’efdÁdÂ„Z“dêdÃdÄ„Z”dÅdÆ„ Z•efdÇdÈ„Z–dÉdÊ„ Z—dËdÌ„ Z˜d
efdÍdÎ„Z™dÏdÐ„ ZšdëdÑdÒ„Z›dÓdÔ„ Zœe>fdÕdÖ„Z�efd×dØ„ZždÙdÚ„ ZŸdÛdÜ„ Z efdÝdÞ„Z¡dßdà„ Z¢ed
fdádâ„Z£efdãdä„Z¤efdådæ„Z¥dçdè„ Z¦déS )ìé    )ÚunpackÚpack)ÚNDRCALLÚ	NDRSTRUCTÚ
NDRPOINTERÚNDRUniConformantVaryingArrayÚNDRUniConformantArray)ÚDWORDÚUUIDÚULONGÚLPULONGÚBOOLEANÚSECURITY_INFORMATIONÚ	PFILETIMEÚRPC_UNICODE_STRINGÚFILETIMEÚNULLÚMAXIMUM_ALLOWEDÚOWNER_SECURITY_INFORMATIONÚPWCHARÚPRPC_UNICODE_STRING)ÚDCERPCException)Úsystem_errorsÚLOG)Úuuidtup_to_bin)z$338CD001-2244-31F1-AAAA-900038001003z1.0c                   @   s   e Zd Zddd„Zdd„ ZdS )ÚDCERPCSessionErrorNc                 C   s   t  | |||¡ d S )N)r   Ú__init__)ÚselfÚerror_stringÚ
error_codeÚpacket© r!   ú‰/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/impacket/dcerpc/v5/rrp.pyr   (   s   zDCERPCSessionError.__init__c                 C   sF   | j }|tjv rtj| d }tj| d }d| j ||f S d| j  S )Nr   é   z&RRP SessionError: code: 0x%x - %s - %sz*RRP SessionError: unknown error code: 0x%x)r   r   ÚERROR_MESSAGES)r   ÚkeyÚerror_msg_shortÚerror_msg_verboser!   r!   r"   Ú__str__+   s   

zDCERPCSessionError.__str__)NNN)Ú__name__Ú
__module__Ú__qualname__r   r(   r!   r!   r!   r"   r   '   s    
r   r#   é   é   é   é    é   é   i  é   é   é   é   é   c                   @   s.   e Zd ZdefdeffZd	dd„Zdd„ ZdS )
ÚRPC_HKEYÚcontext_handle_attributesÚcontext_handle_uuidNFc                 C   s   t  | ||¡ d| d< d S )Nó                   r9   )r   r   )r   ÚdataÚisNDR64r!   r!   r"   r   r   s   zRPC_HKEY.__init__c                 C   s   | d dkS )Nr9   r:   r!   )r   r!   r!   r"   ÚisNullv   s   zRPC_HKEY.isNull)NF)r)   r*   r+   r   r
   Ú	structurer   r=   r!   r!   r!   r"   r7   l   s    þ
r7   c                   @   s(   e Zd ZdefdefdefdeffZdS )ÚRVALENTÚve_valuenameÚve_valuelenÚve_valueptrÚve_typeN)r)   r*   r+   ÚPRRP_UNICODE_STRINGr	   r>   r!   r!   r!   r"   r?   z   ó    ür?   c                   @   s   e Zd ZeZdS )ÚRVALENT_ARRAYN)r)   r*   r+   r?   Úitemr!   r!   r!   r"   rF   ‚   s    rF   c                   @   s   e Zd ZdS )Ú
BYTE_ARRAYN)r)   r*   r+   r!   r!   r!   r"   rH   †   s    rH   c                   @   ó   e Zd ZdeffZdS )ÚPBYTE_ARRAYÚDataN)r)   r*   r+   rH   Úreferentr!   r!   r!   r"   rJ   ‰   ó    ÿrJ   c                   @   s"   e Zd ZdefdefdeffZdS )ÚRPC_SECURITY_DESCRIPTORÚlpSecurityDescriptorÚcbInSecurityDescriptorÚcbOutSecurityDescriptorN)r)   r*   r+   rJ   r	   r>   r!   r!   r!   r"   rN   Ž   ó
    ýrN   c                   @   ó"   e Zd ZdefdefdeffZdS )ÚRPC_SECURITY_ATTRIBUTESÚnLengthÚRpcSecurityDescriptorÚbInheritHandleN)r)   r*   r+   r	   rN   r   r>   r!   r!   r!   r"   rT   –   rR   rT   c                   @   rI   )ÚPRPC_SECURITY_ATTRIBUTESrK   N)r)   r*   r+   rT   rL   r!   r!   r!   r"   rX   �   rM   rX   c                   @   ó    e Zd ZdZdefdeffZdS )ÚOpenClassesRootr   Ú
ServerNameÚ
samDesiredN©r)   r*   r+   ÚopnumÚPREGISTRY_SERVER_NAMEÚREGSAMr>   r!   r!   r!   r"   rZ   ¦   ó
    þrZ   c                   @   ó   e Zd ZdefdeffZdS )ÚOpenClassesRootResponseÚphKeyÚ	ErrorCodeN©r)   r*   r+   r7   Úerror_status_tr>   r!   r!   r!   r"   rc   ­   ó    þrc   c                   @   rY   )ÚOpenCurrentUserr#   r[   r\   Nr]   r!   r!   r!   r"   ri   ´   ra   ri   c                   @   rb   )ÚOpenCurrentUserResponserd   re   Nrf   r!   r!   r!   r"   rj   »   rh   rj   c                   @   rY   )ÚOpenLocalMachiner,   r[   r\   Nr]   r!   r!   r!   r"   rk   Â   ra   rk   c                   @   rb   )ÚOpenLocalMachineResponserd   re   Nrf   r!   r!   r!   r"   rl   É   rh   rl   c                   @   rY   )ÚOpenPerformanceDatar2   r[   r\   Nr]   r!   r!   r!   r"   rm   Ð   ra   rm   c                   @   rb   )ÚOpenPerformanceDataResponserd   re   Nrf   r!   r!   r!   r"   rn   ×   rh   rn   c                   @   rY   )Ú	OpenUsersr-   r[   r\   Nr]   r!   r!   r!   r"   ro   Þ   ra   ro   c                   @   rb   )ÚOpenUsersResponserd   re   Nrf   r!   r!   r!   r"   rp   å   rh   rp   c                   @   ó   e Zd ZdZdeffZdS )ÚBaseRegCloseKeyr3   ÚhKeyN©r)   r*   r+   r^   r7   r>   r!   r!   r!   r"   rr   ì   ó    ÿrr   c                   @   rb   )ÚBaseRegCloseKeyResponsers   re   Nrf   r!   r!   r!   r"   rv   ò   rh   rv   c                   @   s>   e Zd ZdZdefdefdefdefdefdefde	ffZ
d	S )
ÚBaseRegCreateKeyr4   rs   ÚlpSubKeyÚlpClassÚ	dwOptionsr\   ÚlpSecurityAttributesÚlpdwDispositionN)r)   r*   r+   r^   r7   ÚRRP_UNICODE_STRINGr	   r`   rX   r   r>   r!   r!   r!   r"   rw   ù   ó    ùrw   c                   @   rS   )ÚBaseRegCreateKeyResponseÚ	phkResultr|   re   N)r)   r*   r+   r7   r   rg   r>   r!   r!   r!   r"   r     rR   r   c                   @   rY   )ÚBaseRegDeleteKeyr5   rs   rx   N©r)   r*   r+   r^   r7   r}   r>   r!   r!   r!   r"   r�     ra   r�   c                   @   rI   )ÚBaseRegDeleteKeyResponsere   N©r)   r*   r+   rg   r>   r!   r!   r!   r"   rƒ     rM   rƒ   c                   @   rY   )ÚBaseRegDeleteValuer.   rs   ÚlpValueNameNr‚   r!   r!   r!   r"   r…     ra   r…   c                   @   rI   )ÚBaseRegDeleteValueResponsere   Nr„   r!   r!   r!   r"   r‡   !  rM   r‡   c                   @   s2   e Zd ZdZdefdefdefdefdeffZ	dS )ÚBaseRegEnumKeyé	   rs   ÚdwIndexÚlpNameInÚ	lpClassInÚlpftLastWriteTimeN)
r)   r*   r+   r^   r7   r	   r}   rD   r   r>   r!   r!   r!   r"   rˆ   '  ó    ûrˆ   c                   @   ó(   e Zd ZdefdefdefdeffZdS )ÚBaseRegEnumKeyResponseÚ	lpNameOutÚlplpClassOutr�   re   N)r)   r*   r+   r}   rD   r   rg   r>   r!   r!   r!   r"   r�   1  rE   r�   c                   @   s>   e Zd ZdZdefdefdefdefdefdefdeffZ	d	S )
ÚBaseRegEnumValueé
   rs   rŠ   ÚlpValueNameInÚlpTypeÚlpDataÚlpcbDataÚlpcbLenN)
r)   r*   r+   r^   r7   r	   r}   r   rJ   r>   r!   r!   r!   r"   r“   :  r~   r“   c                   @   s4   e Zd ZdefdefdefdefdefdeffZdS )ÚBaseRegEnumValueResponseÚlpValueNameOutr–   r—   r˜   r™   re   N)r)   r*   r+   r}   r   rJ   rg   r>   r!   r!   r!   r"   rš   F  s    úrš   c                   @   rq   )ÚBaseRegFlushKeyr6   rs   Nrt   r!   r!   r!   r"   rœ   Q  ru   rœ   c                   @   rI   )ÚBaseRegFlushKeyResponsere   Nr„   r!   r!   r!   r"   r�   W  rM   r�   c                   @   ó&   e Zd ZdZdefdefdeffZdS )ÚBaseRegGetKeySecurityé   rs   ÚSecurityInformationÚpRpcSecurityDescriptorInN©r)   r*   r+   r^   r7   r   rN   r>   r!   r!   r!   r"   rŸ   ]  ó    ýrŸ   c                   @   rb   )ÚBaseRegGetKeySecurityResponseÚpRpcSecurityDescriptorOutre   N)r)   r*   r+   rN   rg   r>   r!   r!   r!   r"   r¥   e  rh   r¥   c                   @   s&   e Zd ZdZdefdefdeffZdS )ÚBaseRegLoadKeyé   rs   rx   ÚlpFileNr‚   r!   r!   r!   r"   r§   l  r¤   r§   c                   @   rI   )ÚBaseRegLoadKeyResponsere   Nr„   r!   r!   r!   r"   rª   t  rM   rª   c                   @   ó,   e Zd ZdZdefdefdefdeffZdS )ÚBaseRegOpenKeyé   rs   rx   rz   r\   N)	r)   r*   r+   r^   r7   r}   r	   r`   r>   r!   r!   r!   r"   r¬   z  ó    ür¬   c                   @   rb   )ÚBaseRegOpenKeyResponser€   re   Nrf   r!   r!   r!   r"   r¯   ƒ  rh   r¯   c                   @   rY   )ÚBaseRegQueryInfoKeyé   rs   rŒ   Nr‚   r!   r!   r!   r"   r°   Š  ra   r°   c                   @   sL   e Zd Zdefdefdefdefdefdefdefdefd	efd
eff
ZdS )ÚBaseRegQueryInfoKeyResponseÚ
lpClassOutÚ
lpcSubKeysÚlpcbMaxSubKeyLenÚlpcbMaxClassLenÚ	lpcValuesÚlpcbMaxValueNameLenÚlpcbMaxValueLenÚlpcbSecurityDescriptorr�   re   N)r)   r*   r+   r   r	   r   rg   r>   r!   r!   r!   r"   r²   ‘  s    ör²   c                   @   s8   e Zd ZdZdefdefdefdefdefdeffZdS )	ÚBaseRegQueryValueé   rs   r†   r–   r—   r˜   r™   N)	r)   r*   r+   r^   r7   r}   r   rJ   r>   r!   r!   r!   r"   r»      s    úr»   c                   @   s.   e Zd ZdefdefdefdefdeffZdS )ÚBaseRegQueryValueResponser–   r—   r˜   r™   re   N)r)   r*   r+   r   rJ   rg   r>   r!   r!   r!   r"   r½   «  s    ûr½   c                   @   s,   e Zd ZdZdefdefdefdeffZdS )ÚBaseRegReplaceKeyé   rs   rx   Ú	lpNewFileÚ	lpOldFileNr‚   r!   r!   r!   r"   r¾   µ  r®   r¾   c                   @   rI   )ÚBaseRegReplaceKeyResponsere   Nr„   r!   r!   r!   r"   rÂ   ¾  rM   rÂ   c                   @   rž   )ÚBaseRegRestoreKeyé   rs   r©   ÚFlagsN)r)   r*   r+   r^   r7   r}   r	   r>   r!   r!   r!   r"   rÃ   Ä  r¤   rÃ   c                   @   rI   )ÚBaseRegRestoreKeyResponsere   Nr„   r!   r!   r!   r"   rÆ   Ì  rM   rÆ   c                   @   rž   )ÚBaseRegSaveKeyé   rs   r©   ÚpSecurityAttributesN)r)   r*   r+   r^   r7   r}   rX   r>   r!   r!   r!   r"   rÇ   Ò  r¤   rÇ   c                   @   rI   )ÚBaseRegSaveKeyResponsere   Nr„   r!   r!   r!   r"   rÊ   Ú  rM   rÊ   c                   @   rž   )ÚBaseRegSetKeySecurityé   rs   r¡   ÚpRpcSecurityDescriptorNr£   r!   r!   r!   r"   rË   à  r¤   rË   c                   @   rI   )ÚBaseRegSetKeySecurityResponsere   Nr„   r!   r!   r!   r"   rÎ   è  rM   rÎ   c                   @   ó2   e Zd ZdZdefdefdefdefdeffZdS )ÚBaseRegSetValueé   rs   r†   ÚdwTyper—   ÚcbDataN)	r)   r*   r+   r^   r7   r}   r	   r   r>   r!   r!   r!   r"   rÐ   î  rŽ   rÐ   c                   @   rI   )ÚBaseRegSetValueResponsere   Nr„   r!   r!   r!   r"   rÔ   ø  rM   rÔ   c                   @   rY   )ÚBaseRegUnLoadKeyé   rs   rx   Nr‚   r!   r!   r!   r"   rÕ   þ  ra   rÕ   c                   @   rI   )ÚBaseRegUnLoadKeyResponsere   Nr„   r!   r!   r!   r"   r×     rM   r×   c                   @   rq   )ÚBaseRegGetVersioné   rs   Nrt   r!   r!   r!   r"   rØ     ru   rØ   c                   @   rb   )ÚBaseRegGetVersionResponseÚlpdwVersionre   N)r)   r*   r+   r	   rg   r>   r!   r!   r!   r"   rÚ     rh   rÚ   c                   @   rY   )ÚOpenCurrentConfigé   r[   r\   Nr]   r!   r!   r!   r"   rÜ     ra   rÜ   c                   @   rb   )ÚOpenCurrentConfigResponserd   re   Nrf   r!   r!   r!   r"   rÞ     rh   rÞ   c                   @   rÏ   )ÚBaseRegQueryMultipleValuesé   rs   Ú
val_listInÚnum_valsÚ
lpvalueBufÚ
ldwTotsizeN©	r)   r*   r+   r^   r7   rF   r	   rJ   r>   r!   r!   r!   r"   rß   &  rŽ   rß   c                   @   r�   )Ú"BaseRegQueryMultipleValuesResponseÚval_listOutrã   rä   re   N©r)   r*   r+   rF   rJ   r	   rg   r>   r!   r!   r!   r"   ræ   0  rE   ræ   c                   @   r«   )ÚBaseRegSaveKeyExé   rs   r©   rÉ   rÅ   N)	r)   r*   r+   r^   r7   r}   rX   r	   r>   r!   r!   r!   r"   ré   9  r®   ré   c                   @   rI   )ÚBaseRegSaveKeyExResponsere   Nr„   r!   r!   r!   r"   rë   B  rM   rë   c                   @   rY   )ÚOpenPerformanceTextr/   r[   r\   Nr]   r!   r!   r!   r"   rì   H  ra   rì   c                   @   rb   )ÚOpenPerformanceTextResponserd   re   Nrf   r!   r!   r!   r"   rí   O  rh   rí   c                   @   rY   )ÚOpenPerformanceNlsTexté!   r[   r\   Nr]   r!   r!   r!   r"   rî   V  ra   rî   c                   @   rb   )ÚOpenPerformanceNlsTextResponserd   re   Nrf   r!   r!   r!   r"   rð   ]  rh   rð   c                   @   rÏ   )ÚBaseRegQueryMultipleValues2é"   rs   rá   râ   rã   rä   Nrå   r!   r!   r!   r"   rñ   d  rŽ   rñ   c                   @   r�   )Ú#BaseRegQueryMultipleValues2Responserç   rã   ÚldwRequiredSizere   Nrè   r!   r!   r!   r"   ró   n  rE   ró   c                   @   r«   )ÚBaseRegDeleteKeyExé#   rs   rx   Ú
AccessMaskÚReservedN)	r)   r*   r+   r^   r7   r}   r`   r	   r>   r!   r!   r!   r"   rõ   w  r®   rõ   c                   @   rI   )ÚBaseRegDeleteKeyExResponsere   Nr„   r!   r!   r!   r"   rù   €  rM   rù   r‰   r”   r    r¨   r­   r±   r¼   )r¿   rÄ   rÈ   rÌ   rÑ   rÖ   rÙ   rÝ   rà   rê   r/   rï   rò   rö   c                 C   s(   | t kr| S | dd … dkr| d S | S )Néÿÿÿÿú )r   )Ústringr!   r!   r"   ÚcheckNullString­  s
   rý   c                 C   sf  | t krtd|ƒ}|S | tkrtd|ƒ}|S | tkr=z
t|ƒ d¡}W |S  ty<   dd l}| | 	¡ ¡ d¡}Y |S w | t
krrzt|ƒ}|dd… dkrR|d }| d¡}W |S  tyq   dd l}| | 	¡ ¡ d¡}Y |S w | tkr}td|ƒ}|S | tkrˆtd	|ƒ}|S | tkr¯z
t|ƒ d¡}W |S  ty®   dd l}| | 	¡ ¡ d¡}Y |S w |}|S )
Nú<Lú>Lúutf-16ler   éþÿÿÿrú   rû   ú<Qú>Q)Ú	REG_DWORDr   ÚREG_DWORD_BIG_ENDIANÚREG_EXPAND_SZrý   ÚencodeÚUnicodeDecodeErrorÚsysÚdecodeÚgetfilesystemencodingÚREG_MULTI_SZÚ	REG_QWORDÚREG_QWORD_LITTLE_ENDIANÚREG_SZ)Ú	valueTypeÚvalueÚretDatar	  Úvr!   r!   r"   Ú	packValue¶  sX   
 á
ãææðð
õ

÷úúr  c                 C   sâ   | t krtdd |¡ƒd }|S | tkr tdd |¡ƒd }|S | tkr.d |¡ d¡}|S | tkr<d |¡ d¡}|S | tkrLtdd |¡ƒd }|S | tkr\tdd |¡ƒd }|S | t	krjd |¡ d¡}|S d |¡}|S )Nrþ   ó    r   rÿ   r   r  r  )
r  r   Újoinr  r  r
  r  r  r  r  )r  r  r  r!   r!   r"   ÚunpackValueÚ  s.   ñóõ
÷ùû
þr  c                 C   ó    t ƒ }t|d< ||d< |  |¡S ©Nr[   r\   )rZ   r   Úrequest©Údcer\   r  r!   r!   r"   ÚhOpenClassesRootî  ó   
r  c                 C   r  r  )ri   r   r  r  r!   r!   r"   ÚhOpenCurrentUserô  r  r  c                 C   r  r  )rk   r   r  r  r!   r!   r"   ÚhOpenLocalMachineú  r  r   c                 C   r  r  )rm   r   r  r  r!   r!   r"   ÚhOpenPerformanceData   r  r!  c                 C   r  r  )ro   r   r  r  r!   r!   r"   Ú
hOpenUsers  r  r"  c                 C   ó   t ƒ }||d< |  |¡S ©Nrs   )rr   r  ©r  rs   r  r!   r!   r"   ÚhBaseRegCloseKey  ó   
r&  c           	      C   sj   t ƒ }||d< t|ƒ|d< t|ƒ|d< ||d< ||d< |tkr(t|d d d< n||d< ||d	< |  |¡S )
Nrs   rx   ry   rz   r\   r{   rV   rO   r|   )rw   rý   r   r  )	r  rs   rx   ry   rz   r\   r{   r|   r  r!   r!   r"   ÚhBaseRegCreateKey  s   
r(  c                 C   ó$   t ƒ }||d< t|ƒ|d< |  |¡S ©Nrs   rx   )r�   rý   r  ©r  rs   rx   r  r!   r!   r"   ÚhBaseRegDeleteKey   ó   
r,  c                 C   s\   t ƒ }||d< ||d< d|jd jd< d|jd jd jd jd< d	|d
< ||d< |  |¡S )Nrs   rŠ   é   r‹   ÚMaximumLengthr1   rK   ÚMaximumCountz@                                                                rŒ   r�   )rˆ   Úfieldsr  )r  rs   rŠ   r�   r  r!   r!   r"   ÚhBaseRegEnumKey&  s   
r2  c              
   C   sØ   t ƒ }||d< ||d< d}	 z/|d |jd jd< ||jd jd jd jd	< d
| |d< ||d< ||d< |  |¡}W 	 |S  tyk } z"|dkrOt d¡ ‚ | ¡ tjkrf|d7 }| 	¡ d }W Y d }~q‚ d }~ww )Nrs   rŠ   r#   Tr,   r•   r/  rK   r0  ó    r—   r˜   r™   z9Too many retries when calling hBaseRegEnumValue, aborting)
r“   r1  r  r   r   ÚdebugÚget_error_coder   ÚERROR_MORE_DATAÚ
get_packet)r  rs   rŠ   ÚdataLenr  ÚretriesÚrespÚer!   r!   r"   ÚhBaseRegEnumValue1  s2   ò
€ör<  c                 C   r#  r$  )rœ   r  r%  r!   r!   r"   ÚhBaseRegFlushKeyT  r'  r=  c                 C   s8   t ƒ }||d< ||d< t|d d< d|d d< |  |¡S )Nrs   r¡   r¢   rO   r.  rP   )rŸ   r   r  )r  rs   ÚsecurityInformationr  r!   r!   r"   ÚhBaseRegGetKeySecurityY  s   
r?  c                 C   s0   t ƒ }||d< t|ƒ|d< t|ƒ|d< |  |¡S )Nrs   rx   r©   )r§   rý   r  )r  rs   rx   r©   r  r!   r!   r"   ÚhBaseRegLoadKeyb  s
   
r@  c                 C   r)  r*  )rÕ   rý   r  r+  r!   r!   r"   ÚhBaseRegUnLoadKeyi  r-  rA  c                 C   ó4   t ƒ }||d< t|ƒ|d< ||d< ||d< |  |¡S )Nrs   rx   rz   r\   )r¬   rý   r  )r  rs   rx   rz   r\   r  r!   r!   r"   ÚhBaseRegOpenKeyo  ó   
rC  c                 C   sD   t ƒ }||d< d|jd jd< d|jd jd jd jd< |  |¡S )Nrs   r.  rŒ   r/  r1   rK   r0  )r°   r1  r  r%  r!   r!   r"   ÚhBaseRegQueryInfoKeyw  s
   
rE  c              
   C   s¼   t ƒ }||d< t|ƒ|d< d}	 zd| |d< ||d< ||d< |  |¡}W n* tyO } z|dkr7t d	¡ ‚ | ¡ tjkrJ| 	¡ d }W Y d }~q‚ d }~ww 	 |d
 t
|d
 |d ƒfS )Nrs   r†   r#   Tr3  r—   r˜   r™   z:Too many retries when calling hBaseRegQueryValue, abortingr–   )r»   rý   r  r   r   r4  r5  r   r6  r7  r  )r  rs   r†   r8  r  r9  r:  r;  r!   r!   r"   ÚhBaseRegQueryValue€  s,   
€÷rF  c                 C   s<   t ƒ }||d< t|ƒ|d< t|ƒ|d< t|ƒ|d< |  |¡S )Nrs   rx   rÀ   rÁ   )r¾   rý   r  )r  rs   rx   rÀ   rÁ   r  r!   r!   r"   ÚhBaseRegReplaceKeyž  s   
rG  c                 C   ó,   t ƒ }||d< t|ƒ|d< ||d< |  |¡S )Nrs   r©   rÅ   )rÃ   rý   r  )r  rs   r©   Úflagsr  r!   r!   r"   ÚhBaseRegRestoreKey¦  ó
   
rJ  c                 C   rH  )Nrs   r©   rÉ   )rÇ   rý   r  )r  rs   r©   rÉ   r  r!   r!   r"   ÚhBaseRegSaveKey­  rK  rL  c                 C   sJ   t ƒ }||d< t|ƒ|d< ||d< t||ƒ|d< t|d ƒ|d< |  |¡S )Nrs   r†   rÒ   r—   rÓ   )rÐ   rý   r  Úlenr  )r  rs   r†   rÒ   r—   r  r!   r!   r"   ÚhBaseRegSetValue´  s   
rN  c                 C   r#  r$  )rØ   r  r%  r!   r!   r"   ÚhBaseRegGetVersion½  r'  rO  c                 C   r  r  )rÜ   r   r  r  r!   r!   r"   ÚhOpenCurrentConfigÂ  r  rP  c                 C   sð   t ƒ }||d< |D ]&}tƒ }t|d ƒ|d< t|d ƒ|d< t|d< |d |d< |d  |¡ q	t|d ƒ|d	< td
ƒ|d< d|d< |  |¡}tƒ }|d D ]'}tƒ }|d |d< t	|d |d |d |d |d  … ƒ|d< | |¡ qN|S )Nrs   Ú	ValueNamer@   rA   rB   Ú	ValueTyperC   rá   râ   s€                                                                                                                                   rã   é€   rä   rç   Ú	ValueData)
rß   r?   rý   rM  r   ÚappendÚlistr  Údictr  )r  rs   rá   r  rG   Úitemnr:  ÚretValr!   r!   r"   ÚhBaseRegQueryMultipleValuesÈ  s(   
.rZ  c                 C   rB  )Nrs   r©   rÉ   rÅ   )ré   rý   r  )r  rs   r©   rÉ   rI  r  r!   r!   r"   ÚhBaseRegSaveKeyExä  rD  r[  c                 C   r  r  )rì   r   r  r  r!   r!   r"   ÚhOpenPerformanceTextì  r  r\  c                 C   r  r  )rî   r   r  r  r!   r!   r"   ÚhOpenPerformanceNlsTextò  r  r]  c                 C   r)  )Nrs   r†   )r…   rý   r  )r  rs   r†   r  r!   r!   r"   ÚhBaseRegDeleteValueø  r-  r^  N)r0   )r1   )§Ústructr   r   Úimpacket.dcerpc.v5.ndrr   r   r   r   r   Úimpacket.dcerpc.v5.dtypesr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   Úimpacket.dcerpc.v5.rpcrtr   Úimpacketr   r   Úimpacket.uuidr   ÚMSRPC_UUID_RRPr   r_   rg   r}   rD   r`   ÚKEY_QUERY_VALUEÚKEY_SET_VALUEÚKEY_CREATE_SUB_KEYÚKEY_ENUMERATE_SUB_KEYSÚKEY_CREATE_LINKÚKEY_WOW64_64KEYÚKEY_WOW64_32KEYÚKEY_READÚ
REG_BINARYr  ÚREG_DWORD_LITTLE_ENDIANr  r  ÚREG_LINKr  ÚREG_NONEr  r  r  ÚREG_OPTION_BACKUP_RESTOREÚREG_OPTION_OPEN_LINKÚREG_CREATED_NEW_KEYÚREG_OPENED_EXISTING_KEYÚREG_WHOLE_HIVE_VOLATILEÚREG_REFRESH_HIVEÚREG_NO_LAZY_FLUSHÚREG_FORCE_RESTOREr7   r?   rF   rH   rJ   rN   rT   rX   rZ   rc   ri   rj   rk   rl   rm   rn   ro   rp   rr   rv   rw   r   r�   rƒ   r…   r‡   rˆ   r�   r“   rš   rœ   r�   rŸ   r¥   r§   rª   r¬   r¯   r°   r²   r»   r½   r¾   rÂ   rÃ   rÆ   rÇ   rÊ   rË   rÎ   rÐ   rÔ   rÕ   r×   rØ   rÚ   rÜ   rÞ   rß   ræ   ré   rë   rì   rí   rî   rð   rñ   ró   rõ   rù   ÚOPNUMSrý   r  r  r  r  r   r!  r"  r&  r(  r,  r2  r<  r=  r?  r@  rA  rC  rE  rF  rG  rJ  rL  rN  rO  rP  rZ  r[  r\  r]  r^  r!   r!   r!   r"   Ú<module>   s~  @	
		
	

		
		ÿþýüûúùø	÷
öõôóòñðïá%	$
#	
		