o
    �õ±j“  ã                   @   s8   d Z ddlZddlZG dd„ dejƒZG dd„ dƒZdS )a8  
the nk-Record
=============

Offset	Size	Contents
0x0000	Word	ID: ASCII-"nk" = 0x6B6E
0x0002	Word	for the root-key: 0x2C, otherwise 0x20
0x0004	Q-Word	write-date/time in windows nt notation
0x0010	D-Word	Offset of Owner/Parent key
0x0014	D-Word	number of sub-Keys
0x001C	D-Word	Offset of the sub-key lf-Records
0x0024	D-Word	number of values
0x0028	D-Word	Offset of the Value-List
0x002C	D-Word	Offset of the sk-Record
0x0030	D-Word	Offset of the Class-Name
0x0044	D-Word	Unused (data-trash)
0x0048	Word	name-length
0x004A	Word	class-name length
0x004C	????	key-name
é    Nc                   @   s4   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdS )ÚNKFlagi @  i   é€   é@   é    é   é   é   é   é   N)Ú__name__Ú
__module__Ú__qualname__ÚUNK1ÚUNK2ÚUNK3ÚPREDEFINED_HANDLEÚ
ASCII_NAMEÚSYMLINKÚ	NO_DELETEÚROOTÚFOREIGN_MOUNTÚVOLATILE© r   r   úŠ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/aiowinreg/filestruct/nk.pyr      s    r   c                   @   s@   e Zd Zdd„ Zedd„ ƒZedd„ ƒZedd„ ƒZd	d
„ ZdS )ÚNTRegistryNKc                 C   sˆ   d| _ d | _d | _d | _d | _d | _d | _d | _d | _d | _	d | _
d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d S )Nó   nk)ÚmagicÚflagsÚ	wite_timeÚowner_offsetÚu1Úsubkey_cnt_stableÚ
subkey_cntÚoffset_lf_stableÚ	offset_lfÚ	value_cntÚoffset_value_listÚ	offset_skÚoffset_classnameÚsk_name_maxÚsk_classname_maxÚvl_name_maxÚvl_maxÚunknownÚname_lengthÚclass_name_lengthÚnameÚraw_data)Úselfr   r   r   Ú__init__*   s,   
zNTRegistryNK.__init__c              
   C   sž   t ƒ }| |_ttj| dd… ddd�ƒ|_tj| dd… ddd�|_tj|jv r*dnd	}z| d
d
|j … |_|j 	|¡|_W |S  t
yN } z|‚d }~ww )Nr	   r   ÚlittleF©ÚsignedéH   éJ   úiso-8859-15ú	utf-16-leéL   )r   r1   r   ÚintÚ
from_bytesr   r.   r   r0   ÚdecodeÚ	Exception)ÚdataÚnkÚencodingÚer   r   r   Ú	nameparseC   s   ý€ÿzNTRegistryNK.nameparsec                 C   s   t  t | ¡¡S )N)r   Úfrom_bufferÚioÚBytesIO)r@   r   r   r   r=   S   s   zNTRegistryNK.from_bytesc              
   C   s6  t ƒ }|  d¡|_|jdksJ ‚ttj|  d¡ddd�ƒ|_|  d¡|_tj|  d¡ddd�|_tj|  d¡ddd�|_	tj|  d¡ddd�|_
tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|jv rødnd	}z|  |j¡|_|j |¡|_W |S  t�y } z|‚d }~ww )
Nr	   r   r4   Fr5   r   r   r9   r:   )r   Úreadr   r   r<   r=   r   r   r    r   r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r   r0   r>   r?   )ÚbuffrA   rB   rC   r   r   r   rE   W   s>   ý€ÿzNTRegistryNK.from_bufferc                 C   s*   d}| j D ]}|d|| j | f 7 }q|S )Nz== NT Registry NK block ==
z	%s: %s 
)Ú__dict__)r2   ÚtÚkr   r   r   Ú__str__x   s   
zNTRegistryNK.__str__N)	r   r   r   r3   ÚstaticmethodrD   r=   rE   rM   r   r   r   r   r   )   s    


 r   )Ú__doc__rF   ÚenumÚIntFlagr   r   r   r   r   r   Ú<module>   s
   