o
    �õ±jÒ  ã                   @   sn   d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ G dd	„ d	ejƒZdS )
é    N)ÚREGCMDPathCompleter)Úaiocmd)Úlogger)ÚAIOWinRegHive)ÚREGTYPE)ÚAFilec                   @   s‚   e Zd Zddd„Zddd„Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zd dd„Zdd„ Zdd„ Zdd„ Zdd„ ZdS )!ÚWinRegReaderConsoleNc                 C   s>   t jj| dd� d | _|| _d | _d | _d | _g | _g | _	d S )NF)Úignore_sigint)
r   ÚPromptToolkitCmdÚ__init__ÚfilenameÚfilepathÚ
filehandleÚhiveÚ"_WinRegReaderConsole__current_pathÚ'_WinRegReaderConsole__current_path_keysÚ'_WinRegReaderConsole__current_path_vals)Úselfr   © r   ú�/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/aiowinreg/examples/console.pyr      s   
zWinRegReaderConsole.__init__c              
   Ã   sÚ   �zI| j dur| j  ¡  |du r| jdu rtdƒ‚|dur || _t | j¡| _t| jƒ| _ t| j ƒ| _	d| _
d| j | _tdƒ |  d¡I dH  W dS  tyl } zt ¡  tdt|ƒ ƒ d|fW  Y d}~S d}~ww )	zOpens a hive fileNzNo filepath specified!Ú z[%s][ROOT]> zFile opened!©TNzOpen failed! Reason: %sF)r   Úcloser   Ú	ExceptionÚntpathÚbasenamer   r   r   r   r   ÚpromptÚprintÚdo_cdÚ	tracebackÚ	print_excÚstr)r   r   Úer   r   r   Údo_open   s,   €

€ýzWinRegReaderConsole.do_openc              
   Ã   s~   �z| j  | j¡I dH D ]}td| j| j|f ƒ qW dS  ty> } zt ¡  tdt|ƒ ƒ d|fW  Y d}~S d}~ww )z"Lists all keys in the current pathNz[%s][ROOT\%s\%s]r   úLS failed! Reason: %sF)	r   Úenum_keyr   r   r   r   r   r    r!   ©r   Úkeyr"   r   r   r   Údo_ls,   s   €€ýzWinRegReaderConsole.do_lsc              
   Ã   sv   �z| j  | j¡I dH }|  | j|¡I dH  W dS  ty: } zt ¡  tdt|ƒ ƒ d|fW  Y d}~S d}~ww )z$Lists all values in the current pathNr   zLSVAL failed! Reason: %sF)	r   Úfind_keyr   Ú_WinRegReaderConsole__lsvalr   r   r    r   r!   r&   r   r   r   Údo_lsval8   s   €€ýzWinRegReaderConsole.do_lsvalc              
   Ã   s"  �zm| j  |¡I d H D ]`}| ¡ }|d | }| j j||d�I d H }|\}}|tjkr8td| j||| ¡ f ƒ |tj	krTt
|ƒD ]\}}	td| j||j||	f ƒ qAq|}
t|tƒr_|
 ¡ }
td| j||j|
f ƒ qW dS  ty� } zt ¡  tdt|ƒ ƒ d|fW  Y d }~S d }~ww )Nú\©r'   z[%s][ROOT\%s][%s] %sz[%s][ROOT\%s][%s][%s] %sr   zLSVAL inner failed! Reason: %sF)r   Úlist_valuesÚdecodeÚ	get_valuer   ÚREG_UNKNOWNr   r   ÚhexÚREG_MULTI_SZÚ	enumerateÚnameÚ
isinstanceÚbytesr   r   r    r!   )r   Úbasepathr'   Ú	valuenameÚ	valuepathÚresÚ	valuetypeÚvalueÚiÚvalÚtr"   r   r   r   Ú__lsvalC   s0   €

ÿ
€ýzWinRegReaderConsole.__lsvalc              
   Ã   sj   �z| j  | j¡I dH }t|ƒ W dS  ty4 } zt ¡  tdt|ƒ ƒ d|fW  Y d}~S d}~ww )z!Reads classes in the current pathNr   zCLASS failed! Reason: %sF)r   Ú	get_classr   r   r   r   r    r!   )r   Úclr"   r   r   r   Údo_class[   s   €€ýzWinRegReaderConsole.do_classc              
   Ã   s€   �z| j  | j¡I dH }| j  |¡I dH }t| ¡ ƒ W dS  ty? } zt ¡  tdt	|ƒ ƒ d|fW  Y d}~S d}~ww )z-Reads security descriptor in the current pathNr   zSD failed! Reason: %sF)
