o
    àý°j“± ã                   @   sê  d dl mZ d dl mZ d dlZd dlZd dlmZ d dlZd dlm	Z	m
Z
mZmZ d dlmZmZ d dlmZ d dlmZ d d	lmZmZmZmZ d d
lmZ d dlmZmZmZm Z m!Z!m"Z" d dl#m$Z$ d dl%Z%d dl&Z&d Z'dZ(dZ)d Z*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:dZ;dZ<dZ=dZ>dZ?dZ@dZAdZBdZCdZDdZEd ZFdZGd!ZHd"ZId#ZJd$ZKd%ZLd&ZMd'ZNd(ZOdZPdZQd ZRdZSdZTd ZUdZVdZWd)ZXdZYd ZZdZ[dZ\dZ]dZ^dZ_d Z`d*Zad+Zbd,Zcd ZddZedZfdZgd-Zhd ZidZjdZkdZldZmdZndZodZpdZqd Zrd!Zsd"ZtdZudZvdZwdZxdZyd.Zzd/Z{d/Z|d0Z}d1Z~d2Zd.Z€d3Z�d4Z‚d5ZƒdZ„dZ…d2Z†d.Z‡d/Zˆd0Z‰dZŠdZ‹dZŒdZ�d6ZŽd7Z�d8Z�dZ‘d9Z’d:Z“d;Z”d<Z•d=Z–d>Z—d?Z˜dZ™d@ZšdAZ›dBZœdCZ�dDZždEZŸdFZ dGZ¡dHZ¢dIZ£dJZ¤dKZ¥dLZ¦dMZ§dNZ¨dZ©dOZªdPZ«dQZ¬dRZ­dSZ®dTZ¯dUZ°dVZ±dWZ²dXZ³dYZ´dZZµ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Ëd2ZÌd.ZÍd/ZÎd0ZÏd1ZÐ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ádaZâd(ZãdZäd ZådZædZçdZèd ZédZêdZëdZìdZíd6Zîdbdc„ ZïG ddde„ deeðƒZñG dfdg„ dgeðƒZòdhdi„ Zódjdk„ ZôG dldm„ dmeƒZõG dndo„ doƒZöG dpdq„ dqeƒZ÷G drds„ dsƒZøG dtdu„ duƒZùG dvdw„ dwƒZúG dxdy„ dyƒZûG dzd{„ d{ƒZüG d|d}„ d}eƒZýG d~d„ deƒZþG d€d�„ d�eƒZÿG d‚dƒ„ dƒeƒ�Z G d„d…„ d…eƒ�ZG d†d‡„ d‡eƒ�ZG dˆd‰„ d‰eÿƒ�ZG dŠd‹„ d‹eƒ�ZG dŒd�„ d�eƒ�ZG dŽd�„ d�eƒ�ZG d�d‘„ d‘eƒ�ZG d’d“„ d“eƒ�ZG d”d•„ d•eÿƒ�Z	G d–d—„ d—eÿƒ�Z
G d˜d™„ d™eÿƒ�ZG dšd›„ d›eÿƒ�ZG dœd�„ d�eÿƒ�ZG dždŸ„ dŸeÿƒ�ZG d d¡„ d¡eÿƒ�ZG d¢d£„ d£eƒ�ZG d¤d¥„ d¥eƒ�ZG d¦d§„ d§eƒ�ZG d¨d©„ d©eƒ�ZG dªd«„ d«eƒ�ZG d¬d­„ d­eƒ�ZG d®d¯„ d¯eÿƒ�ZG d°d±„ d±eƒ�ZG d²d³„ d³eƒ�ZG d´dµ„ dµeƒ�ZG d¶d·„ d·eÿƒ�ZG d¸d¹„ d¹eƒ�ZG dºd»„ d»eÿƒ�ZG d¼d½„ d½eƒ�ZG d¾d¿„ d¿eƒ�ZG dÀdÁ„ dÁeƒ�ZG dÂdÃ„ dÃeƒ�Z G dÄdÅ„ dÅeƒ�Z!G dÆdÇ„ dÇeƒ�Z"G dÈdÉ„ dÉeƒ�Z#G dÊdË„ dËeÿƒ�Z$G dÌdÍ„ dÍeƒ�Z%G dÎdÏ„ dÏeƒ�Z&G dÐdÑ„ dÑeƒ�Z'G dÒdÓ„ dÓeƒ�Z(G dÔdÕ„ dÕeƒ�Z)G dÖd×„ d×eƒ�Z*G dØdÙ„ dÙeƒ�Z+G dÚdÛ„ dÛeƒ�Z,G dÜdÝ„ dÝeƒ�Z-G dÞdß„ dßeƒ�Z.G dàdá„ dáeƒ�Z/G dâdã„ dãeƒ�Z0G dädå„ dåeƒ�Z1G dædç„ dçeƒ�Z2G dèdé„ déeƒ�Z3G dêdë„ dë�eƒ�Z4G dìdí„ dí�eƒ�Z5G dîdï„ dïeÿƒ�Z6G dðdñ„ dñeÿƒ�Z7G dòdó„ dó�eƒ�Z8G dôdõ„ dõ�eƒ�Z9G död÷„ d÷eÿƒ�Z:G dødù„ dùeÿƒ�Z;G dúdû„ dû�e ƒ�Z<G düdý„ dý�e ƒ�Z=G dþdÿ„ dÿ�eƒ�Z>G �d �d„ �d�eƒ�Z?G �d�d„ �d�eƒ�Z@G �d�d„ �deÿƒ�ZAG �d�d„ �deÿƒ�ZBG �d�d	„ �d	�eƒ�ZCG �d
�d„ �d�eƒ�ZDG �d�d„ �d�eƒ�ZEG �d�d„ �deÿƒ�ZFG �d�d„ �d�eƒ�ZGG �d�d„ �d�eFƒ�ZHG �d�d„ �d�eƒ�ZIG �d�d„ �d�e ƒ�ZJG �d�d„ �d�e ƒ�ZKG �d�d„ �deƒ�ZLG �d�d„ �d�eƒ�ZMG �d�d„ �deƒ�ZNG �d �d!„ �d!eƒ�ZOG �d"�d#„ �d#�eƒ�ZPG �d$�d%„ �d%�eƒ�ZQG �d&�d'„ �d'�e ƒ�ZRG �d(�d)„ �d)�e ƒ�ZSG �d*�d+„ �d+eƒ�ZTG �d,�d-„ �d-eƒ�ZUG �d.�d/„ �d/�e ƒ�ZVG �d0�d1„ �d1�e ƒ�ZWG �d2�d3„ �d3�e ƒ�ZXG �d4�d5„ �d5eƒ�ZYG �d6�d7„ �d7eƒ�ZZG �d8�d9„ �d9�e ƒ�Z[G �d:�d;„ �d;eƒ�Z\G �d<�d=„ �d=�e ƒ�Z]G �d>�d?„ �d?�e ƒ�Z^G �d@�dA„ �dAeƒ�Z_G �dB�dC„ �dCeƒ�Z`G �dD�dE„ �dEeÿƒ�ZaG �dF�dG„ �dGeƒ�ZbG �dH�dI„ �dI�e ƒ�ZcG �dJ�dK„ �dK�e ƒ�ZdG �dL�dM„ �dMeÿƒ�ZeG �dN�dO„ �dOeƒ�ZfG �dP�dQ„ �dQeƒ�ZgG �dR�dS„ �dS�eƒ�ZhG �dT�dU„ �dU�eƒ�ZiG �dV�dW„ �dW�eƒ�ZjG �dX�dY„ �dYeƒ�ZkG �dZ�d[„ �d[eƒ�ZlG �d\�d]„ �d]eƒ�ZmG �d^�d_„ �d_eƒ�ZnG �d`�da„ �daeƒ�ZoG �db�dc„ �dc�eƒ�ZpG �dd�de„ �de�e ƒ�ZqG �df�dg„ �dg�e ƒ�ZrG �dh�di„ �dieÿƒ�ZsG �dj�dk„ �dkeÿƒ�ZtG �dl�dm„ �dmeƒ�ZuG �dn�do„ �doeÿƒ�ZvG �dp�dq„ �dqeÿƒ�ZwG �dr�ds„ �ds�e ƒ�ZxG �dt�du„ �dueÿƒ�ZyG �dv�dw„ �dw�e ƒ�ZzG �dx�dy„ �dyeÿƒ�Z{G �dz�d{„ �d{�e ƒ�Z|G �d|�d}„ �d}eƒ�Z}G �d~�d„ �deƒ�Z~G �d€�d�„ �d�eƒ�ZG �d‚�dƒ„ �dƒeƒ�Z€G �d„�d…„ �d…�e�ƒ�Z‚i d�d†“d�d‡“d�dˆ“d�d‰“d6�dŠ“d7�d‹“d8�dŒ“d�d�“d9�dŽ“d:�d�“d;�d�“d<�d‘“d=�d’“d?�d““d�d”“d@�d•“dA�d–“�d—�d˜�d™�dšœ¥�Zƒi d�d›“d�dœ“d�dŠ“d6�d�“d7�dž“d8�dŸ“�d �d¡“�d¢�d¡“�d£�d¤“�d¥�d¦“d�d§“�d¨�d©“�dª�d«“�d¬�d­“�d®�d¯“�d°�d±“�d²�d³“�d´�dµ�d¶�d·�d¸�d¹�d¹�dº�d»�d¼œ	¥�Z„i dB�d½“dC�d¾“dD�d¿“dE�dÀ“dF�dÁ“dG�dÂ“dH�dÃ“dI�dÄ“dJ�dÅ“dK�dÆ“dL�dÇ“dM�dÈ“dN�dÉ“d�dÊ“dO�dË“dP�dÌ“dQ�dÍ“dR�dÎi¥�Z…dS (Ï  é    )Údivision)Úprint_functionN)Úa2b_hex)ÚpackÚunpackÚ	pack_intoÚerror)ÚBigEndianStructureÚc_uint32)Úcontextmanager)ÚnoValue)ÚnmbÚntlmÚ	nt_errorsÚLOG)Ú	Structure)ÚSPNEGO_NegTokenInitÚ	TypesMechÚSPNEGO_NegTokenRespÚASN1_OIDÚ
asn1encodeÚASN1_AID)ÚKRB5_AP_REQé   z
NT LM 0.12ì        é   é   é    é   é€   é   é   é   zA:zLPT1:ÚIPCÚCOMMz?????é   é@   é   é   é   é    é @  é   i   i   i   é   @é0   l   m    l   [   iÐ  i÷  i  é  i  i  i  i  i	  iï  é   é   é   é	   é
   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é!   é"   é#   é$   é%   é&   é'   é(   é)   é*   é+   é,   é €  i  i   i   i   i   i    c                 C   sX   | dkrdt  |d¡fS | dkrdt |d¡fS | dkr$dt |d¡fS | dkr*d	S d
S )Nr   zOS errorúUnknown errorr   zServer errorr   zHardware erroréÿ   )zBad commandz#Bad command. Please file bug report)rV   rV   )ÚERRDOSÚgetÚERRSRVÚERRHRD)ÚerrclassÚerrcode© r^   ú/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/impacket/smb.pyÚstrerrorE  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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-Z/d.Z0d/Z1d0Z2d1Z3d2Z4d3Z5d4Z6d5Z7d6Z8d7Z9d8Z:d9Z;d:Z<d;Z=d<Z>d=Z?d>Z@d?ZAd@ZBdAZCdBZDdCZEdZFdZGdZHdZIdZJdZKdZLdDZMdZNdEZOdZPdFZQdZRdGZSdHZTdIZUdJZVdKZWdLZXdMZYdZZdNZ[dOZ\dPZ]dQZ^dRZ_dSZ`dTZadUZbdZcdVZddWZedXZfdYZgdVZhdZZid[Zjd\Zkd]Zld^Zmd_Znd`ZodaZpdbZqdcZrddZsdeZti dWdf“dXdg“dYdh“dVdi“dZdj“d[dk“d\dl“d]dm“d^dn“d_do“d`dp“dadq“ddr“dds“ddt“dbdu“dcdv“dddwi¥Zui edx“edy“edz“ed{“ed|“e	d}“e
d~“ed“ed€“ed�“d‚dƒ“ed„“ed…“ed†“ed‡“edˆ“ed‰“i edŠ“ed‹“edŒ“ed�“edŽ“ed�“ed�“e#d‘“e$d’“e%d““e&d”“e'd•“e/d–“e+d—“etd˜“ed™“e dš“¥Zvi dd›“ddœ“dd�“ddž“ddŸ“dd “dd¡“dDd¢“dd£“d¤d¥“dEd¦“dd§“dFd¨“dd©“dGdª“dHd«“dIdª“d¬d­d®d¯d°d±d²d³d´dµd¶d·dªdªd¸d¹œ¥ZwdZxddºi fexd»evfdd¼ewfdd½eufdd¾i fd¿dÀi fdÁdÂi fdÃdÄi fdÅdÆi fi	ZydÑdÇdÈ„ZzdÉdÊ„ Z{dËdÌ„ Z|dÍdÎ„ Z}dÏdÐ„ Z~dUS )ÒÚSessionErrorr   r   r   r   r"   r0   r1   r2   r%   r3   r4   r6   r7   r8   r9   r!   r:   r;   rH   r   rI   é2   r&   éC   éP   éW   én   éz   é{   é|   éž   é·   éæ   éç   éè   éé   éê   r/   i  i  i.  iK  i^  ig  i—	  éB   i  i  i  i  i  i  i	  i
  i  i  i  i¸  i¹  iº  i»  i¼  i½  i¾  i¿  iÀ  iÁ  é1   é4   éA   éD   éE   éF   éG   éQ   éR   éS   éX   éY   éZ   é[   éú   éû   éü   Nr?   r<   r=   r>   r@   rA   rB   rC   rD   rE   rF   rG   rJ   rK   rL   rO   )Ú
ERRnowritez-Attempt to write on write-protected diskette.)Ú
ERRbadunitzUnknown unit.)ÚERRnotreadyzDrive not ready.)Ú	ERRbadcmdzUnknown command.)ÚERRdatazData error (CRC).)Ú	ERRbadreqzBad request structure length.)ÚERRseekzSeek error.)ÚERRbadmediazUnknown media type.)ÚERRbadsectorzSector not found.)Ú
ERRnopaperzPrinter out of paper.)ÚERRwritezWrite fault.)ÚERRreadzRead fault.)Ú
ERRgeneralzGeneral failure.)ÚERRbadsharez(An open conflicts with an existing open.)ÚERRlockz˜A Lock request conflicted with an existing lock or specified an invalid mode, or an Unlock requested attempted to remove a lock held by another process.)ÚERRwrongdiskz$The wrong disk was found in a drive.)ÚERRFCBUnavailz)No FCBs are available to process request.)ÚERRsharebufexcz#A sharing buffer has been exceeded.)Ú
ERRbadfunczInvalid function.)Ú
ERRbadfilezFile not found.)Ú
ERRbadpathzDirectory invalid.)Ú	ERRnofidszNo file descriptors available)ÚERRnoaccesszAccess denied.)Ú	ERRbadfidzInvalid file handle.)Ú	ERRbadmcbz Memory control blocks destroyed.)ÚERRnomemz=Insufficient server memory to perform the requested function.)Ú	ERRbadmemzInvalid memory block address.)Ú	ERRbadenvzInvalid environment.r5   )ÚERRbadformatzInvalid format.)ÚERRbadaccesszInvalid open mode.)Ú
ERRbaddatazInvalid data.)ÚERRresú	reserved.)ÚERRbaddrivezInvalid drive specified.)ÚERRremcdzSA Delete Directory request attempted  to  remove  the  server's  current directory.)ÚERRdiffdevicezNot same device.)Ú
ERRnofileszMA File Search command can find no more files matching the specified criteria.)r�   zRThe sharing mode specified for an Open conflicts with existing  FIDs  on the file.)r‘   zšA Lock request conflicted with an existing lock or specified an  invalid mode,  or an Unlock requested attempted to remove a lock held by another process.)ÚERRunsupzThe operation is unsupported)ÚERRnosuchsharez#You specified an invalid share name)ÚERRfilexistszXThe file named in a Create Directory, Make  New  File  or  Link  request already exists.)ÚERRinvalidnamezInvalid name)Ú
ERRbadpipezPipe invalid.)ÚERRpipebusyz-All instances of the requested pipe are busy.)ÚERRpipeclosingzPipe close in progress.)ÚERRnotconnectedz No process on other end of pipe.)ÚERRmoredataz"There is more data to be returned.)ÚERRinvgroupz%Invalid workgroup (try the -W option))ÚERRlogonfailurezLogon failure)ÚERRdiskfullz	Disk full)r�   úGeneral failure)ÚERRunknownlevelzUnknown info level)ÚERRerrorzNon-specific error code.)ÚERRbadpwzQBad password - name/password pair in a Tree Connect or Session Setup are invalid.)Ú
ERRbadtyper£   )Ú	ERRaccessz¥The requester does not have  the  necessary  access  rights  within  the specified  context for the requested function. The context is defined by the TID or the UID.)Ú	ERRinvnidz5The tree ID (TID) specified in a command was invalid.)ÚERRinvnetnamez%Invalid network name in tree connect.)ÚERRinvdevicezsInvalid device - printer request made to non-printer connection or  non-printer request made to printer connection.)ÚERRqfullz8Print queue full (files) -- returned by open print file.)Ú
ERRqtoobigzPrint queue full -- no space.é3   )ÚERRqeofzEOF on print queue dump.)Ú
ERRinvpfidzInvalid print file FID.)Ú	ERRsmbcmdz2The server did not recognize the command received.)ÚERRsrverrorzHThe server encountered an internal error, e.g., system file unavailable.)ÚERRfilespecszZThe file handle (FID) and pathname parameters contained an invalid  combination of values.)ÚERRreservedr£   )ÚERRbadpermitsz…The access permissions specified for a file or directory are not a valid combination.  The server cannot set the requested attribute.)ÚERRsetattrmodez@The attribute mode in the Set File Attribute request is invalid.)Ú	ERRpausedzServer is paused.)Ú	ERRmsgoffzNot receiving messages.)Ú	ERRnoroomzNo room to buffer message.)ÚERRrmunszToo many remote user names.)Ú
ERRtimeoutzOperation timed out.)ÚERRnoresourcez-No resources currently available for request.)ÚERRtoomanyuidsz%Too many UIDs active on this session.)Ú	ERRbaduidz3The UID is not known as a valid ID on this session.)Ú	ERRusempxz)Temp unable to support Raw, use MPX mode.)Ú	ERRusestdz4Temp unable to support Raw, use standard read/write.)Ú
ERRcontmpxzContinue in MPX mode.)ÚERRnosupportzFunction not supported.)rx   ry   rz   r{   re   r|   r}   r~   r   r€   r�   r‚   éý   éþ   éÿÿ  ÚSUCCESSrX   rZ   r[   ÚERRXOSéá   ÚERRRMX1éâ   ÚERRRMX2éã   ÚERRRMX3rW   ÚERRCMDc                 C   sH   t  | |¡ || _|| _|rd| _|d> | | _n|| _|| _|| _d S )Nr   r!   )Ú	ExceptionÚ__init__Ú	nt_statusÚ_argsÚerror_classÚ
error_codeÚpacket)ÚselfÚerror_stringrä   rå   râ   ræ   r^   r^   r_   rá   A  s   
zSessionError.__init__c                 C   ó   | j S ©N)rä   ©rç   r^   r^   r_   Úget_error_classM  ó   zSessionError.get_error_classc                 C   ré   rê   )rå   rë   r^   r^   r_   Úget_error_codeP  rí   zSessionError.get_error_codec                 C   ré   rê   )ræ   rë   r^   r^   r_   Úget_error_packetS  rí   zSessionError.get_error_packetc                 C   s¨   t j | jd ¡}|s| j}| j}n|d }|d  | jd ¡}|s$| j}nd| }| jrN| j}|tjv rItj| d }tj| d }d| j||f S d| j S d||f S )Nr   r   z%s(%s)z&SMB SessionError: code: 0x%x - %s - %sz*SMB SessionError: unknown error code: 0x%xz%SMB SessionError: class: %s, code: %s)ra   Úerror_classesrY   rä   rå   râ   r   ÚERROR_MESSAGES)rç   rä   Úerror_code_strÚerror_class_strrå   ÚkeyÚerror_msg_shortÚerror_msg_verboser^   r^   r_   Ú__str__V  s"   

