o
    j4                     @   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 )a  
Der vk-Record
=============

Offset	Size	Contents
0x0000	Word	ID: ASCII-"vk" = 0x6B76
0x0002	Word	name length
0x0004	D-Word	length of the data
0x0008	D-Word	Offset of Data
0x000C	D-Word	Type of value
0x0010	Word	Flag
0x0012	Word	Unused (data-trash)
0x0014	????	Name

If bit 0 of the flag-word is set, a name is present, otherwise the
value has no name (=default)
If the data-size is lower 5, the data-offset value is used to store
the data itself!
    Nc                   @   s@   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ZdZdZdS )REGTYPEr                           	   
      N)__name__
__module____qualname__REG_UNKNOWNREG_NONEREG_SZREG_EXPAND_SZ
REG_BINARY	REG_DWORDREG_DWORD_BIG_ENDIANREG_LINKREG_MULTI_SZREG_RESOURCE_LISTREG_FULL_RESOURCE_DESCRIPTORREG_RESOURCE_REQUIREMENTS_LIST	REG_QWORD r   r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/aiowinreg/filestruct/vk.pyr      s    r   c                   @   sP   e Zd Zdd Zdd ZdddZddd	Zed
d Zedd Z	dd Z
dS )NTRegistryVKc                 C   sF   d| _ d | _d | _d | _d | _d | _d | _d | _d | _d | _	d | _
d S )Ns   vk)magicname_lengthdata_lengthoffset_data
value_typeflagunusednamedatadata_fmtvalue_type_raw)selfr   r   r    __init__(   s   
zNTRegistryVK.__init__c                 C   s   | j tjkr| jd | _d S | j tjkr=g | _| jdD ]}t	|dks,|dkr-q | j
|d d  q d S | j tjkrOtj| jddd| _d S | j tjkratj| jddd| _d S | j tjkrstj| jddd| _d S | j| _d S )	Nz	utf-16-les      r   s     littleF)	byteordersignedbig)r&   r   r   r*   decodestripr+   r   splitlenappendr   int
from_bytesr   r   )r-   entryr   r   r    format_data7   s    zNTRegistryVK.format_dataTc                 C   s   | j dk rd| j @ | _ | j dkrd| _n.| j dk r$| jjdddd| _n|d	u r3|| jd d
  n|| jd  || j | _|   | jS Nr   i    r   r   r/   Fr1   Ti   )r$   r*   r%   to_bytesseekreadr;   r+   )r-   readeris_filer   r   r    	load_dataK   s   


zNTRegistryVK.load_datac                    s   | j dk rd| j @ | _ | j dkrd| _nJ| j dk r%| jjdddd| _n:|d	u r7|| jd d
 I d H  n|| jd I d H  || j I d H }t|tr\|\| _}|d ur[|n|| _|   | j	S r<   )
r$   r*   r%   r?   r@   rA   
isinstancetupler;   r+   )r-   rB   rC   reserrr   r   r    
aload_data]   s&   




zNTRegistryVK.aload_datac                 C   s   t t| S )N)r!   from_bufferioBytesIO)r*   r   r   r    r9   u   s   zNTRegistryVK.from_bytesc                 C   s   t  }| 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}||_|dd t	D v rJt	||_
nt	j|_
tj| dddd|_tj| dddd|_| |j|_|S )	Nr   r/   Fr>   r   Tc                 S   s   g | ]}|j qS r   )value).0er   r   r    
<listcomp>   s    z,NTRegistryVK.from_buffer.<locals>.<listcomp>)r!   rA   r"   r8   r9   r#   r$   r%   r,   r   r&   r   r'   r(   r)   )buffvktr   r   r    rJ   y   s   zNTRegistryVK.from_bufferc                 C   s*   d}| j D ]}|d|| j | f 7 }q|S )Nz== NT Registry VK block ==
z	%s: %s 
)__dict__)r-   rS   kr   r   r    __str__   s   
zNTRegistryVK.__str__N)T)r   r   r   r.   r;   rD   rI   staticmethodr9   rJ   rV   r   r   r   r    r!   '   s    



r!   )__doc__rK   enumEnumr   r!   r   r   r   r    <module>   s
   