o
    j7                     @   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  iA 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 )N9   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 )Nx      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 )N1   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