zSessionError.__str__)r   r   )Ú__name__Ú
__module__Ú__qualname__Ú
ERRsuccessr•   r–   r—   r˜   r™   rš   r›   rœ   r�   rž   r    r¡   r¢   r¤   r¥   r¦   r§   r�   r�   r‘   r¨   ÚERRnetnamedelr©   rª   ÚERRinvalidparamÚERRcannotopenÚERRinsufficientbufferr«   rµ   ÚERRnotlockedÚ	ERRrenamer¬   r­   r®   r¯   r°   ÚERRnomoreitemsÚERRbaddirectoryÚERReasnotsupportedr²   ÚERRbuftoosmallÚERRunknownipcÚERRnosuchprintjobr±   ÚERRnoipcÚERRdriveralreadyinstalledÚERRunknownprinterportÚERRunknownprinterdriverÚERRunknownprintprocessorÚERRinvalidseparatorfileÚERRinvalidjobpriorityÚERRinvalidprinternameÚERRprinteralreadyexistsÚERRinvalidprintercommandÚERRinvaliddatatypeÚERRinvalidenvironmentÚERRunknownprintmonitorÚERRprinterdriverinuseÚERRspoolfilenotfoundÚERRnostartdocÚERRnoaddjobÚ!ERRprintprocessoralreadyinstalledÚERRprintmonitoralreadyinstalledÚERRinvalidprintmonitorÚERRprintmonitorinuseÚERRprinterhasjobsqueuedr¶   r·   r¸   r¹   rº   r»   r¼   r½   r¾   rÁ   rÂ   rÃ   rÄ   Ú
ERRbadlinkrÆ   Ú	ERRbadpidrÇ   rÈ   rÉ   rÊ   rË   rÌ   rÍ   rÎ   rÏ   Ú	ERRuseMPXÚ	ERRuseSTDÚ
ERRcontMPXÚERRbadPWrÓ   ÚERRunknownsmbrƒ   r„   r…   r†   r‡   rˆ   r‰   rŠ   r‹   rŒ   r�   rŽ   r’   ÚERRFCBunavailr”   r³   Ú	hard_msgsÚdos_msgsÚserver_msgsrX   rð   rá   rì   rî   rï   r÷   r^   r^   r^   r_   ra   U  s@   ÿþýüûúùø	÷
öõôóòñðïîÿþýüûúùø	÷
öõôóòñðïîíìëêéèçæåäãâá à!ß"Þ%ÿþýüûúùø	÷
öõôóòñðïà$ø
ra   c                   @   ó   e Zd ZdS )ÚUnsupportedFeatureN©rø   rù   rú   r^   r^   r^   r_   r*  r  ó    r*  c                 C   s   | d9 } | d7 } t | ƒS )zð
    Helper method that converts POSIX timestamps to FILETIME timestamps.
    
    :param int t: POSIX timestamp - can be retrieved from datetime library.
    
    :return int: FILETIME timestamp representing the given POSIX timestamp.
    é€–˜ ì     }*{Gí©Úint©Útr^   r^   r_   Ú	POSIXtoFTv  ó   	r3  c                 C   s   | d8 } | d } t | ƒS )zÊ
    Helper method that converts FILETIME timestamps to POSIX timestamps.
    
    :param int t: FILETIME timestamp.
    
    :return int: POSIX timestamp representing the given FILETIME timestamp.
    r.  r-  r/  r1  r^   r^   r_   Ú	FTtoPOSIX„  r4  r5  c                   @   s(   e Zd ZdedfdedfdedfgZdS )ÚSMBDateStructÚyr2   Úmr"   Údr0   N©rø   rù   rú   r
   Ú_fields_r^   r^   r^   r_   r6  “  ó
    ýr6  c                   @   óŽ   e Zd ZdZdd„ Zedd„ ƒZejdd„ ƒZedd„ ƒZejd	d„ ƒZed
d„ ƒZ	e	jdd„ ƒZ	dd„ Z
dd„ Zedd„ ƒZedd„ ƒZdS )ÚSMB_DATEzµ
    2.2.1.4.1 SMB_DATE
    Class representing an SMB Date value.
    https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-cifs/31b65222-4171-49b4-aeed-7d3f38ecf68b
    c                 C   ó   || _ || _|| _dS )zÿ
        :param int year: An integer representing the valid year part of the date.
        :param int month: An integer representing the valid month part of the date.
        :param int day: An integer representing the valid day part of the date.
        N)ÚyearÚmonthÚday)rç   r@  rA  rB  r^   r^   r_   rá      ó   
zSMB_DATE.__init__c                 C   s
   | j d S )Né¼  )Ú_yearrë   r^   r^   r_   r@  «  s   
zSMB_DATE.yearc                 C   s*   |d }|dk s|dkrt dƒ‚|| _d S )NrD  r   éw   zInvalid year component.)Ú
ValueErrorrE  ©rç   Úvaluer^   r^   r_   r@  ¯  s   
c                 C   ré   rê   )Ú_monthrë   r^   r^   r_   rA  ·  ó   zSMB_DATE.monthc                 C   ó"   |dk s|dkrt dƒ‚|| _d S )Nr   r6   zInvalid month component.)rG  rJ  rH  r^   r^   r_   rA  »  ó   
c                 C   ré   rê   )Ú_dayrë   r^   r^   r_   rB  Â  rK  zSMB_DATE.dayc                 C   rL  )Nr   rH   zInvalid day component.)rG  rN  rH  r^   r^   r_   rB  Æ  rM  c                 C   ó&   | j d> d@ | jd> d@  | jd@  S )Nr3   i þ  r0   ià  rH   )rE  rJ  rN  rë   r^   r^   r_   r   Í  ó   &zSMB_DATE.packc                 C   ó   t ƒ }td|d|  ¡ ƒ |S )zš
        Helper method to easily access the data as a struct.
        
        :return SMBDateStruct: The structure representation of the object.
        ú>Hr   )r6  r   r   ©rç   Úresr^   r^   r_   r   Ð  ó   zSMB_DATE.pack_intoc                 C   ó   t ƒ }td|d|ƒ |  |¡S )zÿ
        Helper method to easily convert packed bytes value to class object.
        
        :param bytes data: Packed bytes to be converted to a class object.
        
        :return SMB_DATE: The class representation of the packed data bytes.
        rR  r   )r6  r   Úfrom_struct©ÚclsÚdataÚsr^   r^   r_   Úfrom_intÛ  ó   

zSMB_DATE.from_intc                 C   s   | |j d |j|jƒS )zù
        Helper method to easily convert struct to class object.
        
        :param SMBDateStruct s: The struct object to be converted to a class object.
        
        :return SMB_DATE: The class representation of the struct object.
        rD  )r7  r8  r9  ©rY  r[  r^   r^   r_   rW  é  s   
zSMB_DATE.from_structN)rø   rù   rú   Ú__doc__rá   Úpropertyr@  ÚsetterrA  rB  r   r   Úclassmethodr\  rW  r^   r^   r^   r_   r>  š  s*    






r>  c                   @   s(   e Zd ZdedfdedfdedfgZdS )ÚSMBTimeStructÚhr0   r8  r1   r[  Nr:  r^   r^   r^   r_   rc  õ  r<  rc  c                   @   r=  )ÚSMB_TIMEzµ
    2.2.1.4.2 SMB_TIME
    Class representing an SMB Time value.
    https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-cifs/401749d1-ee41-4273-9dcb-698180e68745
    c                 C   r?  )a  
        :param int hour: An integer representing the valid hour part of the time.
        :param int minutes: An integer representing the valid minutes part of the time.
        :param int seconds: An integer representing the valid seconds part of the time.
        N)ÚhourÚminutesÚseconds)rç   rf  rg  rh  r^   r^   r_   rá     rC  zSMB_TIME.__init__c                 C   ré   rê   )Ú_hourrë   r^   r^   r_   rf    rK  zSMB_TIME.hourc                 C   rL  )Nr   r@   zInvalid hour component.)rG  ri  rH  r^   r^   r_   rf    rM  c                 C   ré   rê   )Ú_minutesrë   r^   r^   r_   rg    rK  zSMB_TIME.minutesc                 C   rL  )Nr   é;   zInvalid minutes component.)rG  rj  rH  r^   r^   r_   rg    rM  c                 C   ré   rê   )Ú_secondsrë   r^   r^   r_   rh  #  rK  zSMB_TIME.secondsc                 C   rL  )Nr   rk  zInvalid seconds component.)rG  rl  rH  r^   r^   r_   rh  '  rM  c                 C   rO  )Nr5   i ø  r0   ià  rH   )ri  rj  rl  rë   r^   r^   r_   r   .  rP  zSMB_TIME.packc                 C   rQ  )zš
        Helper method to easily access the data as a struct.
        
        :return SMBTimeStruct: The structure representation of the object.
        rR  r   )rc  r   r   rS  r^   r^   r_   r   1  rU  zSMB_TIME.pack_intoc                 C   rV  )zÿ
        Helper method to easily convert packed bytes value to class object.
        
        :param bytes data: Packed bytes to be converted to a class object.
        
        :return SMB_TIME: The class representation of the packed data bytes.
        rR  r   )rc  r   rW  rX  r^   r^   r_   r\  <  r]  zSMB_TIME.from_intc                 C   s   | |j |j|jƒS )zù
        Helper method to easily convert struct to class object.
        
        :param SMBTimeStruct s: The struct object to be converted to a class object.
        
        :return SMB_TIME: The class representation of the struct object.
        )rd  r8  r[  r^  r^   r^   r_   rW  J  s   
zSMB_TIME.from_structN)rø   rù   rú   r_  rá   r`  rf  ra  rg  rh  r   r   rb  r\  rW  r^   r^   r^   r_   re  ü  s*    






re  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚSharedDevicec                 C   ó   || _ || _|| _d S rê   )Ú_SharedDevice__nameÚ_SharedDevice__typeÚ_SharedDevice__comment)rç   ÚnameÚ
share_typeÚcommentr^   r^   r_   rá   X  ó   
zSharedDevice.__init__c                 C   ré   rê   )ro  rë   r^   r^   r_   Úget_name]  rí   zSharedDevice.get_namec                 C   ré   rê   )rp  rë   r^   r^   r_   Úget_type`  rí   zSharedDevice.get_typec                 C   ré   rê   )rq  rë   r^   r^   r_   Úget_commentc  rí   zSharedDevice.get_commentc                 C   ó&   d| j  d t| jƒ d | j d S )Nz<SharedDevice instance: name=z, type=ú, comment="ú">)ro  Ústrrp  rq  rë   r^   r^   r_   Ú__repr__f  rP  zSharedDevice.__repr__N)rø   rù   rú   rá   rv  rw  rx  r}  r^   r^   r^   r_   rm  W  s    rm  c                   @   sÐ   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zed/d0„ ƒZd1S )2Ú
SharedFilec
           
   	   C   sÞ   || _ || _|| _|| _|| _|| _|| _zt|tƒr&|d | 	d¡… | _
n
|d | 	d¡… | _
W n ttfy?   || _
Y nw zt|tƒrS|	d |	 	d¡… | _W d S |	d |	 	d¡… | _W d S  ttfyn   |	| _Y d S w )Nó    ú )Ú_SharedFile__ctimeÚ_SharedFile__atimeÚ_SharedFile__wtimeÚ_SharedFile__mtimeÚ_SharedFile__filesizeÚ_SharedFile__allocsizeÚ_SharedFile__attribsÚ
isinstanceÚbytesÚindexÚ_SharedFile__shortnamerG  Ú	TypeErrorÚ_SharedFile__longname)
rç   ÚctimeÚatimeÚwtimeÚmtimeÚfilesizeÚ	allocsizeÚattribsÚ	shortnameÚlongnamer^   r^   r_   rá   l  s,   
€
ÿ
ÿzSharedFile.__init__c                 C   ré   rê   )r�  rë   r^   r^   r_   Ú	get_ctimeƒ  rí   zSharedFile.get_ctimec                 C   ó   |   | j¡S rê   )Ú_SharedFile__convert_smbtimer�  rë   r^   r^   r_   Úget_ctime_epoch†  ó   zSharedFile.get_ctime_epochc                 C   ré   rê   )rƒ  rë   r^   r^   r_   Ú	get_wtime‰  rí   zSharedFile.get_wtimec                 C   r˜  rê   )r™  rƒ  rë   r^   r^   r_   Úget_wtime_epochŒ  r›  zSharedFile.get_wtime_epochc                 C   ré   rê   )r„  rë   r^   r^   r_   Ú	get_mtime�  rí   zSharedFile.get_mtimec                 C   r˜  rê   )r™  r„  rë   r^   r^   r_   Úget_mtime_epoch’  r›  zSharedFile.get_mtime_epochc                 C   ré   rê   )r‚  rë   r^   r^   r_   Ú	get_atime•  rí   zSharedFile.get_atimec                 C   r˜  rê   )r™  r‚  rë   r^   r^   r_   Úget_atime_epoch˜  r›  zSharedFile.get_atime_epochc                 C   ré   rê   )r…  rë   r^   r^   r_   Úget_filesize›  rí   zSharedFile.get_filesizec                 C   ré   rê   )r†  rë   r^   r^   r_   Úget_allocsizež  rí   zSharedFile.get_allocsizec                 C   ré   rê   )r‡  rë   r^   r^   r_   Úget_attributes¡  rí   zSharedFile.get_attributesc                 C   ó
   | j t@ S rê   )r‡  ÚATTR_ARCHIVErë   r^   r^   r_   Ú
is_archive¤  ó   
zSharedFile.is_archivec                 C   r¥  rê   )r‡  ÚATTR_COMPRESSEDrë   r^   r^   r_   Úis_compressed§  r¨  zSharedFile.is_compressedc                 C   r¥  rê   )r‡  ÚATTR_NORMALrë   r^   r^   r_   Ú	is_normalª  r¨  zSharedFile.is_normalc                 C   r¥  rê   )r‡  ÚATTR_HIDDENrë   r^   r^   r_   Ú	is_hidden­  r¨  zSharedFile.is_hiddenc                 C   r¥  rê   )r‡  ÚATTR_READONLYrë   r^   r^   r_   Úis_readonly°  r¨  zSharedFile.is_readonlyc                 C   r¥  rê   )r‡  ÚATTR_TEMPORARYrë   r^   r^   r_   Úis_temporary³  r¨  zSharedFile.is_temporaryc                 C   r¥  rê   )r‡  ÚATTR_DIRECTORYrë   r^   r^   r_   Úis_directory¶  r¨  zSharedFile.is_directoryc                 C   r¥  rê   )r‡  ÚATTR_SYSTEMrë   r^   r^   r_   Ú	is_system¹  r¨  zSharedFile.is_systemc                 C   ré   rê   )r‹  rë   r^   r^   r_   Úget_shortname¼  rí   zSharedFile.get_shortnamec                 C   ré   rê   )r�  rë   r^   r^   r_   Úget_longname¿  rí   zSharedFile.get_longnamec                 C   s&   d| j  d | j d t| jƒ d S )Nz!<SharedFile instance: shortname="z", longname="z", filesize=ú>)r‹  r�  r|  r…  rë   r^   r^   r_   r}  Â  rP  zSharedFile.__repr__c                 C   s0   | d? }| d@ }d}|d d |d@  d | S )Nr   l   ÿÿ g   ˆ„°Bg      @r-   l     à gH¯¼šò×z>r^   )r2  Úxr7  Úgeo_cal_offsetr^   r^   r_   Ú__convert_smbtimeÅ  s   zSharedFile.__convert_smbtimeN)rø   rù   rú   rá   r—  rš  rœ  r�  rž  rŸ  r   r¡  r¢  r£  r¤  r§  rª  r¬  r®  r°  r²  r´  r¶  r·  r¸  r}  Ústaticmethodr™  r^   r^   r^   r_   r~  k  s4    r~  c                   @   ó   e Zd Zdd„ Zdd„ ZdS )Ú
SMBMachinec                 C   rn  rê   )Ú_SMBMachine__nbnameÚ_SMBMachine__typeÚ_SMBMachine__comment)rç   ÚnbnameÚnbt_typert  r^   r^   r_   rá   Ï  ru  zSMBMachine.__init__c                 C   ry  )Nz<SMBMachine instance: nbname="ú", type=rz  r{  )rÀ  ÚhexrÁ  rÂ  rë   r^   r^   r_   r}  Ô  rP  zSMBMachine.__repr__N©rø   rù   rú   rá   r}  r^   r^   r^   r_   r¿  Î  ó    r¿  c                   @   r¾  )Ú	SMBDomainc                 C   rn  rê   )Ú_SMBDomain__nbgroupÚ_SMBDomain__typeÚ_SMBDomain__master_browser)rç   ÚnbgroupÚdomain_typeÚmaster_browserr^   r^   r_   rá   Ø  ru  zSMBDomain.__init__c                 C   ry  )Nz<SMBDomain instance: nbgroup="rÅ  z, master browser="r{  )rÊ  rÆ  rË  rÌ  rë   r^   r^   r_   r}  Ý  rP  zSMBDomain.__repr__NrÇ  r^   r^   r^   r_   rÉ  ×  rÈ  rÉ  c                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚNewSMBPacket))Ú	Signatureu   "Ã¿SMB)ÚCommandúB=0)Ú
ErrorClassrÓ  ©Ú	_reservedrÓ  )Ú	ErrorCodeú<H=0)ÚFlags1rÓ  )ÚFlags2rØ  )ÚPIDHighrØ  )ÚSecurityFeaturesú8s=""©ÚReservedrØ  )ÚTidz	<H=0xffff)ÚPidrØ  )ÚUidrØ  )ÚMidrØ  )ÚDataz*:c                 K   sV   t j| fi |¤Ž d| jv du rd| d< d| jv du rd| d< d|vr)g | d< d S d S )NrÚ  Fr   rÙ  rZ  rä  )r   rá   Úfields)rç   Úkargsr^   r^   r_   rá   ô  s   ÿzNewSMBPacket.__init__c                 C   s\   t | d ƒdkr|j| d< n|j| d d d d< t | ƒ| d d d d< | d  |¡ d S )Nrä  r   rÒ  éÿÿÿÿÚ
ParametersÚAndXCommandÚ
AndXOffset)ÚlenÚcommandÚappend)rç   rì  r^   r^   r_   Ú
addCommandÿ  s
   zNewSMBPacket.addCommandc                 C   s2   | d t jt jt jfv o| d dko| d tjkS )NrÒ  rÔ  r   r×  )ÚSMBÚSMB_COM_TRANSACTIONÚSMB_COM_READ_ANDXÚSMB_COM_READ_RAWra   r°   rë   r^   r^   r_   Ú
