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signedH   J   iso-8859-15	utf-16-leL   )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 rd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
   