o
    j                     @   sj   d dl mZ d dlT d dlT d dlmZ d dlmZ d dlm	Z	m
Z
mZmZmZmZmZ G dd dZdS )	    )SMBDirectory)*)FileInfoClass)SECURITY_DESCRIPTOR)Callable	AwaitableListDictAsyncGeneratorTupleUnionc                   @   s^   e Zd ZdddZedd Zdd Zdd	d
Zdee	e
eedf f  fddZdd ZdS )SMBShareNc                 C   sd   || _ || _|| _|| _|d urt|ddnd | _d | _d | _d | _	d | _
d | _i | _i | _d S )N  )fullpathunc_pathnametypestrreplaceremarkflagscapabilitiesmaximal_accesstree_idsecurity_descriptorfilessubdirs)selfr   styper   r    r    /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/aiosmb/commons/interfaces/share.py__init__   s   
zSMBShare.__init__c                 C   s
   t | dS )N)r   )r   )r   r    r    r!   from_unc   s   
zSMBShare.from_uncc              
      s   z3| | jI dH \}}|dur||j| _|j| _| j| _t }| j|_d|_| j|_|| jd< W dS  tyJ } z
d|fW  Y d}~S d}~ww )z
		Connect to the share and fills connection related info in the SMBShare object
		FULLPATH MUST BE SPECIFIED ALREADY FOR THIS OBJECT!
		Nr   )TN)tree_connectr   r   r   r   r   r   	Exception)r   
connection
tree_entryerrinit_direr    r    r!   connect   s$   
zSMBShare.connect\c           	   
      s   zT| j du r| |I dH \}}|dur|| j }|durH|||tjtjtjtj	B t
jdI dH \}}|dur;||||tjI dH \}}|durQd|fW S |dfW S  tyk } z
d|fW  Y d}~S d}~ww )z&
		Lists all snapshots of the share
		Nr   )r   r+   createFileAccessMaskREAD_CONTROLShareAccessFILE_SHARE_READCreateOptionsFILE_DIRECTORY_FILEFILE_SYNCHRONOUS_IO_NONALERTCreateDisposition	FILE_OPENioctlCtlCodeFSCTL_SRV_ENUMERATE_SNAPSHOTSr%   )	r   r&   path_r(   r   file_id	snapshotsr*   r    r    r!   r=   4   s&   
.

zSMBShare.snapshotsreturnc              
      s  | j d u rd }zzj| j}|d u r$| |I d H \}}|d ur!|| j}|d urrtj}tj}tjtj	B }d}	t
j}
||d||||
|	I d H \}}|d urO||j||tjtjtjtjB tjB tjB ddI d H \| _ }|d urr|W n7 ty } z+d |fW  Y d }~W |d ur|||I d H  |d ur| jd u r||I d H  S S S d }~ww W |d ur|||I d H  |d ur| jd u r||I d H  n!|d ur|||I d H  |d ur| jd u r||I d H  w w w | j d fS )Nr   r   )	info_typeinformation_classadditional_informationr   )r   r   r+   r.   r/   r0   r1   r2   r3   r4   r5   r6   r-   
query_infoQueryInfoTypeSECURITYr   NONESecurityInfoATTRIBUTE_SECURITY_INFORMATIONDACL_SECURITY_INFORMATIONOWNER_SECURITY_INFORMATIONGROUP_SECURITY_INFORMATIONr%   closetree_disconnect)r   r&   r<   r   r;   r(   desired_access
share_modecreate_options
file_attrscreate_dispositionr*   r    r    r!   get_security_descriptorI   sj   

z SMBShare.get_security_descriptorc                 C   s   d}| j D ]D}t| j | tr | j | D ]
}|d||f 7 }qqt| j | tr>| j | D ]}|d|| j | | f 7 }q-q|d|| j | f 7 }q|S )Nz===== SHARE =====
z	%s : %s
)__dict__
isinstancelistdict)r   tkitemksr    r    r!   __str__s   s   
zSMBShare.__str__)NNNN)r,   )__name__
__module____qualname__r"   staticmethodr#   r+   r=   r   r   r   r   r%   rR   r[   r    r    r    r!   r   
   s    


"*r   N)#aiosmb.commons.interfaces.directoryr   aiosmb.wintypes.access_maskaiosmb.protocol.smb2.commands-aiosmb.wintypes.fscc.structures.fileinfoclassr   winacl.dtyp.security_descriptorr   typingr   r   r   r	   r
   r   r   r   r    r    r    r!   <module>   s    $