o
    Žõ±j}E  ã                   @   s´   d dl Z d dlZd dlmZ d dlmZ G dd„ dejƒZG dd„ dejƒZG dd	„ d	ej	ƒZ
G d
d„ dejƒZG dd„ dej	ƒZG dd„ dejƒZG dd„ dƒZG dd„ dƒZdS )é    N)ÚFileAttributes)ÚFileAccessMaskc                   @   s    e Zd ZdZdZdZdZdZdS )ÚOplockLevelr   é   é   é	   éÿ   N)Ú__name__Ú
__module__Ú__qualname__ÚSMB2_OPLOCK_LEVEL_NONEÚSMB2_OPLOCK_LEVEL_IIÚSMB2_OPLOCK_LEVEL_EXCLUSIVEÚSMB2_OPLOCK_LEVEL_BATCHÚSMB2_OPLOCK_LEVEL_LEASE© r   r   ú—/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/aiosmb/protocol/smb2/commands/create.pyr      s    r   c                   @   ó   e Zd ZdZdZdZdZdS )ÚImpersonationLevelr   r   é   é   N)r	   r
   r   Ú	AnonymousÚIdentificationÚImpersonationÚDelegater   r   r   r   r      ó
    r   c                   @   s   e Zd ZdZdZdZdS )ÚShareAccessr   r   é   N)r	   r
   r   ÚFILE_SHARE_READÚFILE_SHARE_WRITEÚFILE_SHARE_DELETEr   r   r   r   r      s    r   c                   @   s$   e Zd ZdZdZdZdZdZdZdS )ÚCreateDispositionr   r   r   r   r   é   N)	r	   r
   r   ÚFILE_SUPERSEDEÚ	FILE_OPENÚFILE_CREATEÚFILE_OPEN_IFÚFILE_OVERWRITEÚFILE_OVERWRITE_IFr   r   r   r   r!      s    r!   c                   @   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ZdZdZdZdZdZdZdZdS )ÚCreateOptionsr   r   r   r   é   é    é@   é   i   i   i   i    i @  i €  i   i   i   i   i    i  @ i  € N)r	   r
   r   ÚFILE_DIRECTORY_FILEÚFILE_WRITE_THROUGHÚFILE_SEQUENTIAL_ONLYÚFILE_NO_INTERMEDIATE_BUFFERINGÚFILE_SYNCHRONOUS_IO_ALERTÚFILE_SYNCHRONOUS_IO_NONALERTÚFILE_NON_DIRECTORY_FILEÚFILE_COMPLETE_IF_OPLOCKEDÚFILE_NO_EA_KNOWLEDGEÚFILE_RANDOM_ACCESSÚFILE_DELETE_ON_CLOSEÚFILE_OPEN_BY_FILE_IDÚFILE_OPEN_FOR_BACKUP_INTENTÚFILE_NO_COMPRESSIONÚFILE_OPEN_REMOTE_INSTANCEÚFILE_OPEN_REQUIRING_OPLOCKÚFILE_DISALLOW_EXCLUSIVEÚFILE_RESERVE_OPFILTERÚFILE_OPEN_REPARSE_POINTÚFILE_OPEN_NO_RECALLÚFILE_OPEN_FOR_FREE_SPACE_QUERYr   r   r   r   r)   !   s,    r)   c                   @   r   )ÚCreateActionr   r   r   r   N)r	   r
   r   ÚFILE_SUPERSEDEDÚFILE_OPENEDÚFILE_CREATEDÚFILE_OVERWRITTENr   r   r   r   rC   9   r   rC   c                   @   ó<   e Zd Zdd„ Zdd„ Zedd„ ƒZedd„ ƒZd	d
„ ZdS )Ú
CREATE_REQc                 C   sp   d| _ d| _d | _d | _d| _d| _d | _d | _d | _d | _	d | _
d | _d | _d| _d| _d | _d | _d | _d S )Né9   r   )ÚStructureSizeÚSecurityFlagsÚRequestedOplockLevelr   ÚSmbCreateFlagsÚReservedÚDesiredAccessr   r   r!   r)   Ú
NameOffsetÚ
NameLengthÚCreateContextsOffsetÚCreateContextsLengthÚBufferÚNameÚCreateContext©Úselfr   r   r   Ú__init__A   s$   
zCREATE_REQ.__init__c                 C   s  | j d ur| j  d¡}|| _d| _t|ƒ| _| jrW| j ¡ }t|ƒ| _| j| j }|d }|dkrMdd|  }|  j|7  _|  j|7  _|t|ƒ | _	n
|  j|7  _|| _	| j
jdddd	�}|| jjd
ddd	�7 }|| jjjd
ddd	�7 }|| jjjdddd	�7 }|| jjdddd	�7 }|| jjdddd	�7 }|| jjdddd	�7 }|| jjdddd	�7 }|| jjdddd	�7 }|| jjjdddd	�7 }|| jjdddd	�7 }|| jjdddd	�7 }|| jjdddd	�7 }|| j	jdddd	�7 }|| jjdddd	�7 }|| j7 }|d7 }|S )Nú	utf-16-leéx   r   r   ó    r   ÚlittleF©Ú	byteorderÚsignedr   r   )rV   ÚencoderU   rQ   ÚlenrR   rW   Úto_bytesrT   rS   rK   rL   rM   Úvaluer   rN   rO   rP   r   r   r!   r)   )rY   Út_nameÚt_ctxÚposÚt_mÚpadÚtr   r   r   rd   X   sF   