isMoreData  s
   
ÿÿzNewSMBPacket.isMoreDatac                 C   s   | d dko| d dkS )NrÔ  r?   r×  é À  r^   rë   r^   r^   r_   ÚisMoreProcessingRequired  s   z%NewSMBPacket.isMoreProcessingRequiredc                 C   s‚   | d |kr7| d dkr| d dkrdS |   ¡ rdS |  ¡ r dS td| d | d d>  | d | d	 tj@ | ƒ‚td
| d |f ƒ‚)NrÒ  rÔ  r   r×  r   úSMB Library ErrorrÖ  r%   rÚ  z2Unexpected answer from server: Got %d, Expected %d)ró  rõ  ra   rï  ÚFLAGS2_NT_STATUSr*  )rç   Úcmdr^   r^   r_   ÚisValidAnswer  s   .zNewSMBPacket.isValidAnswerN)	rø   rù   rú   Ú	structurerá   rî  ró  rõ  rù  r^   r^   r^   r_   rÐ  á  s    rÐ  c                   @   s   e Zd ZdZddd„ZdS )Ú
SMBCommand))Ú	WordCountzB=len(Parameters)//2)Ú_ParametersLengthz_-ParameterszWordCount*2)rè  ú:)Ú	ByteCountú<H-Data©rä  rþ  Nc                 K   sV   t |ƒt dƒkr|| _n|p|}tj| fd|i|¤Ž |d u r)d| d< d| d< d S d S )Nr   rZ  Ú rè  rä  )Útyperì  r   rá   )rç   ÚcommandOrDatarZ  ræ  r^   r^   r_   rá   %  s   þzSMBCommand.__init__©NN)rø   rù   rú   rú  rá   r^   r^   r^   r_   rû    s    rû  c                   @   s"   e Zd ZdZdZdZddd„ZdS )ÚAsciiOrUnicodeStructurer^   úutf-8r   c                 K   s2   |t j@ r
| j| _n| j| _tj| fi |¤Ž d S rê   )rï  ÚFLAGS2_UNICODEÚUnicodeStructurerú  ÚAsciiStructurer   rá   )rç   Úflagsræ  r^   r^   r_   rá   6  s   

z AsciiOrUnicodeStructure.__init__N©r   )rø   rù   rú   r	  r
  ÚENCODINGrá   r^   r^   r^   r_   r  1  s
    r  c                   @   r)  )ÚSMBCommand_ParametersNr+  r^   r^   r^   r_   r  =  r,  r  c                   @   ó   e Zd ZdZdZdS )ÚSMBAndXCommand_Parameters))ré  zB=0xffrÕ  )rê  rØ  ))rä  ú:=""N)rø   rù   rú   Ú	commonHdrrú  r^   r^   r^   r_   r  @  s    r  c                   @   ó   e Zd ZdZdS )ÚSMBQueryFsAttributeInfo))ÚFileSystemAttributesú<L)ÚMaxFilenNameLengthInBytesr  )ÚLengthOfFileSystemNamez<L-FileSystemName)ÚFileSystemNamerþ  N©rø   rù   rú   rú  r^   r^   r^   r_   r  N  ó    r  c                   @   ó   e Zd ZdZdZdZdS )ÚSMBQueryFsInfoVolume))ÚulVolSerialNbrú<L=0xABCDEFAA)Ú
cCharCountz<B-VolumeLabel))ÚVolumeLabelÚz))r!  ÚuN©rø   rù   rú   r  r
  r	  r^   r^   r^   r_   r  V  ó    r  c                   @   r  )ÚFileFsSizeInformation)©ÚTotalAllocationUnitsú<q=148529400)ÚAvailableAllocationUnitsú<q=14851044©ÚSectorsPerAllocationUnitú<L=2©ÚBytesPerSectorz<L=512Nr  r^   r^   r^   r_   r&  c  r  r&  c                   @   r  )ÚSMBQueryFsSizeInfo)r'  )ÚTotalFreeAllocationUnitsr+  r,  r/  Nr  r^   r^   r^   r_   r1  l  r  r1  c                   @   r  )ÚSMBFileFsFullSizeInformation)r'  )ÚCallerAvailableAllocationUnitsr)  )ÚActualAvailableAllocationUnitsr)  )r-  z<L=15r/  Nr  r^   r^   r^   r_   r3  t  r  r3  c                   @   r  )ÚSMBQueryFsVolumeInfo))ÚVolumeCreationTimeú<q)ÚSerialNumberr  )ÚVolumeLabelSizez<L=len(VolumeLabel))rß  z<H=0x10)r!  rþ  Nr  r^   r^   r^   r_   r6  }  r  r6  c                   @   r  )ÚSMBQueryFsDeviceInfo))Ú
DeviceTypeú<L=0)ÚDeviceCharacteristicsr=  Nr  r^   r^   r^   r_   r;  ‡  r  r;  c                   @   s   e Zd ZdZdZdZdS )ÚSMBFindFileBothDirectoryInfo©	©ÚNextEntryOffsetr=  ©Ú	FileIndexr=  ©ÚCreationTimer8  ©ÚLastAccessTimer8  ©ÚLastWriteTimer8  ©ÚLastChangeTimer8  ©Ú	EndOfFileú<q=0©ÚAllocationSizerO  ©ÚExtFileAttributesr=  )©ÚFileNameLengthz<L-FileName©ÚEaSizer=  ©ÚShortNameLengthú<B=0©rß  rZ  ©Ú	ShortNameÚ24s©ÚFileNamerþ  Nr$  r^   r^   r^   r_   r?  �  s    r?  c                   @   r  )ÚSMBFindFileIdFullDirectoryInfor@  )rT  rV  ©rß  r=  ©ÚFileIDrO  ©r`  r"  )rT  rV  rb  rc  r_  Nr$  r^   r^   r^   r_   ra  ­  s    ra  c                   @   r  )ÚSMBFindFileIdBothDirectoryInfor@  )rT  rV  rX  r[  r\  rÞ  rc  re  )rT  rV  rX  r[  r\  rÞ  rc  r_  Nr$  r^   r^   r^   r_   rf  É  s    
rf  c                   @   r  )ÚSMBFindFileDirectoryInfo©	rA  rC  rE  rG  rI  rK  rM  )rQ  z<q=1rR  ©rT  re  ©rT  r_  Nr$  r^   r^   r^   r_   rg  ë  s    rg  c                   @   r  )ÚSMBFindFileNamesInfo)rA  rC  ri  rj  Nr$  r^   r^   r^   r_   rk    s    rk  c                   @   r  )ÚSMBFindFileFullDirectoryInforh  )rT  ©rW  r  re  )rT  rm  r_  Nr$  r^   r^   r^   r_   rl    s    rl  c                   @   r  )ÚSMBFindInfoStandard)
)Ú	ResumeKeyú<L=0xff)ÚCreationDaterØ  )rF  rØ  )ÚLastAccessDaterØ  )rH  rØ  )ÚLastWriteDaterØ  )rJ  rØ  rm  )rQ  ú<L=1)rS  rØ  )©rU  z<B-FileNamere  )ru  r_  Nr$  r^   r^   r^   r_   rn  (  s    rn  c                   @   r  )ÚSMBSetStandardInfo)©Ú
CreateDateú<H©rF  ry  ©rr  ry  ©rH  ry  ©rs  ry  ©rJ  ry  )rß  z<B=10Nr  r^   r^   r^   r_   rv  @  r  rv  c                   @   r  )ÚSMBSetFileDispositionInfo))ÚDeletePendingú<BNr  r^   r^   r^   r_   r  L  r  r  c                   @   r  )ÚSMBSetFileBasicInfo)rE  rG  rI  )Ú
ChangeTimer8  ©rS  r  rb  Nr  r^   r^   r^   r_   r‚  R  r  r‚  c                   @   r  )ÚSMBFileStreamInformation)rA  )ÚStreamNameLengthr=  )Ú
StreamSizerO  )ÚStreamAllocationSizerO  )Ú
StreamNamer  N)rø   rù   rú   r  r^   r^   r^   r_   r…  ]  r  r…  c                   @   r  )ÚSMBFileNetworkOpenInfo))rF  rO  ©rH  rO  ©rJ  rO  )rƒ  rO  rP  rM  ©ÚFileAttributesr=  rb  Nr  r^   r^   r^   r_   rŠ  g  r  rŠ  c                   @   r  )ÚSMBSetFileEndOfFileInfo)©rN  r8  Nr  r^   r^   r^   r_   r�  t  r  r�  c                   @   r  )ÚSMBFindNext2_Parameters)©ÚSIDry  ©ÚSearchCountry  ©ÚInformationLevelry  )ro  r  ©ÚFlagsry  ©re  ©©r`  r#  Nr$  r^   r^   r^   r_   r‘  z  ó    r‘  c                   @   r  )ÚSMBFindNext2Response_Parameters)r”  ©ÚEndOfSearchú<H=1©ÚEaErrorOffsetrØ  ©ÚLastNameOffsetrØ  Nr  r^   r^   r^   r_   rž  ‰  r  rž  c                   @   r  )ÚSMBFindNext2_Data©)ÚGetExtendedAttributesListLengthz_-GetExtendedAttributesListz'self["GetExtendedAttributesListLength"])ÚGetExtendedAttributesListrþ  Nr  r^   r^   r^   r_   r¦  ‘  r  r¦  c                   @   r  )Ú SMBFindFirst2Response_Parameters)r’  r”  rŸ  r¢  r¤  Nr  r^   r^   r^   r_   rª  ™  r  rª  c                   @   r  )ÚSMBFindFirst2_Parameters)©ÚSearchAttributesry  r”  r˜  r–  )ÚSearchStorageTyper  rš  r›  Nr$  r^   r^   r^   r_   r«  ¢  r�  r«  c                   @   r  )ÚSMBFindFirst2_Datar§  Nr  r^   r^   r^   r_   r¯  ±  r  r¯  c                   @   r  )Ú SMBSetPathInformation_Parameters)r–  )rß  r  rš  r›  Nr$  r^   r^   r^   r_   r°  ¸  r%  r°  c                   @   r  )Ú(SMBSetPathInformationResponse_Parameters©r¢  Nr  r^   r^   r^   r_   r±  Ä  r  r±  c                   @   r  )Ú SMBSetFileInformation_Parameters)©ÚFIDry  r–  )rß  ry  Nr  r^   r^   r^   r_   r³  Ê  r  r³  c                   @   r  )Ú(SMBSetFileInformationResponse_Parametersr²  Nr  r^   r^   r^   r_   r¶  Ñ  r  r¶  c                   @   r  )Ú"SMBQueryFileInformation_Parameters)r´  r–  Nr  r^   r^   r^   r_   r·  ×  r  r·  c                   @   r  )Ú*SMBQueryFileInformationResponse_Parametersr²  Nr  r^   r^   r^   r_   r¸  Ý  r  r¸  c                   @   r  )ÚSMBQueryFileInformation_Data©)ÚGetExtendedAttributeListrþ  Nr  r^   r^   r^   r_   r¹  â  r  r¹  c                   @   r  )Ú*SMBQueryPathInformationResponse_Parametersr²  Nr  r^   r^   r^   r_   r¼  è  r  r¼  c                   @   r  )Ú"SMBQueryPathInformation_Parameters)r–  rb  rš  r›  Nr$  r^   r^   r^   r_   r½  í  r%  r½  c                   @   r  )ÚSMBQueryPathInformation_Datarº  Nr  r^   r^   r^   r_   r¾  ù  r  r¾  c                   @   r  )ÚSMBQueryFileEaInfo)rV  Nr  r^   r^   r^   r_   r¿     r  r¿  c                   @   r  )ÚSMBQueryFileBasicInfo)rE  rG  rI  rK  r„  Nr  r^   r^   r^   r_   rÀ    r  rÀ  c                   @   r  )ÚSMBQueryFileStandardInfo)©rQ  r8  r�  ©ÚNumberOfLinksr=  ©r€  rZ  ©Ú	Directoryr�  Nr  r^   r^   r^   r_   rÁ    r  rÁ  c                   @   r  )ÚSMBQueryFileAllInfo)rE  rG  rI  rK  r„  rb  rÂ  r�  rÃ  rÅ  rÆ  rÞ  rV  rT  r_  Nr  r^   r^   r^   r_   rÈ    r  rÈ  c                   @   r  )ÚSMBNetShareEnum)©Ú	RAPOpcoderØ  ©Ú	ParamDescr"  ©ÚDataDescr"  ©Ú	InfoLevelry  ©ÚReceiveBufferSizery  Nr  r^   r^   r^   r_   rÉ  /  r  rÉ  c                   @   r  )ÚSMBNetShareEnumResponse)©ÚStatusrØ  ©ÚConvertrØ  )ÚEntriesReturnedry  )ÚEntriesAvailablery  Nr  r^   r^   r^   r_   rÔ  8  r  rÔ  c                   @   r  )ÚNetShareInfo1))ÚNetworkNameÚ13s)ÚPadrZ  )ÚTyperØ  )ÚRemarkOffsetLowrØ  )ÚRemarkOffsetHighrØ  Nr  r^   r^   r^   r_   rÛ  @  r  rÛ  c                   @   r  )ÚSMBNetServerGetInfoResponse©rÕ  r×  )ÚTotalBytesAvailablery  Nr  r^   r^   r^   r_   râ  J  r  râ  c                   @   r  )ÚSMBNetServerInfo1))Ú
ServerNameÚ16s)ÚMajorVersionzB=5)ÚMinorVersionrÓ  )Ú
ServerTypeú<L=3)ÚServerCommentLowrØ  )ÚServerCommentHighrØ  Nr  r^   r^   r^   r_   rå  Q  ó    rå  c                   @   r  )ÚSMBNetShareGetInfo)rÊ  rÌ  rÎ  )Ú	ShareNamer"  rÐ  rÒ  Nr  r^   r^   r^   r_   rï  ]  r  rï  c                   @   r  )ÚSMBNetShareGetInfoResponserã  Nr  r^   r^   r^   r_   rñ  g  r  rñ  c                   @   r  )rÜ  ))ÚKeyr=  )ÚCIDrØ  )ÚSequenceNumberrØ  Nr  r^   r^   r^   r_   rÜ  o  r  rÜ  c                   @   r  )ÚSMBQueryInformation2_Parameters)©ÚFidry  Nr  r^   r^   r^   r_   rõ  w  r  rõ  c                   @   r  )Ú'SMBQueryInformation2Response_Parameters)	rw  rz  r{  r|  r}  r~  )ÚFileDataSizer  )ÚFileAllocationSizer  )rŽ  r  Nr  r^   r^   r^   r_   rø  |  r  rø  c                   @   r  )ÚSMBSessionSetupAndX_Parameters))Ú	MaxBufferry  ©ÚMaxMpxCountry  )ÚVCNumberry  ©Ú
SessionKeyr  )ÚAnsiPwdLengthry  )ÚUnicodePwdLengthry  )rÖ  r=  ©ÚCapabilitiesr  Nr  r^   r^   r^   r_   rû  Œ  r  rû  c                   @   r  )Ú'SMBSessionSetupAndX_Extended_Parameters))ÚMaxBufferSizery  rý  )ÚVcNumberry  r   ©ÚSecurityBlobLengthry  rb  r  Nr  r^   r^   r^   r_   r  ˜  r  r  c                   @   r  )ÚSMBSessionSetupAndX_Data)©r  z	_-AnsiPwdzself["AnsiPwdLength"]©r  z_-UnicodePwdzself["UnicodePwdLength"]©ÚAnsiPwdr  ©Ú
UnicodePwdr  )ÚAccountúz=""©ÚPrimaryDomainr  ©ÚNativeOSr  ©ÚNativeLanManr  )r  r  r  r  )r  úu=""©r  r  ©r  r  ©r  r  N©rø   rù   rú   r
  r	  r^   r^   r^   r_   r  £  s    r  c                   @   r  )Ú!SMBSessionSetupAndX_Extended_Data©©r
  z_-SecurityBlobzself["SecurityBlobLength"]©ÚSecurityBlobrþ  r  r  )r!  r"  r  r  Nr  r^   r^   r^   r_   r  º  ó    r  c                   @   r  )Ú&SMBSessionSetupAndXResponse_Parameters))ÚActionry  Nr  r^   r^   r^   r_   r%  É  r  r%  c                   @   r  )Ú0SMBSessionSetupAndX_Extended_Response_Parameters)©r&  rØ  r	  Nr  r^   r^   r^   r_   r'  Î  r  r'  c                   @   r  )Ú SMBSessionSetupAndXResponse_Data)r  r  r  )r  r  r  Nr  r^   r^   r^   r_   r)  Ô  ó    r)  c                   @   s   e Zd ZdZdZdd„ ZdS )Ú*SMBSessionSetupAndX_Extended_Response_Datar   )r!  r"  )ÚPadLenú_-Padz01 if (len(self["SecurityBlob"]) % 2 == 0) else 0©rÞ  r  r  r  c                 C   s2   | j | jkrt| d ƒd dkrd| d< t | ¡S )Nr#  r   r   r€  rÞ  )rú  r	  rë  r  ÚgetDatarë   r^   r^   r_   r/  ñ  s   
