o
    Žõ±jà7  ã                   @   s\  d dl Z d dlZd dlZd dlmZ d dlmZ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
ƒZG dd„ dƒZG dd„ dƒ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G dd„ dƒZG dd„ dƒZG dd„ dƒZG dd „ d ejƒZG d!d"„ d"ƒZG d#d$„ d$ej
ƒZG d%d&„ d&ƒZG d'd(„ d(ƒZdS ))é    N)Ústat)ÚNegotiateSecurityModeÚNegotiateCapabilities)ÚNegotiateDialectsc                   @   sH   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S )ÚCtlCodei” i@ i  iÀ iò@ id@ ix  i»A iò€ iÔ iü i¤ 	 i° i‚	 i N)Ú__name__Ú
__module__Ú__qualname__ÚFSCTL_DFS_GET_REFERRALSÚFSCTL_PIPE_PEEKÚFSCTL_PIPE_WAITÚFSCTL_PIPE_TRANSCEIVEÚFSCTL_SRV_COPYCHUNKÚFSCTL_SRV_ENUMERATE_SNAPSHOTSÚFSCTL_SRV_REQUEST_RESUME_KEYÚFSCTL_SRV_READ_HASHÚFSCTL_SRV_COPYCHUNK_WRITEÚFSCTL_LMR_REQUEST_RESILIENCYÚ"FSCTL_QUERY_NETWORK_INTERFACE_INFOÚFSCTL_SET_REPARSE_POINTÚFSCTL_DFS_GET_REFERRALS_EXÚFSCTL_FILE_LEVEL_TRIMÚFSCTL_VALIDATE_NEGOTIATE_INFO© r   r   ú–/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/aiosmb/protocol/smb2/commands/ioctl.pyr   	   s     r   c                   @   ó   e Zd ZdZdZdS )ÚIOCTLREQFlagsr   é   N)r   r   r	   ÚIS_IOCTLÚIS_FSCTLr   r   r   r   r      ó    r   c                   @   ó<   e Zd Zdd„ Zdd„ Zedd„ ƒZedd„ ƒZd	d
„ ZdS )Ú	IOCTL_REQc                 C   sT   d| _ d| _d | _d | _d| _d| _d| _d| _d| _d| _	t
j| _d| _d | _d S )Né9   r   iÿÿ  )ÚStructureSizeÚReservedr   ÚFileIdÚInputOffsetÚ
InputCountÚMaxInputResponseÚOutputOffsetÚOutputCountÚMaxOutputResponser   r   ÚFlagsÚ	Reserved2ÚBuffer©Úselfr   r   r   Ú__init__    s   
zIOCTL_REQ.__init__c                 C   sZ  | j t jt jt jt jfvrd| _t| jƒ| _| j	j
dddd�}|| 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
dddd�7 }|| jj
dddd�7 }|| jj
dddd�7 }| j t jt jt jt jfvr«|| j7 }|S )Néx   é   ÚlittleF©Ú	byteorderÚsignedé   é   )r   r   r   r   r   r'   Úlenr/   r(   r$   Úto_bytesr%   Úvaluer&   r)   r*   r+   r,   r-   r.   ©r1   Útr   r   r   r<   0   s$   
zIOCTL_REQ.to_bytesc                 C   ó   t  t | ¡¡S ©N)r"   Úfrom_bufferÚioÚBytesIO©Úbbuffr   r   r   Ú
from_bytesG   ó   zIOCTL_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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j|  d¡dd�|_tj|  d¡dd�|_|j	dkr¾|jtjkr¯|  |j¡ |  |j	¡}t |¡|_|S |  |j¡ |  |j	¡}||_|S )Nr4   r5   ©r7   r#   r9   r:   r   )r"   ÚintrG   Úreadr$   r%   r   r&   r'   r(   r)   r*   r+   r,   r-   r.   r   ÚseekÚVALIDATE_NEGOTIATE_INFO_REQr/   )ÚbuffÚmsgÚdatar   r   r   rB   K   s0   
ûzIOCTL_REQ.from_bufferc                 C   ó   d}|S ©Nz==== SMB2 IOCTL REQ ====
r   r>   r   r   r   Ú__repr__i   ó   zIOCTL_REQ.__repr__N©	r   r   r	   r2   r<   ÚstaticmethodrG   rB   rS   r   r   r   r   r"      s    