zCREATE_REQ.to_bytesc                 C   ó   t  t | ¡¡S ©N)rI   Úfrom_bufferÚioÚBytesIO©Úbbuffr   r   r   Ú
from_bytes‚   ó   zCREATE_REQ.from_bytesc                 C   sÜ  t ƒ }tj|  d¡dd�|_|jdksJ ‚tj|  d¡dd�|_ttj|  d¡dd�ƒ|_ttj|  d¡dd�ƒ|_tj|  d¡dd�|_	tj|  d¡dd�|_
ttj|  d¡dd�ƒ|_ttj|  d¡dd�ƒ|_ttj|  d¡dd�ƒ|_ttj|  d¡dd�ƒ|_ttj|  d¡dd�ƒ|_tj|  d¡dd�|_tj|  d¡dd�|_tj|  d¡dd�|_tj|  d¡dd�|_|jdkrÖ|  |jtj¡ |  |j¡}| d	¡|_|jdkrì|  |jtj¡ |  |j¡}||_|S )
Nr   r^   ©r`   rJ   r   r   r   r   r[   )rI   Úintrs   ÚreadrK   rL   r   rM   r   rN   rO   r   rP   r   r   r!   r)   rQ   rR   rS   rT   Úseekro   ÚSEEK_SETÚdecoderV   rW   ©ÚbuffÚmsgrk   r   r   r   rn   †   s4   

zCREATE_REQ.from_bufferc                 C   s”   d}|d| j  7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d	| j 7 }|d
| j 7 }|d| j	 7 }|S )Nz==== SMB2 CREATE REQ ====
úStructureSize: %s
zRequestedOplockLevel: %s
zImpersonationLevel: %s
zDesiredAccess: %s
úFileAttributes: %s
zShareAccess: %s
zCreateDisposition: %s
zCreateOptions: %s
z
Name: %s
zCreateContext: %s
)
rK   rM   r   rP   r   r   r!   r)   rV   rW   ©rY   rk   r   r   r   Ú__repr__¦   s   zCREATE_REQ.__repr__N©	r	   r
   r   rZ   rd   Ústaticmethodrs   rn   r�   r   r   r   r   rI   @   s    *

rI   c                   @   rH   )ÚCREATE_REPLYc                 C   sj   d| _ d | _d| _d | _d| _d| _d | _d | _d | _d | _	d | _
d| _d | _d | _d | _d| _d | _d S )NéY   r   ó    )rK   r   ÚFlagsrC   ÚCreationTimeÚLastAccessTimeÚLastWriteTimeÚ
ChangeTimeÚAllocationSizeÚ	EndofFiler   Ú	Reserved2ÚFileIdrS   rT   rU   rW   rX   r   r   r   rZ   ·   s"   
zCREATE_REPLY.__init__c                 C   sl  | j jdddd�}|| jjjdddd�7 }|| jjjdddd�7 }|| jjjdddd�7 }|| jjdddd�7 }|| jjdddd�7 }|| jjdddd�7 }|| j	jdddd�7 }|| j
jdddd�7 }|| jjdddd�7 }|| jjjdddd�7 }|| jjdddd�7 }|| jjdddd�7 }|| jjdddd�7 }|| jjdddd�7 }| jd	ks±| jd ur´tƒ ‚|S )
Nr   r^   Fr_   r   r   r   r*   r   )rK   rd   r   re   r‡   rC   rˆ   r‰   rŠ   r‹   rŒ   r�   r   rŽ   r�   rS   rT   rW   ÚNotImplementedErrorr€   r   r   r   rd   Í   s$   zCREATE_REPLY.to_bytesc                 C   rl   rm   )r„   rn   ro   rp   rq   r   r   r   rs   ä   rt   zCREATE_REPLY.from_bytesc                 C   sž  t ƒ }tj|  d¡dd�|_|jdksJ ‚ttj|  d¡dd�ƒ|_ttj|  d¡dd�ƒ|_ttj|  d¡dd�ƒ|_tj|  d¡dd�|_	tj|  d¡dd�|_
tj|  d¡dd�|_tj|  d¡dd�|_tj|  d¡dd�|_tj|  d¡dd�|_ttj|  d¡dd�ƒ|_tj|  d¡dd�|_tj|  d¡dd�|_tj|  d¡dd�|_tj|  d¡dd�|_|jd	krÍ|  |jtj¡ |  |j¡}||_|S )
Nr   r^   ru   r…   r   r   r   r*   r   )r„   rv   rs   rw   rK   r   r)   r‡   rC   rˆ   r‰   rŠ   r‹   rŒ   r�   r   rŽ   r�   rS   rT   rx   ro   ry   rW   r{   r   r   r   rn   è   s,   
zCREATE_REPLY.from_bufferc                 C   sÌ   d}|d| j  7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d	| j 7 }|d
| j 7 }|d| j	 7 }|d| j
 7 }|d| j 7 }|d| j 7 }|d| j 7 }|S )Nz==== SMB2 CREATE REPLY ====
r~   zOplockLevel: %s
zFlags: %s
zCreationTime: %s
zLastAccessTime: %s
zLastWriteTime: %s
zChangeTime: %s
zAllocationSize: %s
zEndofFile: %s
r   zReserved2: %s
zFileId: %s
zCreateContextsOffset: %s
zCreateContextsLength: %s
)rK   r   r‡   rˆ   r‰   rŠ   r‹   rŒ   r�   r   rŽ   r�   rS   rT   r€   r   r   r   r�     s    zCREATE_REPLY.__repr__Nr‚   r   r   r   r   r„   ¶   s    

r„   )ro   ÚenumÚ#aiosmb.wintypes.fscc.FileAttributesr   Úaiosmb.wintypes.access_maskr   ÚEnumr   r   ÚIntFlagr   r!   r)   rC   rI   r„   r   r   r   r   Ú<module>   s    v