z2SMBSessionSetupAndX_Extended_Response_Data.getDataN)rø   rù   rú   r
  r	  r/  r^   r^   r^   r_   r+  á  s    r+  c                   @   r  )ÚSMBTreeConnect_Parametersr^   Nr  r^   r^   r^   r_   r0  ø  r  r0  c                   @   r  )ÚSMBTreeConnect_Data))Ú
PathFormatú"©ÚPathr"  )ÚPasswordFormatr3  )ÚPasswordr"  )ÚServiceFormatr3  ©ÚServicer"  Nr  r^   r^   r^   r_   r1  ü  r  r1  c                   @   r  )ÚSMBTreeConnectAndX_Parameters)©r™  rØ  )ÚPasswordLengthry  Nr  r^   r^   r^   r_   r;    r  r;  c                   @   r  )Ú%SMBTreeConnectAndXResponse_Parameters))ÚOptionalSupportrØ  Nr  r^   r^   r^   r_   r>    r  r>  c                   @   r  )Ú-SMBTreeConnectAndXExtendedResponse_Parameters))r?  r¡  )ÚMaximalShareAccessRightsú<L=0x1fffff)ÚGuestMaximalShareAccessRightsrB  Nr  r^   r^   r^   r_   r@    r  r@  c                   @   r  )ÚSMBTreeConnectAndX_Data))Ú_PasswordLengthú
_-Passwordzself["_PasswordLength"]©r7  rþ  r4  r9  ))rE  rF  z=self["_PasswordLength"] if self["_PasswordLength"] > 0 else 1rG  )r5  r#  r9  Nr  r^   r^   r^   r_   rD    r$  rD  c                   @   r  )ÚSMBTreeConnectAndXResponse_Data)r9  ©r,  r-  zself["PadLen"]r.  )ÚNativeFileSystemr"  )r9  rI  r.  )rJ  r#  Nr  r^   r^   r^   r_   rH  (  r*  rH  c                   @   r  )ÚSMBNtCreateAndX_Parameters)rÕ  )rU  ry  )ÚCreateFlagsr  )ÚRootFidr=  )Ú
AccessMaskr  )ÚAllocationSizeLor=  )ÚAllocationSizeHir=  r�  )ÚShareAccessrë  )ÚDispositionrt  )ÚCreateOptionsr  )ÚImpersonationr.  )ÚSecurityFlagszB=3Nr  r^   r^   r^   r_   rK  7  r  rK  c                   @   r  )Ú"SMBNtCreateAndXResponse_Parameters)©ÚOplockLevelrÓ  rö  ©ÚCreateActionr  ©Ú
CreateTimerO  r‹  rŒ  ©rL  rO  ©rŽ  z<L=0x80rP  rM  ©ÚFileTyperØ  ©ÚIPCStaterØ  ©ÚIsDirectoryÚBNr  r^   r^   r^   r_   rV  H  rî  rV  c                   @   r  )Ú*SMBNtCreateAndXExtendedResponse_Parameters)rW  rö  rY  r[  r‹  rŒ  r]  r^  rP  rM  r_  ra  rc  )Ú
VolumeGUIDrç  )Ú	FileIdLowr=  )Ú
FileIdHighr=  )ÚMaximalAccessRightsz<L=0x12019b)ÚGuestMaximalAccessRightsz<L=0x120089Nr  r^   r^   r^   r_   rf  Z  rî  rf  c                   @   r  )ÚSMBNtCreateAndX_Datarš  )©rÞ  re  rœ  Nr  r^   r^   r^   r_   rl  q  s    rl  c                   @   r  )ÚSMBOpenAndX_Parameters)r<  ©ÚDesiredAccessrØ  ©r­  rØ  ©rŽ  rØ  )rF  r=  )ÚOpenModer¡  )rQ  r=  )rß  rÝ  Nr  r^   r^   r^   r_   rn  {  r  rn  c                   @   r)  )ÚSMBOpenAndX_DataNr+  r^   r^   r^   r_   rt  ‡  r,  rt  c                   @   r  )ÚSMBOpenAndXResponse_Parameters)
©r÷  rØ  rr  ©Ú
LastWritenr=  ©ÚFileSizer=  ©ÚGrantedAccessrØ  r_  ra  r(  )Ú	ServerFidr=  ©rÖ  rØ  Nr  r^   r^   r^   r_   ru  Š  r  ru  c                   @   r  )ÚSMBWrite_Parameters)rö  ©ÚCountry  ©ÚOffsetr  ©Ú	Remainingry  Nr  r^   r^   r^   r_   r  ™  r  r  c                   @   r  )ÚSMBWriteResponse_Parameters)r€  Nr  r^   r^   r^   r_   r†  ¡  r  r†  c                   @   r  )ÚSMBWrite_Data))ÚBufferFormatz<B=1©Ú
DataLengthr   r  Nr  r^   r^   r^   r_   r‡  ¦  r  r‡  c                   @   r  )ÚSMBWriteAndX_Parameters)	rv  )rƒ  r=  ©rÖ  rp  ©Ú	WriteModez<H=8©r…  rØ  ©ÚDataLength_HirØ  )rŠ  rØ  ©Ú
DataOffsetrØ  ©Ú
HighOffsetr=  Nr  r^   r^   r^   r_   r‹  ¯  r  r‹  c                   @   r  )ÚSMBWriteAndX_Data_Short))Ú_PadLenr-  zself["DataOffset"] - 59©rÞ  rþ  ©rŠ  z_-Datazself["DataLength"]r  Nr  r^   r^   r^   r_   r–  ¼  r  r–  c                   @   r  )ÚSMBWriteAndX_Data))r—  r-  zself["DataOffset"] - 63r˜  r™  r  Nr  r^   r^   r^   r_   rš  Å  r  rš  c                   @   r  )ÚSMBWriteAndX_Parameters_Short)rö  r‚  rŒ  r�  r„  r�  ©rŠ  ry  r’  Nr  r^   r^   r^   r_   r›  Ï  r  r›  c                   @   r  )ÚSMBWriteAndXResponse_Parameters)r€  )Ú	Availablery  rb  Nr  r^   r^   r^   r_   r�  Û  r  r�  c                   @   r  )ÚSMBWriteRaw_Parameters)	rö  r€  r~  r‚  ©ÚTimeoutr=  )rŽ  rØ  )Ú
_reserved2r=  rœ  r’  Nr  r^   r^   r^   r_   rŸ  ã  r  rŸ  c                   @   r  )ÚSMBRead_Parameters)rö  r€  r‚  )r…  z<H=CountNr  r^   r^   r^   r_   r£  ñ  r  r£  c                   @   r  )ÚSMBReadResponse_Parameters))r�  rØ  )rÖ  rÝ  Nr  r^   r^   r^   r_   r¤  ù  r  r¤  c                   @   r  )ÚSMBReadResponse_Data))rˆ  z<B=0x1r‰  r  Nr  r^   r^   r^   r_   r¥  ÿ  r  r¥  c                   @   r  )ÚSMBReadRaw_Parameters)rö  r‚  ©ÚMaxCountry  ©ÚMinCountú<H=MaxCountr   r~  Nr  r^   r^   r^   r_   r¦    r  r¦  c                   @   r  )ÚSMBNTTransaction_Parameters)©ÚMaxSetupCountrZ  ©Ú	Reserved1rØ  ©ÚTotalParameterCountr  ©ÚTotalDataCountr  )ÚMaxParameterCountz<L=1024)ÚMaxDataCountz<L=65504©ÚParameterCountr  ©ÚParameterOffsetr  ©Ú	DataCountr  ©r“  r  ©Ú
SetupCountz<B=len(Setup)//2)ÚFunctionrØ  ©ÚSetupLengthz_-SetupzSetupCount*2©ÚSetuprþ  Nr  r^   r^   r^   r_   r¬    r  r¬  c                   @   r  )Ú#SMBNTTransactionResponse_Parameters))r°  z3s=""r±  r³  r·  r¹  )ÚParameterDisplacementr=  r»  r½  )ÚDataDisplacementr=  ©r¿  rZ  rÁ  rÃ  Nr  r^   r^   r^   r_   rÅ  $  r  rÅ  c                   @   r  )ÚSMBNTTransaction_Data)©Ú
Pad1Lengthz_-Pad1zself["Pad1Length"]©ÚPad1rþ  )ÚNT_Trans_ParametersLengthz_-NT_Trans_Parametersz!self["NT_Trans_ParametersLength"])ÚNT_Trans_Parametersrþ  ©Ú
Pad2Lengthz_-Pad2zself["Pad2Length"]©ÚPad2rþ  )ÚNT_Trans_DataLengthz_-NT_Trans_Datazself["NT_Trans_DataLength"])ÚNT_Trans_Datarþ  Nr  r^   r^   r^   r_   rÉ  4  r  rÉ  c                   @   r  )ÚSMBNTTransactionResponse_Data©rÊ  rÌ  )ÚTrans_ParametersLengthú_-Trans_Parameterszself["Trans_ParametersLength"]©ÚTrans_Parametersrþ  rÐ  rÒ  )ÚTrans_DataLengthú_-Trans_Datazself["Trans_DataLength"]©Ú
Trans_Datarþ  Nr  r^   r^   r^   r_   rÖ  @  r  rÖ  c                   @   r  )Ú#SMBTransaction2Secondary_Parameters)	©r²  ry  ©r´  ry  ©r¸  ry  ©rº  ry  )rÆ  ry  ©r¼  ry  ©r“  ry  ©rÇ  rØ  r´  Nr  r^   r^   r^   r_   rà  N  r  rà  c                   @   r  )ÚSMBTransaction2Secondary_Datar×  Nr  r^   r^   r^   r_   rè  [  r  rè  c                   @   r  )ÚSMBTransaction2_Parameters©rá  râ  )rµ  z<H=1024)r¶  z<H=65504r­  )r°  rZ  r<  r   )Ú	Reserved2rØ  rã  rä  rå  ræ  r¾  )Ú	Reserved3rZ  rÁ  rÃ  Nr  r^   r^   r^   r_   ré  j  r  ré  c                   @   r  )Ú"SMBTransaction2Response_Parameters)rá  râ  r¯  rã  rä  ©rÆ  rØ  rå  ræ  rç  rÈ  ©rë  rZ  rÁ  rÃ  Nr  r^   r^   r^   r_   rí    r  rí  c                   @   r  )ÚSMBTransaction2_Datar×  Nr  r^   r^   r^   r_   rð  �  r  rð  c                   @   r  )ÚSMBTransaction2Response_Datar×  Nr  r^   r^   r^   r_   rñ  ž  r  rñ  c                   @   r  )ÚSMBQueryInformation_Data)©rˆ  zB=4re  )ró  rœ  Nr  r^   r^   r^   r_   rò  ¬  ó    rò  c                   @   r  )Ú&SMBQueryInformationResponse_Parameters))rŽ  ry  )rJ  r  )rz  r  )rß  z"0123456789Nr  r^   r^   r^   r_   rõ  ·  r  rõ  c                   @   r  )ÚSMBTransaction_Parametersrê  Nr  r^   r^   r^   r_   rö  À  r  rö  c                   @   r  )Ú!SMBTransactionResponse_Parameters)rá  râ  r¯  rã  rä  rî  rå  ræ  rç  )r¿  r�  rï  rÁ  rÃ  Nr  r^   r^   r^   r_   r÷  Õ  r  r÷  c                   @   r  )ÚSMBTransaction_SData))ÚNamer"  ©rØ  rÙ  rÚ  ©rÜ  rÝ  rÞ  )rm  )rù  r#  rú  rÚ  rû  rÞ  Nr  r^   r^   r^   r_   rø  è  r$  rø  c                   @   r  )ÚSMBTransaction_Data))Ú
NameLengthz_-Name)rù  rþ  rú  rÚ  rû  rÞ  Nr  r^   r^   r^   r_   rü  ù  r  rü  c                   @   r  )ÚSMBTransactionResponse_Data)rú  rÚ  rû  rÞ  Nr  r^   r^   r^   r_   rþ  	  r  rþ  c                   @   r  )ÚSMBReadAndX_Parameters)rö  r‚  r§  r©  )rÖ  z<L=0x0©r…  r«  r”  Nr  r^   r^   r^   r_   rÿ  	  r  rÿ  c                   @   r  )ÚSMBReadAndX_Parameters2)rö  r‚  r§  r©  )rÖ  z<L=0xffffffffr   Nr  r^   r^   r^   r_   r  	  r  r  c                   @   r  )ÚSMBReadAndXResponse_Parameters)r�  )ÚDataModerØ  r~  rå  ræ  )ÚDataCount_Hir  )r¢  z6s=""Nr  r^   r^   r^   r_   r  !	  r  r  c                   @   r  )ÚSMBEcho_Data©r  Nr  r^   r^   r^   r_   r  -	  r  r  c                   @   r  )ÚSMBEcho_Parameters))Ú	EchoCountry  Nr  r^   r^   r^   r_   r  2	  r  r  c                   @   r  )ÚSMBEchoResponse_Datar  Nr  r^   r^   r^   r_   r	  7	  r  r	  c                   @   r  )ÚSMBEchoResponse_Parameters))rô  r¡  Nr  r^   r^   r^   r_   r
  <	  r  r
  c                   @   r  )Ú*SMBQueryInformationDiskResponse_Parameters))Ú
TotalUnitsry  )ÚBlocksPerUnitry  )Ú	BlockSizery  )Ú	FreeUnitsry  rÞ  Nr  r^   r^   r^   r_   r  B	  r  r  c                   @   r  )ÚSMBLogOffAndXr^   Nr  r^   r^   r^   r_   r  M	  r  r  c                   @   r  )ÚSMBClose_Parameters)r´  )ÚTimer=  Nr  r^   r^   r^   r_   r  Q	  r  r  c                   @   r  )ÚSMBFlush_Parameters)r´  Nr  r^   r^   r^   r_   r  X	  r  r  c                   @   r  )ÚSMBCreateDirectory_Data©©rˆ  ú<B=4)ÚDirectoryNamer"  ©r  )r  r#  Nr  r^   r^   r^   r_   r  ^	  rô  r  c                   @   r  )ÚSMBDelete_Data)r  re  )r  rœ  Nr  r^   r^   r^   r_   r  i	  rô  r  c                   @   r  )ÚSMBDelete_Parameters©r¬  Nr  r^   r^   r^   r_   r  s	  r  r  c                   @   r  )ÚSMBDeleteDirectory_Datar  r  Nr  r^   r^   r^   r_   r  y	  rô  r  c                   @   r  )ÚSMBCheckDirectory_Datar  r  Nr  r^   r^   r^   r_   r  „	  rô  r  c                   @   r  )ÚSMBRename_Parametersr  Nr  r^   r^   r^   r_   r  �	  r  r  c                   @   r  )ÚSMBRename_Data)©ÚBufferFormat1r  )ÚOldFileNamer"  ©ÚBufferFormat2r  )ÚNewFileNamer"  )r!  )r#  r#  r$  )rÞ  rÓ  )r&  r#  Nr  r^   r^   r^   r_   r   ”	  r*  r   c                   @   r  )ÚSMBOpen_Parameters)ro  rq  Nr  r^   r^   r^   r_   r'  ¥	  r  r'  c                   @   r  )ÚSMBOpen_Data)©ÚFileNameFormatr3  re  )r)  rœ  Nr  r^   r^   r^   r_   r(  «	  rô  r(  c                   @   r  )ÚSMBOpenResponse_Parameters)rv  rr  rw  ry  r{  Nr  r^   r^   r^   r_   r+  µ	  r  r+  c                   @   r  )ÚSMBExtended_Security_Parameters©)ÚDialectIndexry  )ÚSecurityModer�  rý  )ÚMaxNumberVcsry  )r  r  )Ú
MaxRawSizer  r   r  )ÚLowDateTimer  )ÚHighDateTimer  )ÚServerTimeZonery  )ÚChallengeLengthr�  Nr  r^   r^   r^   r_   r,  ¿	  r  r,  c                   @   r  )ÚSMBExtended_Security_Data))Ú
ServerGUIDrç  r"  Nr  r^   r^   r^   r_   r6  Ï	  r  r6  c                   @   r  )ÚSMBNTLMDialect_Parametersr-  Nr  r^   r^   r^   r_   r8  Õ	  r  r8  c                   @   s"   e Zd ZdZddd„Zdd„ ZdS )	ÚSMBNTLMDialect_Data))r5  z_-Challengezself["ChallengeLength"])Ú	Challengerþ  )ÚPayloadrþ  )Ú
DomainNameÚ_)ræ  r=  Nr   c                 C   s   t  | ||¡ d S rê   )r   rá   )rç   rZ  Ú	alignmentr^   r^   r_   rá   î	  s   zSMBNTLMDialect_Data.__init__c                 C   s    t  | |¡ d| d< d| d< d S )Nr  r<  ræ  )r   Ú
fromString)rç   rZ  r^   r^   r_   r?  ò	  s   zSMBNTLMDialect_Data.fromString)Nr   )rø   rù   rú   rú  rá   r?  r^   r^   r^   r_   r9  å	  s    
r9  c                   @   sÎ  e Zd ZG dd„ d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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.Z0d/Z1d0Z2d1Z3d2Z4d3Z5d4Z6d5Z7d6Z8d7Z9d8Z:d9Z;d:Z<d;Z=d<Z>d=Z?d>Z@d?ZAd@ZBdAZCdBZDdCZEdDZFdEZGdFZHdGZIdHZJdIZKdJZLd$ZMdZNdZOdZPdZQd
ZRdZSd	ZTdZUdZVdZWdZXdZYdZZdZ[dZ\dZ]dZ^dZ_dZ`dZadZbdKZcdLZddZedMZfdNZgdZhdZidZjdZkd:ZldZmdZndZodLZpdOZqdPZrdMZsdNZtdZudZvdQZwdZxdZydZzdZ{dZ|dZ}dRe~jdSdRddRdRfdTdU„Z€e�dVdW„ ƒZ‚dXdY„ ZƒdZd[„ Z„d\d]„ Z…d^d_„ Z†d`da„ Z‡dbdc„ Zˆ�dddde„Z‰dfdg„ ZŠdhdi„ Z‹eŒdjdk„ ƒZ�dldm„ ZŽdndo„ Z�dpdq„ Z�drds„ Z‘dtdu„ Z’dvdw„ Z“dxdy„ Z”e�dzd{„ ƒZ•d|d}„ Z–d~d„ Z—d€d�„ Z˜e�d‚dƒ„ ƒZ™�dd…d†„Zšd‡e›fdˆd‰„ZœdŠd‹„ Z�dŒd�„ ZždRe›dRfdŽd�„ZŸeŸZ e�d�d‘„ ƒZ¡d’d“„ Z¢d”d•„ Z£d–d—„ Z¤d˜d™„ Z¥dšd›„ Z¦dœd�„ Z§dždŸ„ Z¨d d¡„ Z©d¢d£„ Zªd¤d¥„ Z«�dd¦d§„Z¬d¨d©„ Z­e®fdªd«„Z¯d¬d­„ Z°d®d¯„ Z±d°d±„ Z²d²d³„ Z³d´dµ„ Z´d¶d·„ Zµd¸d¹„ Z¶dºd»„ Z·d¼d½„ Z¸d¾d¿„ Z¹dÀdÁ„ ZºdÂdÃ„ Z»dÄdÅ„ Z¼dÆdÇ„ Z½dÈdÉ„ Z¾dÊdË„ Z¿�ddÌdÍ„ZÀ�ddÎdÏ„ZÁdÐdÑ„ ZÂdÒdÓ„ ZÃ�ddÔdÕ„ZÄ�ddÖd×„ZÅ�ddØdÙ„ZÆ�ddÚdÛ„ZÇ�ddÜdÝ„ZÈ�ddÞdß„ZÉ�ddàdá„ZÊ�ddãdä„ZË�ddådæ„ZÌ�ddçdè„ZÍdédê„ ZÎdRdReÏeÐB eÑeÒeÓB eÔB eÕB eÖB e×B eØB fdëdì„ZÙdídî„ ZÚ�ddðdñ„ZÛeÑddReÏfdòdó„ZÜeÝddReÏfdôdõ„ZÞeÝddReÏfdöd÷„Zß�ddødù„Zà�ddúdû„Zá�ddüdý„Zâ�ddþdÿ„Zã�d�d �d„Zä�d�d�d„Zå�d�d„ Zæ�d�d�d„Zç�d�d�d	„Zè�d�d
�d„ZédRS (  rï  c                   @   r)  )zSMB.HostnameValidationExceptionNr+  r^   r^   r^   r_   ÚHostnameValidationExceptionù	  r,  r@  r   r   r   r   r"   r0   r1   r2   r%   r3   r4   r5   r6   r7   r8   r9   r!   r:   r;   r<   r=   rC   rD   rE   rF   rG   rH   r   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   é-   é.   é/   r.   rr   rb   r¿   rs   é5   ép   éq   ér   és   ét   éu   r   é�   é‚   éƒ   é„   é    é¡   é¢   é¤   é¥   éÀ   éÁ   éÂ   éÃ   éØ   éÙ   éÚ   r   r&   r+   rU   r)   r*   r   Né½  c
                 C   s@  d| _ d| _d| _d| _d | _d | _d | _d| _d| _d| _	d| _
