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 )N9   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-lex   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 )NY   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rt |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