r   r)   r   Úget_sdr   Úto_sddlr   r   r    r!   )r   r'   Úsdr"   r   r   r   Údo_sdf   s   €€ýzWinRegReaderConsole.do_sdc              
   Ã   sj  �z‘|dkr	W dS | j dkr|dkrtdƒ W dS || _ n3|dkr8| j  d¡dkr-d| _ n#| j  dd¡d	 | _ n| d¡d
u rI|  j d| 7  _ n|  j |7  _ g | _| j | j ¡I dH D ]}| j |¡ q]g | _	| j 
| j ¡I dH }| j |¡I dH D ]
}| j	 | ¡ ¡ q|d| j| j f | _W dS  ty´ } zt ¡  tdt|ƒ ƒ d
|fW  Y d}~S d}~ww )zChanges the current pathÚ.r   r   z..zYou are in root!r,   éÿÿÿÿé   r   FNz[%s][ROOT\%s]> r$   )r   r   ÚfindÚsplitÚ
startswithr   r   r%   Úappendr   r)   r.   r/   r   r   r   r   r    r!   )r   Úpathr'   ÚtkeyÚvalnamer"   r   r   r   r   s   s>   €
€ýzWinRegReaderConsole.do_cdc           
   
   Ã   s"  �zm| j  | j¡I dH }|du rtdƒ W dS | j j||d�I dH }|du r-tdƒ W dS |\}}|tjkr>td||f ƒ |tjkrXt|ƒD ]\}}td|||f ƒ qGW dS |}t	|t
ƒrc| ¡ }td|j|f ƒ W dS  ty� }	 zt ¡  td	t|	ƒ ƒ d
|	fW  Y d}	~	S d}	~	ww )z!Reads a value in the current pathNzKey not found!)FNr-   zValue not found!z%s: %sz
%s[%s]: %sr   zCAT failed! Reason: %sF)r   r)   r   r   r0   r   r1   r3   r4   r6   r7   r2   r5   r   r   r    r!   )
r   r9   r'   r;   r<   r=   r>   r?   r@   r"   r   r   r   Údo_catœ   s8   €

ü
€ýzWinRegReaderConsole.do_catrK   c              
   Ã   s¶   �z7| j j| j|d�2 z)3 dH W }td| j|f ƒ | j  |¡I dH }|  ||¡I dH \}}|dur4|‚q6 W dS  tyZ } zt 	¡  tdt
|ƒ ƒ d|fW  Y d}~S d}~ww )z5Recursively lists keys and values in the current path)ÚdepthNz[%s][ROOT\%s]r   zWALK failed! Reason: %sF)r   Úwalkr   r   r   r)   r*   r   r   r    r!   )r   rT   Úkeypathr'   Ú_Úerrr"   r   r   r   Údo_walk¸   s"   €ÿü€ýzWinRegReaderConsole.do_walkc                 C   ó   | j d u rg S t| jƒS ©N)r   Úlistr   ©r   r   r   r   Úget_current_keysÍ   ó   

z$WinRegReaderConsole.get_current_keysc                 C   rZ   r[   )r   r\   r   r]   r   r   r   Úget_current_valsÒ   r_   z$WinRegReaderConsole.get_current_valsc                 C   ó   t | jd�S ©N)Úget_current_dirs)r   r^   r]   r   r   r   Ú_cd_completions×   ó   z#WinRegReaderConsole._cd_completionsc                 C   ra   rb   )r   r`   r]   r   r   r   Ú_cat_completionsÚ   re   z$WinRegReaderConsole._cat_completionsr[   )rK   )Ú__name__Ú
__module__Ú__qualname__r   r#   r(   r+   r*   rD   rH   r   rS   rY   r^   r`   rd   rf   r   r   r   r   r      s    


)
r   )r   r   Ú#aiowinreg.utils.regcmdpathcompleterr   Ú aiowinreg.external.aiocmd.aiocmdr   Ú	aiowinregr   Úaiowinreg.ahiver   Úaiowinreg.filestruct.vkr   Úaiowinreg.utils.afiler   r
   r   r   r   r   r   Ú<module>   s   