| ¡ | _|| _d| _d | _d | _d| _d| _d| _d| _d| _d| _d| _d| _d | _d | _d| _d| _d| _d | _d| _d| _ d| _!d| _"d| _#d| _$d| _%d| _&d| _'d| _(d| _)d| _*t+j,t+j-B | _.t+j/t+j0B t+j1B | _2|d u r™d| _3n|| _3|dkr§|dkr§|| _|d u r¯d| _n|| _|d u �r|sÌt4 5¡ }| 6d	¡}
|
d
krÌ|d |
… }|rÜt7 8|||||| j3¡| _d S t7 9|||||| j3¡| _|  :¡  | jd t+j;@ t+j<krÿ|  =dd¡ d S d S || _| j:|	d� | jd t+j;@ t+j<k�r|  =dd¡ d S d S )Nr   r  TFó    é<   r[  z
*SMBSERVERÚ.rç  r/  )Ú	negPacket)>Ú_uidÚ_SMB__server_nameÚ_SMB__client_nameÚ_SMB__server_osÚ_SMB__server_os_majorÚ_SMB__server_os_minorÚ_SMB__server_os_buildÚ_SMB__server_lanmanÚ_SMB__server_domainÚ_SMB__server_dns_domain_nameÚ_SMB__server_dns_host_nameÚupperÚ_SMB__remote_nameÚ_SMB__remote_hostÚ_SMB__isNTLMv2Ú_dialects_parametersÚ_dialects_dataÚ_doKerberosÚ_SMB__userNameÚ_SMB__passwordÚ_SMB__domainÚ_SMB__lmhashÚ_SMB__nthashÚ_SMB__aesKeyÚ	_SMB__kdcÚ	_SMB__TGTÚ	_SMB__TGSÚ_dialect_dataÚ_dialect_parametersÚ_actionÚ_sessÚencrypt_passwordsÚtidÚfidÚ_strict_hostname_validationÚ_validation_allow_absentÚ_accepted_hostnameÚ_SignSequenceNumberÚ_SigningSessionKeyÚ_SigningChallengeResponseÚ_SignatureEnabledÚ_SignatureVerificationEnabledÚ_SignatureRequiredrï  ÚFLAGS1_PATHCASELESSÚFLAGS1_CANONICALIZED_PATHSÚ_SMB__flags1ÚFLAGS2_EXTENDED_SECURITYr÷  ÚFLAGS2_LONG_NAMESÚ_SMB__flags2Ú_SMB__timeoutÚsocketÚgethostnameÚfindr   ÚNetBIOSUDPSessionÚNetBIOSTCPSessionÚneg_sessionÚSECURITY_SHARE_MASKÚSECURITY_SHARE_SHAREÚlogin)rç   Úremote_nameÚremote_hostÚmy_nameÚ	host_typeÚ	sess_portÚtimeoutÚUDPÚsessionr_  Úir^   r^   r_   rá   Œ
  sŒ   


ÿÿzSMB.__init__c                   C   s   dS )NFr^   r^   r^   r^   r_   Úntlm_supported÷
  ó   zSMB.ntlm_supportedc                 C   ré   rê   )rq  rë   r^   r^   r_   ÚgetKerberosû
  rí   zSMB.getKerberosc                 C   ré   rê   ©rl  rë   r^   r^   r_   Úget_remote_nameþ
  rí   zSMB.get_remote_namec                 C   s
   || _ dS )NTr§  )rç   rr  r^   r^   r_   Úset_remote_name  s   zSMB.set_remote_namec                 C   rn  rê   )r‚  rƒ  r„  )rç   ÚvalidateÚaccept_emptyÚhostnamer^   r^   r_   Úset_hostname_validation  ru  zSMB.set_hostname_validationc                 C   ré   rê   )rm  rë   r^   r^   r_   Úget_remote_host
  rí   zSMB.get_remote_hostc                 C   s   | j | jfS rê   ©r�  r�  rë   r^   r^   r_   Ú	get_flags  r›  zSMB.get_flagsc                 C   s$   |d ur|| _ |d ur|| _d S d S rê   r¯  )rç   Úflags1Úflags2r^   r^   r_   Ú	set_flags  s
   
ÿzSMB.set_flagsc                 C   s   | j }|| _ |S rê   ©r‘  ©rç   r   Úprev_timeoutr^   r^   r_   Úset_timeout  s   zSMB.set_timeoutc                 C   ré   rê   r´  rë   r^   r^   r_   Úget_timeout  rí   zSMB.get_timeoutc              	   c   s0   � |   |¡}zd V  W |   |¡ d S |   |¡ w rê   )r·  rµ  r^   r^   r_   Úuse_timeout  s
   €
zSMB.use_timeoutc                 C   ré   rê   )r~  rë   r^   r^   r_   Úget_session&  rí   zSMB.get_sessionc                 C   ré   rê   )r€  rë   r^   r^   r_   Úget_tid)  rí   zSMB.get_tidc                 C   ré   rê   )r�  rë   r^   r^   r_   Úget_fid,  rí   zSMB.get_fidc                 C   r¥  rê   )r}  ÚSMB_SETUP_GUESTrë   r^   r^   r_   ÚisGuestSession/  r¨  zSMB.isGuestSessionc                 C   ré   rê   )rn  rë   r^   r^   r_   ÚdoesSupportNTLMv22  rí   zSMB.doesSupportNTLMv2c                 C   s   | j r| j  ¡  d | _ d S d S rê   )r~  Úcloserë   r^   r^   r_   Úclose_session5  s   

þzSMB.close_sessionc                 C   s   | j  | j¡}t| ¡ d�S )N©rZ  )r~  Úrecv_packetr‘  rÐ  Úget_trailer)rç   Úrr^   r^   r_   ÚrecvSMB:  s   zSMB.recvSMBc              
   C   sœ   t d| d d… ƒ\
}}}}}}}}	}
}|| |k s||
 |k r"d}nd}|d |d  }|	d |d  }	|| dd|d  … |||| … ||	|	| … fS )Nz<HHHHHHHHHBr<   r   r   é7   r   r=   )r   )ÚparamsrZ  ÚtotparamcntÚ
totdatacntr=  ÚparamcntÚparamoffsetÚparamdsÚdatacntÚ
dataoffsetÚdatadsÚsetupcntÚhas_morer^   r^   r_   Ú__decode_trans>  s   &4zSMB.__decode_transc                 C   sx   t d| jƒ|d< t ¡ }| |¡ | |¡ | | ¡ ¡ | ¡ d d… |d< | jr3|  jd7  _d S |  jd7  _d S )Nr8  rÜ  r%   r   r   )r   r…  ÚhashlibÚmd5Úupdater/  Údigestr‰  )rç   ræ   ÚsigningSessionKeyÚsigningChallengeResponser8  r^   r^   r_   ÚsignSMBJ  s   

zSMB.signSMBc                 C   s:   |d }|   |||¡ | jdur|  jd8  _|d |kS )NrÜ  Tr   )rÚ  r‰  r…  )rç   ræ   rØ  rÙ  Ú	signaturer^   r^   r_   ÚcheckSignSMBl  s
   
zSMB.checkSignSMBc                 C   s|   | j |d< t ¡ d@ |d< |d  | jO  < |d  | jO  < | jr4|d  tjO  < |  || j	| j
¡ | j | ¡ ¡ d S )Nrâ  rÖ   rá  rÙ  rÚ  )r`  ÚosÚgetpidr�  r�  rˆ  rï  ÚFLAGS2_SMB_SECURITY_SIGNATURErÚ  r†  r‡  r~  Úsend_packetr/  )rç   Úsmbr^   r^   r_   ÚsendSMBv  s   
zSMB.sendSMBc                 C   sf   	 |   ¡ r2|  ¡ |kr/|  ¡ dkr|  ¡ dkrdS td|  ¡ |  ¡ d>  |  ¡ |  ¡ tj@ ƒ‚	 dS q)Nr   r   rö  r%   )	ÚrawDataÚget_commandrì   rî   ra   Úget_reservedÚ
get_flags2rï  r÷  )r[  rø  r^   r^   r_   rù  ƒ  s   ,÷zSMB.isValidAnswerTc                    sœ   ‡ fdd„}|d u rGt ƒ }ttjƒ}ˆ  ¡ d }|du r&ˆ j|tjB d� n
ˆ j|tj @ d� d|d< | |¡ ˆ  |¡ 	 ˆ  	¡ }||ƒS |t |d�ƒS )	Nc              
      sj  | d t j@ rˆ  jt jO  _|  t j¡r³t| d d ƒ}t|d ƒˆ _tƒ ˆ _	ˆ jd ˆ j	d< z
ˆ j	 
|d ¡ W n ttfyV } zt d|¡ tddd	d
d ƒ‚d }~ww ˆ jd t j@ r™t|d ƒˆ _z	t|d ƒˆ _	W n ttfy‹ } zt d|¡ tddd	d
d ƒ‚d }~ww ˆ jd t j@ r—dˆ _d
S ˆ j	d d ur¦ˆ j	d ˆ _ˆ jd dkr±tdƒ‚d
S dS )NrÚ  rä  r   rè  r5  z%Negotiate response parsing failed: %sz7Connection failed: invalid or truncated server responser7   rô  r   r  z7Negotiate extended security response parsing failed: %sr/  Træ  r.  rÖ   z&Remote server does not know NT LM 0.12)rï  r  r�  rù  ÚSMB_COM_NEGOTIATErû  r8  ro  r9  rp  r?  rG  ÚStructErrorr   Údebugra   ÚCAP_EXTENDED_SECURITYr,  r6  ÚSECURITY_SIGNATURES_REQUIREDrŠ  ra  r*  )rá  ÚsessionResponseÚerë   r^   r_   ÚparsePacket‘  s@   €þ€þz$SMB.neg_session.<locals>.parsePacketr   T)r²  s   NT LM 0.12 rä  rÂ  )
rÐ  rû  rï  rç  r°  r³  rŽ  rî  râ  rÆ  )rç   Úextended_securityr_  rî  rá  Ú
negSessionr²  r^   rë   r_   r—  �  s   ,


zSMB.neg_sessionr  c                 C   sÌ   t  d¡ |r| jd dkr|  t |¡¡}ts#trt|ƒ}nt	dƒ‚t
ƒ }ttjƒ}tƒ |d< tƒ |d< | ¡ |d d< ||d d< ||d d	< | |¡ |  |¡ 	 |  ¡ }| tj¡rb|d S |d S )Nz�[MS-CIFS] This is an original Core Protocol command.This command has been deprecated.Client Implementations SHOULD use SMB_COM_TREE_CONNECT_ANDXr5  r   z#SMB: Can	 conver path from unicode!rè  rä  r5  r7  r:  r   rà  )r   Úwarningro  Úget_ntlmv1_responser   Úcompute_lmhashÚunicode_supportÚunicode_convertr|  rà   rÐ  rû  rï  ÚSMB_COM_TREE_CONNECTr0  r1  rk  rî  râ  rÆ  rù  )rç   ÚpathÚpasswordÚservicerá  ÚtreeConnectr^   r^   r_   Útree_connectÑ  s,   






zSMB.tree_connectc                 C   ré   rê   ©r`  rë   r^   r^   r_   Úget_uidò  rí   zSMB.get_uidc                 C   ó
   || _ d S rê   rü  )rç   Úuidr^   r^   r_   Úset_uidõ  r¨  zSMB.set_uidc                 C   sš  |r| j d dkr|  t |¡¡}nd}ts!trt|ƒ}ntdƒ‚|d u r)tƒ }n|}| 	d¡d }zt
 |  ¡ dddt
j¡d \}}}}}|d }	W n tyX   |  ¡ }	Y nw d|	 d | }| jtj@ rn| ¡  d	¡n|}ttjƒ}
tƒ |
d
< t| jd�|
d< t|ƒ|
d
 d< ||
d d< ||
d d< ||
d d< | jtj@ r¨d|
d d< | |
¡ |  |¡ 	 |  ¡ }| tj¡rÅ|d | _| jS |d | _| jS )Nr5  r   r€  z$SMB: Can	 convert path from unicode!ú\rç  rd   ú\\úutf-16lerè  ©r  rä  r=  r7  r5  r:  rÞ  r   rà  )ro  rò  r   ró  rô  rõ  r|  rà   rÐ  Úsplitr’  Úgetaddrinfor®  ÚIPPROTO_TCPr�  rï  r  rk  Úencoderû  ÚSMB_COM_TREE_CONNECT_ANDXr;  rD  rë  rî  râ  rÆ  rù  r€  )rç   r÷  rø  rù  Ú
smb_packetrá  Úsharer=  Úsockaddrrœ  rú  r^   r^   r_   Útree_connect_andxø  sN   €
&ÿ





zSMB.tree_connect_andxc                   C   s   t S rê   )ÚSMB_DIALECTr^   r^   r^   r_   Ú
getDialect@  r¥  zSMB.getDialectc                 C   ré   rê   )ra  rë   r^   r^   r_   Úget_server_nameD  rK  zSMB.get_server_namec                 C   ré   rê   )rb  rë   r^   r^   r_   Úget_client_nameH  rí   zSMB.get_client_namec                 C   ré   rê   )r†  rë   r^   r^   r_   Úget_session_keyK  rí   zSMB.get_session_keyc                 C   s   d| _ d| _|| _d S )NTr   )rˆ  r…  r†  )rç   rô   r^   r^   r_   Úset_session_keyN  ru  zSMB.set_session_keyc                 C   s   d| j jv r| j d S d S ©Nr:  )rp  rå  rë   r^   r^   r_   Úget_encryption_keyS  s   
zSMB.get_encryption_keyc                 C   sN   | j d }|dK }|| j d O }|d8 }|d }tjj|tjjd�}| d¡S )Nr3  r   r2  r.  r-  )Útzz%a, %d %b %Y %H:%M:%S GMT)ro  ÚdatetimeÚfromtimestampÚtimezoneÚutcÚstrftime)rç   Ú	timestampr9  r^   r^   r_   Úget_server_timeY  s   

zSMB.get_server_timec                 C   s4   t ƒ }||d< | ttjƒ¡ |  |¡ |  ¡  d S )Nrà  )rÐ  rî  rû  rï  ÚSMB_COM_TREE_DISCONNECTrâ  rÆ  )rç   r€  rá  r^   r^   r_   Údisconnect_treeb  s
   