r"   c                   @   ó   e Zd Zdd„ Zdd„ ZdS )ÚSRV_COPYCHUNKc                 C   s   d | _ d | _d | _d| _d S ©Nr   )ÚSourceOffsetÚTargetOffsetÚLengthr%   r0   r   r   r   r2   o   ó   
zSRV_COPYCHUNK.__init__c                 C   sX   | j jdddd�}|| jjdddd�7 }|| jjdddd�7 }|| jjdddd�7 }d S )Né   r5   Fr6   r9   )rZ   r<   r[   r\   r%   r>   r   r   r   r<   u   s   zSRV_COPYCHUNK.to_bytesN©r   r   r	   r2   r<   r   r   r   r   rX   n   ó    rX   c                   @   rW   )ÚSRV_COPYCHUNK_COPYc                 C   s   d | _ d | _d| _g | _d S rY   )Ú	SourceKeyÚ
ChunkCountr%   ÚChunksr0   r   r   r   r2   |   r]   zSRV_COPYCHUNK_COPY.__init__c                 C   sZ   t | jƒ| _| j}|| jjdddd�7 }|| jjdddd�7 }| jD ]}|| ¡ 7 }q"d S )Nr9   r5   Fr6   )r;   rd   rc   rb   r<   r%   )r1   r?   Úchunkr   r   r   r<   ‚   s   
ÿzSRV_COPYCHUNK_COPY.to_bytesNr_   r   r   r   r   ra   {   r`   ra   c                   @   s   e Zd ZdZdS )ÚSRV_HASH_TYPEr   N)r   r   r	   ÚSRV_HASH_TYPE_PEER_DISTr   r   r   r   rf   ‹   s    rf   c                   @   r   )ÚHashVersionr   r4   N)r   r   r	   ÚSRV_HASH_VER_1ÚSRV_HASH_VER_2r   r   r   r   rh   Ž   r    rh   c                   @   r   )ÚHashRetrievalTyper   r4   N)r   r   r	   ÚSRV_HASH_RETRIEVE_HASH_BASEDÚSRV_HASH_RETRIEVE_FILE_BASEDr   r   r   r   rk   ’   r    rk   c                   @   ó   e Zd Zdd„ ZdS )ÚSRV_READ_HASHc                 C   s"   d | _ d | _d| _d | _d | _d S rY   )ÚHashTyperh   rk   r\   ÚOffsetr0   r   r   r   r2   š   ó
   
zSRV_READ_HASH.__init__N©r   r   r	   r2   r   r   r   r   ro   ™   ó    ro   c                   @   rn   )ÚNETWORK_RESILIENCY_REQUESTc                 C   s   d | _ d| _d S rY   )ÚTimeoutr%   r0   r   r   r   r2   ¤   ó   
z#NETWORK_RESILIENCY_REQUEST.__init__Nrs   r   r   r   r   ru   £   rt   ru   c                   @   ó,   e Zd Zdd„ Zedd„ ƒZedd„ ƒZdS )rM   c                 C   s"   d | _ d | _d | _d | _g | _d S rA   )ÚCapabilitiesÚGuidÚSecurityModeÚDialectCountÚDialectsr0   r   r   r   r2   ª   rr   z$VALIDATE_NEGOTIATE_INFO_REQ.__init__c                 C   r@   rA   )rM   rB   rC   rD   ©rP   r   r   r   rG   ±   rH   z&VALIDATE_NEGOTIATE_INFO_REQ.from_bytesc                 C   s�   t ƒ }ttj|  d¡dd�ƒ|_|  d¡|_ttj|  d¡dd�ƒ|_tj|  d¡dd�|_	t
|j	ƒD ]}|j ttj|  d¡dd�ƒ¡ q3|S ©Nr9   r5   rI   r:   r4   )rM   r   rJ   rG   rK   ry   rz   r   r{   r|   Úranger}   Úappendr   )rN   ÚresÚ_r   r   r   rB   µ   s   "z'VALIDATE_NEGOTIATE_INFO_REQ.from_bufferN©r   r   r	   r2   rV   rG   rB   r   r   r   r   rM   ©   s    
rM   c                   @   s4   e Zd Zdd„ Zdd„ Zedd„ ƒZedd„ ƒZd	S )
ÚVALIDATE_NEGOTIATE_INFO_REPLYc                 C   s   d | _ d | _d | _d | _d S rA   )ry   rz   r{   ÚDialectr0   r   r   r   r2   Ã   r]   z&VALIDATE_NEGOTIATE_INFO_REPLY.__init__c                 C   sT   | j jdddd�}|| j ¡ 7 }|| jjjdddd�7 }|| jjjdddd�7 }|S )Nr9   r5   Fr6   r4   )ry   r<   rz   r{   r=   r†   r>   r   r   r   r<   É   s
   z&VALIDATE_NEGOTIATE_INFO_REPLY.to_bytesc                 C   r@   rA   )r…   rB   rC   rD   r~   r   r   r   rG   Ñ   rH   z(VALIDATE_NEGOTIATE_INFO_REPLY.from_bytesc                 C   sd   t ƒ }ttj|  d¡dd�ƒ|_|  d¡|_ttj|  d¡dd�ƒ|_t	tj|  d¡dd�ƒ|_
|S r   )r…   r   rJ   rG   rK   ry   rz   r   r{   r   r†   )rN   r‚   r   r   r   rB   Õ   s   z)VALIDATE_NEGOTIATE_INFO_REPLY.from_bufferN)r   r   r	   r2   r<   rV   rG   rB   r   r   r   r   r…   Â   s    
r…   c                   @   r!   )ÚIOCTL_REPLYc                 C   sF   d| _ d| _d | _d | _d| _d| _d| _d| _d| _d| _	d | _
d S )Né1   r   )r$   r%   r   r&   r'   r(   r*   r+   r-   r.   r/   r0   r   r   r   r2   á   s   
zIOCTL_REPLY.__init__c                 C   sè   | j jdddd�}|| 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dddd�7 }|| j7 }|S )Nr4   r5   Fr6   r9   r:   )r$   r<   r%   r   r=   r&   r'   r(   r*   r+   r-   r.   r/   r>   r   r   r   r<   ï   s   
zIOCTL_REPLY.to_bytesc                 C   r@   rA   )r‡   rB   rC   rD   rE   r   r   r   rG   þ   rH   zIOCTL_REPLY.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�ƒ|_|  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�|_|jtjkr}|S |jtjkr…|S |jtjkr¶|  |j
¡ |  |j¡}g |_	 t |¡}|j |¡ |jdkr®	 |S ||jd … }q›|jtjkrÐ|  |j
¡ |  |j¡}t |¡|_|S tƒ ‚)	Nr4   r5   rI   rˆ   r9   r:   Tr   )r‡   rJ   rG   rK   r$   r%   r   r&   r'   r(   r*   r+   r-   r.   r   r   r   rL   r/   ÚNETWORK_INTERFACE_INFOr�   ÚNextr   ÚSRV_SNAPSHOT_ARRAYÚNotImplementedError)rN   rO   rP   Úinfor   r   r   rB     sD   

ÿûzIOCTL_REPLY.from_bufferc                 C   rQ   rR   r   r>   r   r   r   rS   (  rT   zIOCTL_REPLY.__repr__NrU   r   r   r   r   r‡   à   s    

%r‡   c                   @   r   )ÚNETWORK_INTERFACE_CAPr   r4   N)r   r   r	   ÚRSS_CAPABLEÚRDMA_CAPABLEr   r   r   r   rŽ   ,  r    rŽ   c                   @   rx   )r‰   c                 C   s(   d | _ d | _d | _d | _d | _d | _d S rA   )rŠ   ÚIfIndexÚ
Capabilityr%   Ú	LinkSpeedÚSockAddr_Storager0   r   r   r   r2   2  s   
zNETWORK_INTERFACE_INFO.__init__c                 C   r@   rA   )r‰   rB   rC   rD   rE   r   r   r   rG   ;  rH   z!NETWORK_INTERFACE_INFO.from_bytesc                 C   sŽ   t ƒ }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
 |  d¡¡|_|S )Nr9   r5   rI   r^   é€   )r‰   rJ   rG   rK   rŠ   r‘   rŽ   r’   r%   r“   ÚSOCKADDR_STORAGEr”   ©rN   rO   r   r   r   rB   ?  s   z"NETWORK_INTERFACE_INFO.from_bufferNr„   r   r   r   r   r‰   1  s    	
r‰   c                   @   s   e Zd ZdZdZdZdS )ÚSOCKADDR_STORAGE_FAMILYr   r4   é   N)r   r   r	   ÚUNKONWNÚInterNetworkÚInterNetworkV6r   r   r   r   r˜   J  s    r˜   c                   @   rx   )r–   c                 C   s   d | _ d | _d S rA   )ÚFamilyÚAddrr0   r   r   r   r2   Q  rw   zSOCKADDR_STORAGE.__init__c                 C   r@   rA   )r–   rB   rC   rD   rE   r   r   r   rG   U  rH   zSOCKADDR_STORAGE.from_bytesc                 C   s`   t ƒ }ttj|  d¡dd�ƒ|_|jtjkrt |  d¡¡|_	|jtj
kr.t |  d¡¡|_	|S )Nr9   r5   rI   r:   )r–   r˜   rJ   rG   rK   r�   r›   Ú	ipaddressÚ
ip_addressrž   rœ   r—   r   r   r   rB   Y  s   zSOCKADDR_STORAGE.from_bufferNr„   r   r   r   r   r–   P  s    
r–   c                   @   rx   )r‹   c                 C   s   d | _ d | _d | _g | _d S rA   )ÚNumberOfSnapShotsÚNumberOfSnapShotsReturnedÚSnapShotArraySizeÚ	SnapShotsr0   r   r   r   r2   e  r]   zSRV_SNAPSHOT_ARRAY.__init__c                 C   r@   rA   )r‹   rB   rC   rD   rE   r   r   r   rG   k  rH   zSRV_SNAPSHOT_ARRAY.from_bytesc                 C   sˆ   t ƒ }tj|  d¡dd�|_tj|  d¡dd�|_tj|  d¡dd�|_|jdkrBt|jƒD ]}|j 	|  d¡ 
d¡¡ |  d¡ q.|S )Nr9   r5   rI   r   é0   z	utf-16-ler   )r‹   rJ   rG   rK   r¡   r¢   r£   r€   r¤   r�   Údecode)rN   rO   rƒ   r   r   r   rB   o  s   
zSRV_SNAPSHOT_ARRAY.from_bufferNr„   r   r   r   r   r‹   d  s    
r‹   )rC   ÚenumrŸ   Úosr   Ú'aiosmb.protocol.smb2.commands.negotiater   r   Úaiosmb.protocol.commonr   ÚEnumr   ÚIntFlagr   r"   rX   ra   rf   rh   rk   ro   ru   rM   r…   r‡   rŽ   r‰   r˜   r–   r‹   r   r   r   r   Ú<module>   s0    O
L