zSMB.disconnect_treec           	      C   sú   |  dd¡}| jtj@ r| d¡n|}tƒ }||d< ttjƒ}tƒ |d< ||d d< ||d d< t	t
B tB |d d< t| jd	�|d
< ||d
 d< | |¡ |  |¡ |  ¡ }| tj¡r{t|d
 d ƒ}t|d ƒ}|d |d |d |d |d fS d S )Nú/r  r  rà  rè  rp  rs  r­  r  rä  r`  r   r÷  rŽ  rx  rz  r|  )Úreplacer�  rï  r  r  rÐ  rû  ÚSMB_COM_OPENr'  r¯  r­  r¦  r(  rî  râ  rÆ  rù  r+  ©	rç   r€  ÚfilenameÚ	open_modeÚdesired_accessrá  ÚopenFileÚopenFileResponseÚopenFileParametersr^   r^   r_   Úopenk  s0   



ûûzSMB.openc           	   
   C   s*  |  dd¡}| jtj@ r| d¡n|}tƒ }||d< ttjƒ}tƒ |d< ||d d< ||d d< t	t
B tB |d d< t| jd	�|d
< ||d
 d< | jtj@ rTd|d
 d< | |¡ |  |¡ |  ¡ }| tj¡r“t|d
 d ƒ}t|d ƒ}|d |d |d |d |d |d |d |d |d f	S d S )Nr   r  r  rà  rè  rp  rs  r­  r  rä  r`  r   rÞ  r÷  rŽ  rx  rz  r|  r`  rb  r&  r}  )r!  r�  rï  r  r  rÐ  rû  ÚSMB_COM_OPEN_ANDXrn  r¯  r­  r¦  rt  rî  râ  rÆ  rù  ru  r#  r^   r^   r_   Ú	open_andxŒ  s<   



÷ûzSMB.open_andxc                 C   s^   t ƒ }||d< ttjƒ}tƒ |d< ||d d< | |¡ |  |¡ |  ¡ }| tj¡r-dS dS )Nrà  rè  rµ  r   r   )	rÐ  rû  rï  ÚSMB_COM_CLOSEr  rî  râ  rÆ  rù  )rç   r€  r�  rá  Ú	closeFiler^   r^   r_   rÀ  ´  s   



z	SMB.closec           	      C   sü   t ƒ }||d< ttjƒ}tƒ |d< tƒ |d< ||d d< t|ƒ|d d< t|ƒ|d d< t|ƒ|d d< dt|ƒ t|ƒ |d d	< t|ƒ|d d
< |d d	 t|ƒ |d d< ||d d< ||d d< ||d d< |rrt|d d< | |¡ |  	|¡ d S )Nrà  rè  rä  rÄ  r²  r´  r¸  é?   rº  r¼  r“  rù  rÛ  rß  r™  )
rÐ  rû  rï  rð  rö  rü  rë  ÚTRANS_NO_RESPONSErî  râ  )	rç   r€  Úsetuprr  ÚparamrZ  ÚnoAnswerrá  ÚtransCommandr^   r^   r_   Ú
send_transÃ  s&   



zSMB.send_transc                 C   s¬  t ƒ }||d< td|ƒ}ttjƒ}tƒ |d< | jd |d d< tƒ |d< ||d d< t|ƒ|d d< t|ƒ|d d	< t|ƒd
krWddt|ƒ d  d }	d|	 }
|
|d d< nd|d d< d
}	t|ƒ|d d< dt|ƒ t|ƒ |	 |d d< t|ƒd
kr˜ddt|ƒ |	 t|ƒ d  d }d| |d d< nd|d d< d
}t|ƒ|d d< |d d t|ƒ | |d d< ||d d< ||d d< ||d d< | 	|¡ |  
|¡ d S )Nrà  ry  rè  r  r¶  rä  rÄ  r²  r´  r   r"   é>   õ   Ã¿rÍ  r  r¸  rº  rÓ  r¼  r“  rù  rÛ  rß  )rÐ  r   rû  rï  ÚSMB_COM_TRANSACTION2ré  ro  rð  rë  rî  râ  )rç   r€  r1  rr  r2  rZ  rá  rì  r4  ÚpadLenÚpadBytesÚpad2Lenr^   r^   r_   Úsend_trans2à  s<   



 $ 
zSMB.send_trans2c              	   C   sf   |   |tjdtd||ƒd¡ |  ¡ }| tj¡r1t|d d ƒ}t|d ƒ}|d |d  d … S d S )Nr€  ú<HHr  rä  r   rè  r´  )	r<  rï  ÚTRANS2_QUERY_FILE_INFORMATIONr   rÆ  rù  r8  rû  rí  )rç   r€  r�  ÚfileInfoClassÚrespÚtrans2ResponseÚtrans2Parametersr^   r^   r_   Úquery_file_info  s   üzSMB.query_file_infoc           	      C   s„   t ƒ }||d< ||d< d|d< |  |tjd| ¡ | ¡ ¡ |  ¡ }| tj¡r@t|d d ƒ}t	|d ƒ}|d |d  d … S d S )	Nrµ  r—  r   rß  r€  rä  rè  r´  )
r³  r<  rï  ÚTRANS2_SET_FILE_INFORMATIONr/  rÆ  rù  r8  rû  rí  )	rç   r€  r�  r?  Úfile_info_dataÚSMBTrans2SetFileInfo_Paramsr@  rA  rB  r^   r^   r_   Úset_file_info  s   üzSMB.set_file_infoc           	      C   sn   | j d tj@ r| jdu rd}n| j d d@ }|}||k r5|  ||||¡}||ƒ |t|ƒ7 }||k sd S d S )Nr  Féèý  r  é üÿÿ)ro  rï  ÚCAP_LARGE_READXrˆ  Ú	read_andxrë  )	rç   r€  r�  ÚoffsetÚdatasizeÚcallbackÚmax_buf_sizeÚread_offsetrZ  r^   r^   r_   Ú__nonraw_retr_file$  s   üzSMB.__nonraw_retr_filec                 C   s~   | j d tj@ r| jdu rd}n| j d d@ }|}	 ||ƒ}|s"d S |  ||||¡}	t|	d d ƒ}
t|
d	 ƒ}||d
 7 }q)Nr  FrH  r  rI  r   rä  r   rè  r�  )ro  rï  ÚCAP_LARGE_WRITEXrˆ  Ú
write_andxrû  r�  )rç   r€  r�  rL  rM  rN  rO  Úwrite_offsetrZ  rá  ÚwriteResponseÚwriteResponseParametersr^   r^   r_   Ú__nonraw_stor_file1  s   øzSMB.__nonraw_stor_filec                 C   ré   rê   )rh  rë   r^   r^   r_   Úget_server_domainB  rí   zSMB.get_server_domainc                 C   ré   rê   )ri  rë   r^   r^   r_   Úget_server_dns_domain_nameE  rí   zSMB.get_server_dns_domain_namec                 C   ré   rê   )rj  rë   r^   r^   r_   Úget_server_dns_host_nameH  rí   zSMB.get_server_dns_host_namec                 C   ré   rê   ©rc  rë   r^   r^   r_   Úget_server_osK  rí   zSMB.get_server_osc                 C   ré   rê   )rd  rë   r^   r^   r_   Úget_server_os_majorN  rí   zSMB.get_server_os_majorc                 C   ré   rê   )re  rë   r^   r^   r_   Úget_server_os_minorQ  rí   zSMB.get_server_os_minorc                 C   ré   rê   )rf  rë   r^   r^   r_   Úget_server_os_buildT  rí   zSMB.get_server_os_buildc                 C   rþ  rê   r[  )rç   rÝ  r^   r^   r_   Úset_server_osW  r¨  zSMB.set_server_osc                 C   ré   rê   )rg  rë   r^   r^   r_   Úget_server_lanmanZ  rí   zSMB.get_server_lanmanc                 C   s   | j d tj@ tjkS )Nr/  )ro  rï  r˜  ÚSECURITY_SHARE_USERrë   r^   r^   r_   Úis_login_required]  s   zSMB.is_login_requiredc                 C   ré   rê   )rŠ  rë   r^   r^   r_   Úis_signing_requiredc  rí   zSMB.is_signing_requiredc                 C   s   | j d }t ||¡S r  )rp  r   rò  )rç   rô   Ú	challenger^   r^   r_   rò  f  s   
zSMB.get_ntlmv1_responsec                 C   st   | j dkr| js|  d¡‚d S | j  ¡ | j ¡ kr6| j ¡ | j ¡ kr8|  d| j ¡ | j  ¡ | j ¡ f ¡‚d S d S )Nr  zLHostname was not supplied by target host and absent validation is disallowedz?Supplied hostname %s does not match reported hostnames %s or %s)ra  rƒ  r@  Úlowerr„  rj  rë   r^   r^   r_   Úperform_hostname_validationj  s   

(ÿÿzSMB.perform_hostname_validationc
           -   
   C   sà  ddl m}
m}m}m} ddlm}m} ddlm	} ddl
m}m}m} ddlm}m} dd l}| j}|tj@ r@||tjA @ | _|dksH|dkrkt|ƒd rRd	| }t|ƒd r\d	| }z
t|ƒ}t|ƒ}W n   Y || _|| _|| _|| _|| _|| _|| _|| _|	| _d
| _ |||j!j"j#d�}|d u r©|	d u r¨||||||||ƒ\}}}}n|d }|d }|d }|	d u rÓ|d| j$ |j!j%j#d�}|||||||ƒ\}}}}n|	d }|	d }|	d }t&ƒ }| j'rî|d  tj(O  < t)tj*ƒ} t+ƒ | d< t,ƒ | d< d| d d< d| d d< d| d d< d| d d< tj-tj.B tj/B tj0B tj1B | d d< t2ƒ }!t3d g|!d< |j4||ƒ d�d }|ƒ }"|" 5|d ¡ |
ƒ }#d|#d< t6|j7jj#ƒ|#d < t8ƒ }$| 9|$¡|#d!< ||#d|"j:ƒ |ƒ }%d|%d"< ||%d#< ||%d$|j;ƒ |j <|j=j>¡}&|&j?|%d%< | :|&¡|%d&< | @|%¡}'| A|d'|'d ¡}(tB|#d(< |jC|#d( d)< |(|#d( d< tDd*tEƒtFtDd*tGƒtFt3d+ ƒ tH | @|#¡ ƒ |!d,< t|!ƒ| d d-< | d  I¡  |! I¡ | d d.< d/| d d0< d1| d d2< | J| ¡ |  K|¡ |  L¡ }| Mtj*¡�rl|d3 | _Nt)|d d ƒ})tO|)d ƒ}*tP|d d4�}+|*d- |+d-< z	|+ Q|)d ¡ W n tRtSf�yC }, ztT Ud5|,¡ tVd6d7d8dd ƒ‚d },~,ww |*d9 | _W| jXd: tjY@ �r\|jZ| _[d| _\d
| _]|tj@ �rj|  jtjO  _dS t^d;ƒ‚)<Nr   )ÚAP_REQÚAuthenticatorÚTGS_REPÚseq_set)ÚgetKerberosTGTÚgetKerberosTGS)Ú	constants)Ú	PrincipalÚKerberosTimeÚTicket)ÚdecoderÚencoderr  r   ú0%sT)r  ÚKDC_REPÚcipherÚ
sessionKeyzcifs/%srÚ  rè  rä  é ð  r  rþ  r   r  r  r  zMS KRB5 - Microsoft Kerberos 5Ú	MechTypes)Úasn1SpecÚticketr0   Úpvnozmsg-typez
ap-optionszauthenticator-vnoÚcrealmÚcnameÚcusecrŽ  r5   ÚauthenticatorÚetypere  zKRB5 - Kerberos 5Ú	MechTokenr
  r#  ÚUnixr  ÚSambar  râ  r  ú)Session setup response parsing failed: %sú;Authentication failed: invalid or truncated server responseém   rô  r&  r/  ú#Error: Could not login successfully)_Úimpacket.krb5.asn1rh  ri  rj  rk  Úimpacket.krb5.kerberosv5rl  rm  Úimpacket.krb5rn  Úimpacket.krb5.typesro  rp  rq  Úpyasn1.codec.derrr  rs  r  r�  rï  r  rë  r   rr  rs  rt  ru  rv  rw  rx  ry  rz  rq  ÚPrincipalNameTypeÚNT_PRINCIPALrI  rl  ÚNT_SRV_INSTrÐ  rŠ  rß  rû  ÚSMB_COM_SESSION_SETUP_ANDXr  r  rê  ÚCAP_USE_NT_ERRORSÚCAP_UNICODErJ  rR  r   r   ÚdecodeÚ	from_asn1r0  ÚApplicationTagNumbersÚlistÚencodeFlagsÚto_asn1Úcomponents_to_asn1Únowr  r  Úmicrosecondr  Úencryptr   Úenctyper   r   r   r   r   r/  rî  râ  rÆ  rù  r`  r'  r+  r?  rG  rè  r   ré  ra   r}  ro  rë  Úcontentsr†  r…  rˆ  rà   )-rç   Úuserrø  ÚdomainÚlmhashÚnthashÚaesKeyÚkdcHostÚTGTÚTGSrh  ri  rj  rk  rl  rm  rn  ro  rp  rq  rr  rs  r  r²  ÚuserNameÚtgtrv  ÚoldSessionKeyrw  Ú
serverNameÚtgsrá  ÚsessionSetupÚblobr{  ÚapReqÚoptsr€  r›  ÚencodedAuthenticatorÚencryptedEncodedAuthenticatorrì  ÚsessionParametersÚsessionDatarí  r^   r^   r_   Úkerberos_logint  sä   
€


&

ÿÿÿ


€þ
zSMB.kerberos_loginc              
   C   sÔ  | j }|tj@ r||tjA @ | _ tƒ }| jr|d  tjO  < ttjƒ}	tƒ |	d< t	ƒ |	d< d|	d d< d|	d d< d|	d d	< d
|	d d< tj
tjB tjB tjB tjB |	d d< tƒ }
td g|
d< tj|  ¡ || j|d�}| ¡ |
d< t|
ƒ|	d d< |	d  ¡  |
 ¡ |	d d< d|	d d< d|	d d< | |	¡ |  |¡ |  ¡ }| tj¡�rf|d | _t|d d
 ƒ}t|d ƒ}t|d d�}|d |d< z	| |d ¡ W n ttfyñ } zt  !d|¡ t"ddddd ƒ‚d }~ww t#|d ƒ}t $|d ¡}|d d
k�r¡t %|d d |d … ¡}|tj& d u�r3z|tj& d  'd ¡| _(W n
 t)�y2   Y nw |tj* d u�raz| j(|tj* d  'd ¡k�rU|tj* d  'd ¡| _+W n
 t)�y`   Y nw |tj, d u�r�z|tj, d  'd ¡| _-W n
 t)�y€   Y nw |tj. d u�r¡z|tj. d  'd ¡| _/W n
 t)�y    Y nw | j0�r©|  1¡  d!|j2v �rÉ|d! }t|ƒd"k�rÉt3d#|d d"… ƒ\| _4| _5| _6tj7||d ||||||d�\}}|d u�râ|| _8tƒ }| j�rò|d  tjO  < t#ƒ }| ¡ |d< t|ƒ|	d d< | ¡ |	d d< |d | _9|d | _:| |	¡ |  |¡ |  ¡ }d
| _| tj¡�rd|d | _t|d d
 ƒ}t;|d ƒ}|d$ | _<| j=d% tj>@ �rTd| _?d&| _@|tj@ �rb|  j tjO  _ dS d S tAd'ƒ‚)(NrÚ  rè  rä  rx  r  r   rþ  r   r  r   r  r  z2NTLMSSP - Microsoft NTLM Security Support Providerry  ©Ú
use_ntlmv2r‚  r
  r#  rƒ  r  r„  r  râ  r  r…  r†  r‡  rô  ÚResponseTokenÚTargetInfoFields_lenÚTargetInfoFieldsr  ÚVersionr"   z<BBHr&  r/  Trˆ  )Br�  rï  r  rÐ  rŠ  rß  rû  r‘  r  r  rê  r’  r“  rJ  rR  r   r   r   ÚgetNTLMSSPType1r  r/  rë  rî  râ  rÆ  rù  r`  r'  r+  r?  rG  rè  r   ré  ra   r   ÚNTLMAuthChallengeÚAV_PAIRSÚNTLMSSP_AV_HOSTNAMEr”  ra  ÚUnicodeDecodeErrorÚNTLMSSP_AV_DOMAINNAMErh  ÚNTLMSSP_AV_DNS_DOMAINNAMEri  ÚNTLMSSP_AV_DNS_HOSTNAMErj  r‚  rg  rå  r   rd  re  rf  ÚgetNTLMSSPType3r†  rc  rg  r%  r}  ro  rë  r…  rˆ  rà   )rç   r   rø  r¡  r¢  r£  r·  r²  rá  r­  r®  Úauthrì  r³  r´  rí  Ú	respTokenÚntlmChallengeÚav_pairsÚversionÚtype3ÚexportedSessionKeyÚ
respToken2r^   r^   r_   Úlogin_extended  sÐ   



&


€þþ€þþþ"






ñzSMB.login_extendedc                 C   s$   | j | j| j| j| j| j| j| jfS rê   )rr  rs  rt  ru  rv  rw  ry  rz  rë   r^   r^   r_   ÚgetCredentials²  s   øzSMB.getCredentialsc                 C   sD   t ƒ }| jd tj@ r| jdu rd}n| jd }||d< ||d< |S )Nr  FrH  r  ÚMaxReadSizeÚMaxWriteSize)Údictro  rï  rJ  rˆ  )rç   rT  Úmax_sizer^   r^   r_   ÚgetIOCapabilities½  s   
zSMB.getIOCapabilitiesc                 C   s<  |dks|dkr+t |ƒd rd| }t |ƒd rd| }z
t|ƒ}t|ƒ}W n   Y || _|| _|| _|| _|| _d| _d | _d | _	| j
d tj@ rŠz| j|||||dd� W d S    |r†t |  ¡ ¡ d¡dkswt |  ¡ ¡ d	¡dkr†| j|||||d
d� d
| _n‚ Y d S |rš|  |||||¡ d
| _d S tdƒ‚)Nr  r   rt  r  Tr¶  s   Windows 2000rç  s   SambaFz8Cannot authenticate against target, enable ntlm_fallback)rë  r   rr  rs  rt  ru  rv  rw  ry  rz  ro  rï  rê  rÍ  ÚsixÚensure_binaryra  r”  rn  Úlogin_standardra   )rç   r   rø  r¡  r¢  r£  Úntlm_fallbackr^   r^   r_   rš  Ç  s@   þ
z	SMB.loginc                 C   s|  | j }|tj@ r||tjA @ | _ | jd dkrF|dks|dkr*|  |¡}|  |¡}n |rAt |¡}t |¡}|  |¡}|  |¡}n	d}d}n|}d}tƒ }	t	tj
ƒ}
tƒ |
d< tƒ |
d< d|
d d< d|
d d	< t ¡ d
@ |
d d< | jd |
d d< t|ƒ|
d d< t|ƒ|
d d< tjtjB tjB tjB |
d d< ||
d d< ||
d d< t|ƒ|
d d< t|ƒ|
d d< ttjƒ|
d d< d|
d d< |	 |
¡ |  |	¡ |  ¡ }	|	 tj
¡�r:|	d | _t	|	d d ƒ}t|d ƒ}t|	d |d d�}|d | _|d t@ dk�r|
d d | _|| _ n
|
d d | _|| _ |d | _!|d | _"|d | _#|tj@ �r8|  j tjO  _ dS t$dƒ‚)Nr5  r   r  rè  rä  rx  rü  r   rþ  rÖ   rÿ  r  r  r  r  r  r  r  r  r  Úpysmbr  râ  rÚ  )r  rZ  r&  r   rˆ  )%r�  rï  r  ro  rò  r   ró  Úcompute_nthashrÐ  rû  r‘  rû  r  rÝ  rÞ  rë  ÚCAP_RAW_MODEr’  rJ  rR  r|  rr  rî  râ  rÆ  rù  r`  r%  r)  r}  ÚSMB_SETUP_USE_LANMAN_KEYr‡  r†  rc  rg  rh  rà   )rç   r   rø  r¡  r¢  r£  r²  Úpwd_ansiÚpwd_unicoderá  r­  rì  r³  r´  r^   r^   r_   rÖ  ï  sl   







 






zSMB.login_standardc                 C   sŽ  t ƒ }||d< ttjƒ}tƒ |d< tƒ |d< d}d| }| jtj@ rJdt|ƒ }	d|	d  }
|
d | 	d	¡ }|	t|ƒ }d
|d
  }||d 7 }n| 	d¡}||d d< d|d d< d|d d< d|d d< d|d d< |d |d d< d|d d< dt|ƒ t|ƒ |d d< d|d d< d|d d< ||d d< d|d d< d|d d< |r¯t
|d d< | |¡ |  |¡ |  ¡ }| tj¡rÅdS dS )Nrà  rè  rä  zS   z\PIPE%s r/  r   r  r  r"   r  rÄ  r   r²  r´  rµ  r¶  iè  r¡  r¸  rº  r¼  r“  rù  r  rÛ  rß  r™  r   )rÐ  rû  rï  rð  rö  rü  r�  r  rë  r  r0  rî  râ  rÆ  rù  )rç   r€  Úpiper   r3  rá  r4  r1  rr  Ústart_of_nameÚ	start_padÚend_of_nameÚpad_lenr^   r^   r_   ÚwaitNamedPipeB  sH   





zSMB.waitNamedPipec                 C   s¬   |s| j d }tƒ }||d< ttjƒ}tƒ |d< ||d d< ||d d< ||d d< | |¡ |rT	 |  |¡ |  ¡ }| 	tj¡rSt|d d	 ƒ}	t
|	d ƒ}
|
d S q2d S )
Nr  rà  rè  r÷  rƒ  r�  r   rä  r   )ro  rÐ  rû  rï  ÚSMB_COM_READr£  rî  râ  rÆ  rù  r¥  )rç   r€  r�  rL  rÒ  Úwait_answerrá  ÚreadÚansÚreadResponseÚreadDatar^   r^   r_   ræ  q  s(   




ø
zSMB.readc                 C   sn  |s| j d tj@ r| jdu rd}n| j d }|d u rDtƒ }||d< ttjƒ}tƒ |d< ||d d< ||d d< ||d d	< | |¡ n|}|ršd
}		 |  	|¡ |  
¡ }
|
 tj¡r™t|
d d ƒ}t|d ƒ}|d }|d d|d   }|	|
 ¡ ||| … 7 }	|
 ¡ sˆ|	S t||d ƒ}|d d  |7  < qK|  	|¡ |  
¡ }
z|
 tj¡r­|
W S W d S    |
 Y S )Nr  FrH  r  rà  rè  r÷  rƒ  r¨  r\  r   rä  r   r“  r¼  r,   r  r…  )ro  rï  rJ  rˆ  rÐ  rû  rñ  rÿ  rî  râ  rÆ  rù  r  r/  ró  Úmin)rç   r€  r�  rL  rÒ  rå  r
  rá  ÚreadAndXÚanswerrç  ÚreadAndXResponseÚreadAndXParametersÚcountr^   r^   r_   rK  Ž  sL   



ñ
zSMB.read_andxc           	      C   sš   |s| j d }tƒ }||d< ttjƒ}tƒ |d< ||d d< ||d d< ||d d< | |¡ |  |¡ |rK| j 	| j
¡ ¡ }|sI|  ||||¡}|S d S )Nr  rà  rè  r÷  rƒ  r¨  )ro  rÐ  rû  rï  rò  r¦  rî  râ  r~  rÃ  r‘  rÄ  rK  )	rç   r€  r�  rL  rÒ  rå  rá  ÚreadRawrZ  r^   r^   r_   Úread_rawÄ  s"   




zSMB.read_rawc                 C   s¤   t ƒ }||d< ttjƒ}tƒ |d< tƒ |d< ||d d< t|ƒ|d d< ||d d< t|ƒ|d d< ||d d< | |¡ |  |¡ |rP|  	¡ }| 
tj¡rP|S d S )Nrà  rè  rä  r÷  r�  rƒ  r…  )rÐ  rû  rï  ÚSMB_COM_WRITEr  r‡  rë  rî  râ  rÆ  rù  )rç   r€  r�  rZ  rL  rå  rá  Úwriter^   r^   r_   ró  Ý  s"   




z	SMB.writeFc                 C   sæ  |d u rÜt ƒ }||d< ttjƒ}	| |	¡ tƒ |	d< ||	d d< ||	d d< d|	d d< t|ƒ|	d d< t|ƒ|	d d< t|ƒ|	d d	< ||	d
< |du rÛ| jd }
t|ƒ|
krÛ|
d }d|	d d< d| }t|ƒ}||	d d< |d |	d d< |d |… |	d
< |  |¡ |r�|  	¡ }| 
tj¡ |}||d … }||k rÙd|	d d< t|d |… ƒ|	d d< |d |… |	d
< |  |¡ |rÇ|  	¡ }| 
tj¡ ||	d d 7 }||d … }||k sœ|S n|}|  |¡ |rñ|  	¡ }| 
tj¡rñ|S d S )Nrà  rè  r÷  rƒ  r%   rŽ  r…  rŠ  r“  rä  Tr  r]  r6   s   ÿÿr   r"   )rÐ  rû  rï  ÚSMB_COM_WRITE_ANDXrî  r‹  rë  ro  râ  rÆ  rù  )rç   r€  r�  rZ  rL  rå  Úwrite_pipe_moder
  rá  Ú	writeAndXÚmaxBuffSizeÚchunks_sizeÚsendDataÚtotalLenÚsmbRespÚalreadySentr^   r^   r_   rS  ó  sb   





÷€
zSMB.write_andxc                 C   s¬   t  d¡ tƒ }||d< ttjƒ}tƒ |d< ||d d< ||d d< t|ƒ|d d< d|d d< d|d d	< | |¡ |  	|¡ | j
 |¡ |rT|  ¡ }| tj¡rT|S d S )
NzÀ[MS-CIFS] This command was introduced in the CorePlus dialect, but is often listed as part of the LAN Manager 1.0 dialect.This command has been deprecated.Clients SHOULD use SMB_COM_WRITE_ANDXrà  rè  r÷  rƒ  r�  r   rŠ  r“  )r   rñ  rÐ  rû  rï  ÚSMB_COM_WRITE_RAWrŸ  rë  rî  râ  r~  rà  rÆ  rù  )rç   r€  r�  rZ  rL  rå  rá  ÚwriteRawr^   r^   r_   Ú	write_raw0  s$   




zSMB.write_rawc           
      C   st   | j |tdd|ƒdd||d� |s|sd S |  ¡ }| tj¡r8t|d d ƒ}t|d ƒ}	|d |	d	  d … S d S )
Nr=  rN   z\PIPE\ r  )r3  rä  r   rè  r´  )r5  r   rÆ  rù  rï  rð  rû  r÷  )
rç   r€  r�  rZ  r3  Ú
waitAnswerrL  rá  ÚtransResponseÚtransParametersr^   r^   r_   ÚTransactNamedPipeG  s   zSMB.TransactNamedPipec                 C   sJ   |   ¡ }| tj¡r#t|d d ƒ}t|d ƒ}|d |d  d … S d S )Nrä  r   rè  r´  )rÆ  rù  rï  rð  rû  r÷  )rç   r[  r  r  r^   r^   r_   ÚTransactNamedPipeRecvS  s   zSMB.TransactNamedPipeRecvc                 C   s>  |  dd¡}| jtj@ r| d¡n|}|d u rtƒ }||d< n|}|d u rpttjƒ}	tƒ |	d< t	| jd�|	d< t
|ƒ|	d d< d	|	d d
< ||	d d< d|	d d< ||	d d< ||	d d< ||	d d< | jtj@ rod|	d d< n|}	| |	¡ |  |¡ 	 |  ¡ }| tj¡ržt|d d ƒ}
t|
d ƒ}|d | _|d S q})Nr   r  r  rà  rè  r  rä  rU  r?   rL  rN  r&   rS  rQ  rR  r`  r   rÞ  r   r÷  )r!  r�  rï  r  r  rÐ  rû  ÚSMB_COM_NT_CREATE_ANDXrK  rl  rë  rî  râ  rÆ  rù  rV  r�  )rç   r€  r$  r
  rø  ÚshareAccessModeÚdispositionÚ
accessMaskrá  ÚntCreateÚntCreateResponseÚntCreateParametersr^   r^   r_   Únt_create_andx[  s>   


€


øzSMB.nt_create_andxc                 C   s@   t ƒ }ttjƒ}tƒ |d< | |¡ |  |¡ |  ¡  d| _d S )Nrè  r   )	rÐ  rû  rï  ÚSMB_COM_LOGOFF_ANDXr  rî  râ  rÆ  r`  )rç   rá  ÚlogOffr^   r^   r_   Úlogoff„  s   




z
SMB.logoffÚ*c              
   C   sÚ  |  dd¡}| jtj@ r| d¡n|}|  d| j d | |¡}�zÅt| jƒ}tt	B t
B tB tB |d< d|d< ttB |d< t|d	< d
|d< | jtj@ rR|d |d< n|d |d< |  |tjd|d¡ g }d}d}d}	t|ƒ|k r´|  ¡ }
|
 tj¡r®t|
d d
 ƒ}t|d ƒ}|d }|	|d |d d d … d |d … 7 }	||d |d d d … 7 }t|ƒ|k spt|	ƒ}|d }|d d
k�r×t|d�}| jtj@ rÕ|d  d¡n|d  d¡}| jtj@ ré|d  d¡n|d  d¡}t|d |d |d |d  |d! |d" |d# ||ƒ	}| |¡ |d$ d
k�r,t||d$ d … ƒd
k�r,||d$ d … }n�|d% d
k�rÈ|d }tƒ }||d< d&|d< t|d	< |d' |d(< ttB |d< | jtj@ �r`|d |d< n|d) |d< |  |tjd|d¡ d}d}d}t|ƒ|k �rÇ|  ¡ }
|
 tj¡�rÀt|
d d
 ƒ}t|d ƒ}|d }||d |d d d … d |d … 7 }||d |d d d … 7 }t|ƒ}t|ƒ|k �s}nn|d d
ksÃW |   |¡ |S W |   |¡ |S W |   |¡ |S |   |¡ w )*Nr   r  r  r  r­  r'   r•  r™  r—  r   r®  s     r`  r€  r  r   r\  rä  rè  r´  rº  rÇ  r¸  r“  r“  rÂ  r]  Úcp437rF  rH  rJ  rL  rN  rQ  rS  rB  r   r(   rD  ro  r  )!r!  r�  rï  r  r  r  rl  r«  ÚSMB_FILE_ATTRIBUTE_DIRECTORYÚSMB_FILE_ATTRIBUTE_HIDDENÚSMB_FILE_ATTRIBUTE_SYSTEMÚSMB_FILE_ATTRIBUTE_READONLYÚSMB_FILE_ATTRIBUTE_ARCHIVEÚSMB_FIND_RETURN_RESUME_KEYSÚSMB_FIND_CLOSE_AT_EOSÚ!SMB_FIND_FILE_BOTH_DIRECTORY_INFOr<  ÚTRANS2_FIND_FIRST2rë  rÆ  rù  r8  rû  rí  rª  r?  r”  r~  rí  r‘  ÚTRANS2_FIND_NEXT2rž  r  )rç   rù  r÷  rø  r€  ÚfindFirstParameterÚfilesÚtotalDataCountÚfindDataÚfindFirst2ParameterBlockr@  rA  rB  ÚfindParameterBlockÚsidÚrecordr•  r$  Ú
fileRecordÚresume_filenameÚfindNextParameterÚfindNext2ParameterBlockr^   r^   r_   Ú	list_path�  s®   
ÿÿþ(ø

ÿÿþ
((÷€Õ
-Ñ
-ü
þzSMB.list_pathc              
   C   s¸   |  dd¡}d}|  d| j d | |¡}	z6| j|	||ttB tB tB d�}|  |	|¡}
t	|
ƒd }|  
|	||||¡ W |dkrE|  |	|¡ |  |	¡ d S |dkrV|  |	|¡ |  |	¡ w )Nr   r  rç  r  )r  r  rN  r   )r!  r  rl  r  ÚREAD_CONTROLÚFILE_READ_ATTRIBUTESÚFILE_READ_EAÚFILE_READ_DATArC  rÁ  Ú_SMB__nonraw_retr_filerÀ  r  )rç   rù  r$  rN  ÚmoderL  rø  r  r�  r€  rT  rM  r^   r^   r_   Ú	retr_fileç  s   þzSMB.retr_filec           
   
   C   ó”   |  dd¡}d}|  d| j d | |¡}	z$| j|	|||d�}|  |	||d|¡ W |dkr3|  |	|¡ |  |	¡ d S |dkrD|  |	|¡ |  |	¡ w ©Nr   r  rç  r  )r  r  r   ©r!  r  rl  r  Ú_SMB__nonraw_stor_filerÀ  r  ©
rç   rù  r$  rN  r.  rL  rø  r  r�  r€  r^   r^   r_   Ú	stor_fileø  s   þzSMB.stor_filec           
   
   C   r0  r1  r2  r4  r^   r^   r_   Ústor_file_nonraw  s   þzSMB.stor_file_nonrawc              	   C   sÊ   |  dd¡}|  d| j d | |¡}zKtƒ }||d< d|d< ttjƒ}d|d< t| jd	�|d
< | jtj	@ r;| 
d¡n||d
 d< | |¡ |  |¡ 	 |  ¡ }| tj¡r^W |  |¡ d S qL|  |¡ w )Nr   r  r  rà  r   rã  r  rè  r  rä  r  r  )r!  r  rl  rÐ  rû  rï  ÚSMB_COM_CHECK_DIRECTORYr  r�  r  r  rî  râ  rÆ  rù  r  ©rç   rù  r÷  rø  r€  rá  rø  r[  r^   r^   r_   Ú	check_dir  s&   
"

ûzSMB.check_dirc              	   C   sö   |  dd¡}|  |||¡ |  d| j d | |¡}zZtƒ }||d< d|d< ttjƒ}tƒ |d< t	t
B tB |d d< t| jd	�|d
< | jtj@ rO|d  d¡n|d |d
 d< | |¡ |  |¡ 	 |  ¡ }| tj¡rtW |  |¡ d S qb|  |¡ w )Nr   r  r  rà  r   rã  rè  r­  r  rä  r€  r  r`  )r!  r(  r  rl  rÐ  rû  rï  ÚSMB_COM_DELETEr  r­  rµ  r¦  r  r�  r  r  rî  râ  rÆ  rù  r  r8  r^   r^   r_   Úremove*  s*   

*

ûz
SMB.removec              	   C   sÌ   |  dd¡}|  |||¡ |  d| j d | |¡}zE| jtj@ r&| d¡n|}tƒ }||d< t	tj
ƒ}t| jd�|d< ||d d< | |¡ |  |¡ 	 |  ¡ }| tj
¡r_W |  |¡ d S qM|  |¡ w )	Nr   r  r  r  rà  r  rä  r  )r!  r9  r  rl  r�  rï  r  r  rÐ  rû  ÚSMB_COM_DELETE_DIRECTORYr  rî  râ  rÆ  rù  r  )rç   rù  r÷  rø  r€  rá  Ú	createDirr[  r^   r^   r_   ÚrmdirE  s&   


ûz	SMB.rmdirc              	   C   sÒ   |  dd¡}|  d| j d | |¡}zO| jtj@ r| d¡n|}tƒ }||d< d|d< ttj	ƒ}t
| jd�|d	< ||d	 d
< | |¡ |  |¡ |  ¡ }| tj	¡r[W |  |¡ dS W |  |¡ dS |  |¡ w )Nr   r  r  r  rà  r   rã  r  rä  r  r   )r!  r  rl  r�  rï  r  r  rÐ  rû  ÚSMB_COM_CREATE_DIRECTORYr  rî  râ  rÆ  rù  r  )rç   rù  r÷  rø  r€  rá  r=  r^   r^   r_   Úmkdir^  s$   


þz	SMB.mkdirc              	   C   s  |  dd¡}|  dd¡}|  d| j d | |¡}zmtƒ }||d< d|d< ttjƒ}tƒ |d< tt	B t
B |d d< t| jd	�|d
< | jtj@ rL| d¡n||d
 d< | jtj@ r]| d¡n||d
 d< | |¡ |  |¡ |  ¡ }| tj¡rW |  |¡ dS W |  |¡ dS |  |¡ w )Nr   r  r  rà  r   rã  rè  r­  r  rä  r  r#  r&  r   )r!  r  rl  rÐ  rû  rï  ÚSMB_COM_RENAMEr  rµ  r­  r³  r   r�  r  r  rî  râ  rÆ  rù  r  )rç   rù  Úold_pathÚnew_pathrø  r€  rá  Ú	renameCmdr^   r^   r_   Úrenamev  s*   

""

þz
SMB.renamec                 C   s˜   | j d tj@ r| jdu rd}n| j d d@ }|}	 t|ƒdkr#	 |S |d |… }||d … }|  ||||¡}t|d d ƒ}	t|	d	 ƒ}
||
d
 7 }q)Nr  FrH  r  rI  r   r   rä  rè  r�  )ro  rï  rR  rˆ  rë  rS  rû  r�  )rç   ÚtreeIdÚfileIdrZ  rL  rO  rT  Ú	writeDatará  rU  rV  r^   r^   r_   Ú	writeFile�  s   	ø÷zSMB.writeFilec                 C   s
   | j  ¡ S rê   )r~  Ú
get_socketrë   r^   r^   r_   rJ  ¤  r¨  zSMB.get_socketc                 C   sØ  t ƒ }||d< |dkrtd|ƒnd}ttjƒ}	tƒ |	d< | jd |	d d< ||	d d< ||	d d< t|ƒ|	d d	< t|ƒ|	d d
< ||	d d< d|	d d< tƒ |	d< dt|ƒ }
d|	d d< |
d dkrxdd|
d   |	d d< |
d|
d  7 }
t|ƒdkr…|
|	d d< nd|	d d< |
t|ƒ7 }
d|	d d< |
d dkr±dd|
d   |	d d< |
d|
d  7 }
t|ƒdkr¾|
|	d d< nd|	d d< t|ƒ|	d d< t|ƒ|	d d< ||	d d< ||	d d< | 	|	¡ |  
|¡ dS )aO  
        [MS-CIFS]: 2.2.4.62.1 SMB_COM_NT_TRANSACT request.
        :param tid:
        :param subcommand: The transaction subcommand code
        :param max_param_count:  This field MUST be set as specified in the subsections of Transaction subcommands.
        :param setup: Transaction context to the server, depends on transaction subcommand.
        :param param: Subcommand parameter bytes if any, depends on transaction subcommand.
        :param data: Subcommand data bytes if any, depends on transaction subcommand.
        :return: Buffer relative to requested subcommand.
        rà  r  ry  rè  r  r¶  rÄ  rÀ  r²  r´  rµ  r   r®  rä  éI   rÍ  r"   r€  rº  rÓ  r“  r¼  r¸  rÏ  rÕ  N)rÐ  r   rû  rï  ÚSMB_COM_NT_TRANSACTr¬  ro  rë  rÉ  rî  râ  )rç   r€  Ú
subcommandÚmax_param_countr1  r2  rZ  r
  Úsetup_bytesr4  rL  r^   r^   r_   Úsend_nt_trans§  sF   



zSMB.send_nt_transc              	   C   sf   | j |ddtd|d|ƒd� |  ¡ }| tj¡r1t|d d ƒ}t|d ƒ}|d |d  d	… S d	S )
a+  
        [MS-CIFS]: 2.2.7.6.1
        NT_TRANSACT_QUERY_SECURITY_DESC 0x0006
        :param tid: valid tree id.
        :param fid: valid file handle.
        :param additional_information: SecurityInfoFields. default = owner + group + dacl ie. 7
        :return: security descriptor buffer
        r1   r"   z<HHLr   )rM  rN  r2  rä  rè  r´  N)rP  r   rÆ  rù  rï  rL  rû  rÅ  )rç   r€  r�  Úadditional_informationr@  Únt_trans_responseÚnt_trans_parametersr^   r^   r_   Úquery_sec_infoâ  s   
	ÿüzSMB.query_sec_infoc                 C   sv   t ƒ }ttjƒ}tƒ |d< tƒ |d< ||d d< ||d d< | |¡ |  |¡ t|ƒD ]}|  	¡ }| 
tj¡ q,dS )Nrè  rä  r  T)rÐ  rû  rï  ÚSMB_COM_ECHOr  r  rî  râ  ÚrangerÆ  rù  )rç   Útextrï  rá  ÚcomEchor£  r@  r^   r^   r_   Úechoô  s   




zSMB.echor  )TNr  )r  r  r  r  r  NN)r  r  r  T)r  r  r  )r0   r   )r   Nr   )r   Nr   N)r   r   )r   r   FN)r  r   r   r   )r  Nrê   )r2   )r  r   )êrø   rù   rú   rà   r@  r?  r<  r"  ÚSMB_COM_CREATEr-  ÚSMB_COM_FLUSHr:  rA  ÚSMB_COM_QUERY_INFORMATIONÚSMB_COM_SET_INFORMATIONrä  rò  ÚSMB_COM_LOCK_BYTE_RANGEÚSMB_COM_UNLOCK_BYTE_RANGEÚSMB_COM_CREATE_TEMPORARYÚSMB_COM_CREATE_NEWr7  ÚSMB_COM_PROCESS_EXITÚSMB_COM_SEEKÚSMB_COM_LOCK_AND_READÚSMB_COM_WRITE_AND_UNLOCKrò  ÚSMB_COM_READ_MPXÚSMB_COM_READ_MPX_SECONDARYrý  ÚSMB_COM_WRITE_MPXÚSMB_COM_WRITE_MPX_SECONDARYÚSMB_COM_WRITE_COMPLETEÚSMB_COM_QUERY_SERVERÚSMB_COM_SET_INFORMATION2ÚSMB_COM_QUERY_INFORMATION2ÚSMB_COM_LOCKING_ANDXrð  ÚSMB_COM_TRANSACTION_SECONDARYÚSMB_COM_IOCTLÚSMB_COM_IOCTL_SECONDARYÚSMB_COM_COPYÚSMB_COM_MOVErU  ÚSMB_COM_WRITE_AND_CLOSEr+  rñ  rô  ÚSMB_COM_NEW_FILE_SIZEÚSMB_COM_CLOSE_AND_TREE_DISCr8  ÚSMB_COM_TRANSACTION2_SECONDARYÚSMB_COM_FIND_CLOSE2ÚSMB_COM_FIND_NOTIFY_CLOSErö  r  rç  r‘  r  r	  ÚSMB_COM_QUERY_INFORMATION_DISKÚSMB_COM_SEARCHÚSMB_COM_FINDÚSMB_COM_FIND_UNIQUEÚSMB_COM_FIND_CLOSErL  ÚSMB_COM_NT_TRANSACT_SECONDARYr  ÚSMB_COM_NT_CANCELÚSMB_COM_NT_RENAMEÚSMB_COM_OPEN_PRINT_FILEÚSMB_COM_WRITE_PRINT_FILEÚSMB_COM_CLOSE_PRINT_FILEÚSMB_COM_GET_PRINT_QUEUEÚSMB_COM_READ_BULKÚSMB_COM_WRITE_BULKÚSMB_COM_WRITE_BULK_DATAÚTRANS_TRANSACT_NMPIPEr  r  ÚTRANS2_QUERY_FS_INFORMATIONÚTRANS2_QUERY_PATH_INFORMATIONr>  rD  ÚTRANS2_SET_PATH_INFORMATIONr˜  r™  rb  ÚSECURITY_SIGNATURES_ENABLEDrë  ÚSECURITY_AUTH_MASKÚSECURITY_AUTH_ENCRYPTEDÚSECURITY_AUTH_PLAINTEXTÚRAW_READ_MASKÚRAW_WRITE_MASKrÚ  ÚCAP_MPX_MODEr“  ÚCAP_LARGE_FILESrê  r’  ÚCAP_NT_SMBSrJ  rR  ÚCAP_RPC_REMOTE_APISÚFLAGS1_LOCK_AND_READ_OKr‹  rŒ  ÚFLAGS1_REPLYr�  Ú
FLAGS2_EASrß  ÚFLAGS2_IS_LONG_NAMEÚ
FLAGS2_DFSÚFLAGS2_PAGING_IOr÷  r  ÚFLAGS2_COMPRESSEDÚ&FLAGS2_SMB_SECURITY_SIGNATURE_REQUIREDrŽ  ÚNEGOTIATE_USER_SECURITYÚNEGOTIATE_ENCRYPT_PASSWORDSÚ#NEGOTIATE_SECURITY_SIGNATURE_ENABLEÚ%NEGOTIATE_SECURITY_SIGNATURE_REQUIREDÚSMB_SUPPORT_SEARCH_BITSÚSMB_SHARE_IS_IN_DFSr   ÚTYPE_SERVERrá   r½  r¤  r¦  r¨  r©  r­  r®  r°  r³  r·  r¸  r   r¹  rº  r»  r¼  r¾  r¿  rÁ  rÆ  Ú_SMB__decode_transrÚ  rÜ  râ  rù  r—  ÚSERVICE_ANYrû  rý  r   r  Úconnect_treer  r  r  r  r  r  r  r  r*  r,  rÀ  r5  r<  ÚSMB_QUERY_FILE_STANDARD_INFOrC  rG  r-  r3  rX  rY  rZ  r\  r]  r^  r_  r`  ra  rc  rd  rò  rg  rµ  rÍ  rÎ  rÓ  rš  rÖ  rã  ræ  rK  rñ  ró  rS  rÿ  r  r  ÚFILE_SHARE_READÚFILE_SHARE_WRITEÚ	FILE_OPENr)  ÚFILE_WRITE_ATTRIBUTESr*  ÚFILE_WRITE_EAr+  ÚFILE_APPEND_DATAÚFILE_WRITE_DATAr  r  r(  r/  ÚFILE_OVERWRITE_IFr5  r6  r9  r;  r>  r@  rE  rI  rJ  rP  rT  rY  r^   r^   r^   r_   rï  ÷	  s¾   

ÿk


"

A!F
		!(+

 ) 
(S/6=0)W;rï  zInvalid functionzFile not foundzInvalid directoryzToo many open fileszAccess deniedz.Invalid file handle. Please file a bug report.zMemory control blocks destroyedzOut of memoryzInvalid memory block addresszInvalid environmentzInvalid formatzInvalid open modezInvalid datazInvalid drivez,Attempt to remove server's current directoryzNot the same devicezNo files foundzSharing mode conflicts detectedzLock request conflicts detectedzFile already exists)r   rI   rd   zNon-specific errorzBad passwordz&Invalid tid. Please file a bug report.zInvalid network namezInvalid devicerr   zPrint queue fullrb   r¿   zEOF on print queue dumprs   zInvalid print file handlez1Command not recognized. Please file a bug report.rt   zInternal server errorrc   zInvalid pathrv   zInvalid access permissionsrx   zInvalid attribute modery   zServer is pausedrz   zNot receiving messageszNo room to buffer messageszToo many remote user nameszOperation timeoutzOut of resourcesz.Invalid user handle. Please file a bug report.z3Temporarily unable to support raw mode for transferzContinue in MPX modezUnsupported function)	r{   re   r|   r}   r   r€   r�   r‚   rÖ   zMedia is write-protectedzUnknown unitzDrive not readyzUnknown commandz	CRC errorzBad requestz
Seek errorzUnknown media typezSector not foundzPrinter out of paperzWrite faultz
Read faultr´   z$Open conflicts with an existing openzInvalid lock requestzWrong disk in drivezFCBs not availablezSharing buffer exceeded(†  Ú
__future__r   r   rÝ  r’  Úbinasciir   r  Ústructr   r   r   r   rè  Úctypesr	   r
   Ú
contextlibr   Úpyasn1.type.univr   Úimpacketr   r   r   r   Úimpacket.structurer   Úimpacket.spnegor   r   r   r   r   r   Úimpacket.krb5.gssapir   rÔ  rÔ  rô  rõ  r  ÚSHARED_DISKÚSHARED_DISK_HIDDENÚSHARED_PRINT_QUEUEÚSHARED_DEVICEÚ
SHARED_IPCr¦  r©  r«  r­  r¯  r±  r³  rµ  ÚSERVICE_DISKÚSERVICE_PRINTERÚSERVICE_IPCÚSERVICE_COMMr§  ÚSV_TYPE_WORKSTATIONÚSV_TYPE_SERVERÚSV_TYPE_SQLSERVERÚSV_TYPE_DOMAIN_CTRLÚSV_TYPE_DOMAIN_BAKCTRLÚSV_TYPE_TIME_SOURCEÚSV_TYPE_AFPÚSV_TYPE_NOVELLÚSV_TYPE_DOMAIN_MEMBERÚSV_TYPE_PRINTQ_SERVERÚSV_TYPE_DIALIN_SERVERÚSV_TYPE_XENIX_SERVERÚ
SV_TYPE_NTÚSV_TYPE_WFWÚSV_TYPE_SERVER_NTÚSV_TYPE_POTENTIAL_BROWSERÚSV_TYPE_BACKUP_BROWSERÚSV_TYPE_MASTER_BROWSERÚSV_TYPE_DOMAIN_MASTERÚSV_TYPE_LOCAL_LIST_ONLYÚSV_TYPE_DOMAIN_ENUMÚSMB_O_CREATÚ
SMB_O_EXCLÚ
SMB_O_OPENÚSMB_O_TRUNCÚSMB_SHARE_COMPATÚSMB_SHARE_DENY_EXCLÚSMB_SHARE_DENY_WRITEÚSMB_SHARE_DENY_READEXECÚSMB_SHARE_DENY_NONEÚSMB_ACCESS_READÚSMB_ACCESS_WRITEÚSMB_ACCESS_READWRITEÚSMB_ACCESS_EXECÚTRANS_DISCONNECT_TIDr0  ÚSTATUS_SUCCESSÚSTATUS_LOGON_FAILUREÚSTATUS_LOGON_TYPE_NOT_GRANTEDÚMAX_TFRAG_SIZEÚEVASION_NONEÚEVASION_LOWÚEVASION_HIGHÚEVASION_MAXÚRPC_X_BAD_STUB_DATAÚSMB_FILE_ATTRIBUTE_NORMALr  r  r  ÚSMB_FILE_ATTRIBUTE_VOLUMEr  r  ÚSMB_SEARCH_ATTRIBUTE_READONLYÚSMB_SEARCH_ATTRIBUTE_HIDDENÚSMB_SEARCH_ATTRIBUTE_SYSTEMÚSMB_SEARCH_ATTRIBUTE_DIRECTORYÚSMB_SEARCH_ATTRIBUTE_ARCHIVEr½  rÛ  ÚSMB_INFO_ALLOCATIONÚSMB_INFO_VOLUMEÚFILE_FS_SIZE_INFORMATIONÚSMB_QUERY_FS_VOLUME_INFOÚSMB_QUERY_FS_SIZE_INFOÚSMB_QUERY_FILE_EA_INFOÚSMB_QUERY_FS_DEVICE_INFOÚSMB_QUERY_FS_ATTRIBUTE_INFOÚSMB_QUERY_FILE_BASIC_INFOr©  ÚSMB_QUERY_FILE_ALL_INFOÚSMB_QUERY_FILE_STREAM_INFOÚFILE_FS_FULL_SIZE_INFORMATIONÚSMB_INFO_STANDARDÚSMB_INFO_SET_EASÚSMB_SET_FILE_BASIC_INFOÚSMB_SET_FILE_DISPOSITION_INFOÚSMB_SET_FILE_ALLOCATION_INFOÚSMB_SET_FILE_END_OF_FILE_INFOÚFILE_DEVICE_BEEPÚFILE_DEVICE_CD_ROMÚFILE_DEVICE_CD_ROM_FILE_SYSTEMÚFILE_DEVICE_CONTROLLERÚFILE_DEVICE_DATALINKÚFILE_DEVICE_DFSÚFILE_DEVICE_DISKÚFILE_DEVICE_DISK_FILE_SYSTEMÚFILE_DEVICE_FILE_SYSTEMÚFILE_DEVICE_INPORT_PORTÚFILE_DEVICE_KEYBOARDÚFILE_DEVICE_MAILSLOTÚFILE_DEVICE_MIDI_INÚFILE_DEVICE_MIDI_OUTÚFILE_DEVICE_MOUSEÚFILE_DEVICE_MULTI_UNC_PROVIDERÚFILE_DEVICE_NAMED_PIPEÚFILE_DEVICE_NETWORKÚFILE_DEVICE_NETWORK_BROWSERÚFILE_DEVICE_NETWORK_FILE_SYSTEMÚFILE_DEVICE_NULLÚFILE_DEVICE_PARALLEL_PORTÚFILE_DEVICE_PHYSICAL_NETCARDÚFILE_DEVICE_PRINTERÚFILE_DEVICE_SCANNERÚFILE_DEVICE_SERIAL_MOUSE_PORTÚFILE_DEVICE_SERIAL_PORTÚFILE_DEVICE_SCREENÚFILE_DEVICE_SOUNDÚFILE_DEVICE_STREAMSÚFILE_DEVICE_TAPEÚFILE_DEVICE_TAPE_FILE_SYSTEMÚFILE_DEVICE_TRANSPORTÚFILE_DEVICE_UNKNOWNÚFILE_DEVICE_VIDEOÚFILE_DEVICE_VIRTUAL_DISKÚFILE_DEVICE_WAVE_INÚFILE_DEVICE_WAVE_OUTÚFILE_DEVICE_8042_PORTÚFILE_DEVICE_NETWORK_REDIRECTORÚFILE_DEVICE_BATTERYÚFILE_DEVICE_BUS_EXTENDERÚFILE_DEVICE_MODEMÚFILE_DEVICE_VDMÚFILE_REMOVABLE_MEDIAÚFILE_READ_ONLY_DEVICEÚFILE_FLOPPY_DISKETTEÚFILE_WRITE_ONCE_MEDIAÚFILE_REMOTE_DEVICEÚFILE_DEVICE_IS_MOUNTEDÚFILE_VIRTUAL_VOLUMEÚFILE_CASE_SENSITIVE_SEARCHÚFILE_CASE_PRESERVED_NAMESÚFILE_UNICODE_ON_DISKÚFILE_PERSISTENT_ACLSÚFILE_FILE_COMPRESSIONÚFILE_VOLUME_IS_COMPRESSEDÚSMB_FIND_CLOSE_AFTER_REQUESTr  r  ÚSMB_FIND_CONTINUE_FROM_LASTÚSMB_FIND_WITH_BACKUP_INTENTÚFILE_DIRECTORY_FILEÚFILE_DELETE_ON_CLOSEÚFILE_NON_DIRECTORY_FILEÚSMB_FIND_INFO_STANDARDÚSMB_FIND_FILE_DIRECTORY_INFOÚ!SMB_FIND_FILE_FULL_DIRECTORY_INFOÚSMB_FIND_FILE_NAMES_INFOr  Ú$SMB_FIND_FILE_ID_FULL_DIRECTORY_INFOÚ$SMB_FIND_FILE_ID_BOTH_DIRECTORY_INFOr,  r°  r¯  r+  r®  ÚFILE_EXECUTEr*  r­  ÚDELETEr)  Ú	WRITE_DACÚWRITE_OWNERÚSYNCHRONIZEÚACCESS_SYSTEM_SECURITYÚMAXIMUM_ALLOWEDÚGENERIC_ALLÚGENERIC_EXECUTEÚGENERIC_WRITEÚGENERIC_READÚFILE_SHARE_NONErª  r«  ÚFILE_SHARE_DELETEÚFILE_SUPERSEDEr¬  ÚFILE_CREATEÚFILE_OPEN_IFÚFILE_OVERWRITEr±  r`   rà   ra   r*  r3  r5  r6  r>  rc  re  rm  r~  r¿  rÉ  rÐ  rû  r  r  r  r  r  r&  r1  r3  r6  r;  r?  ra  rf  rg  rk  rl  rn  rv  r  r‚  r…  rŠ  r�  r‘  rž  r¦  rª  r«  r¯  r°  r±  r³  r¶  r·  r¸  r¹  r¼  r½  r¾  r¿  rÀ  rÁ  rÈ  rÉ  rÔ  rÛ  râ  rå  rï  rñ  rÜ  rõ  rø  rû  r  r  r  r%  r'  r)  r+  r0  r1  r;  r>  r@  rD  rH  rK  rV  rf  rl  rn  rt  ru  r  r†  r‡  r‹  r–  rš  r›  r�  rŸ  r£  r¤  r¥  r¦  r¬  rÅ  rÉ  rÖ  rà  rè  ré  rí  rð  rñ  rò  rõ  rö  r÷  rø  rü  rþ  rÿ  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r   r'  r(  r+  r,  r6  r8  r9  Úobjectrï  rX   rZ   r[   r^   r^   r^   r_   Ú<module>   sÞ  3   [[c	
;		
"
	
	


		
	
	



                
ÿþýüûúùø	÷
öõôóòñðí
ÿþýüûúùø	÷
öõôóòñðç
ÿþýüûúùø	÷
öõôóòñðï