
    $gs-                       d Z ddlmZ ddlZddlZddlmZmZmZm	Z	m
Z
mZ ddlmZ ddlmZ ddlmZ erddlmZ  ej        d	          j        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,e&Z-e'Z.e+Z/d
Z0dZ1dZ2dZ3dZ4dZ5 G d dej6                  Z7dGd$Z8dGd%Z9dGd&Z: ej;        d'          Z<e<j=        Z=ee=_>        e8e=_?        ee
eee ej@        e           ej@        e7          e
fe=_A        e<jB        ZBeeB_>        e9eB_?        e	eee
eeefeB_A        e<jC        ZCeeC_>        efeC_A        e<jD        ZDeeD_>        e8eD_?        e ej@        e7          feD_A        e<jE        ZFeeF_>        e9eF_?        e
eee	feF_A        e<jG        ZGeeG_>        e8eG_?        efeG_A        e<jH        ZHeeH_>        e:eH_?        eeefeH_A        e<jI        ZIeeI_>        e9eI_?        eee
efeI_A        e<jJ        ZJeeJ_>        e8eJ_?        ee
e
 ej@        e7          efeJ_A        e<jK        ZKeeK_>        e8eK_?        eee ej@        e7          feK_A        e<jL        ZLeeL_>        e:eL_?        eeeefeL_A         G d( d)ej6                  ZM ej@        eM          ZNeZO ed* e!e"e#g          ZP ed+ eeeeeeeeg          ZQd,ZRd-ZSdHd3ZTdId9ZUdJd;ZVdKd<ZWdLd>ZXdMd@ZY edAB           G dC dD                      ZZdNdFZ[dS )Ou  :module: watchdog.observers.winapi
:synopsis: Windows API-Python interface (removes dependency on ``pywin32``).
:author: theller@ctypes.org (Thomas Heller)
:author: will@willmcgugan.com (Will McGugan)
:author: ryan@rfk.id.au (Ryan Kelly)
:author: yesudeep@gmail.com (Yesudeep Mangalapilly)
:author: thomas.amland@gmail.com (Thomas Amland)
:author: contact@tiger-222.fr (Mickaël Schoentgen)
:platforms: windows
    )annotationsN)BOOLDWORDHANDLELPCWSTRLPVOIDLPWSTR)	dataclass)reduce)TYPE_CHECKING)Any                   @      i   i   @      i  i        i  i  c                  6    e Zd ZdefdefdefdefdefdeffZdS )
OVERLAPPEDInternalInternalHighOffset
OffsetHighPointerhEventN)__name__
__module____qualname__r   r   r   _fields_     Y/var/www/html/netbox-4.1.3/venv/lib/python3.11/site-packages/watchdog/observers/winapi.pyr   r   I   sE        	V	 	5	u	F	6HHHr(   r   value
Any | Nonefuncr   argsreturnc                0    | st          j                    |S NctypesWinErrorr*   r,   r-   s      r)   _errcheck_boolr5   T   s      oKr(   c                l    | st          j                    | t          k    rt          j                    |S r0   )r2   r3   INVALID_HANDLE_VALUEr4   s      r)   _errcheck_handler8   Z   s7      o$$$oKr(   c                8    | dk    rt          j                    |S )Nl    r1   r4   s      r)   _errcheck_dwordr:   b   s     
oKr(   kernel32c                  :    e Zd Zdefdefdefdej        dz  ffZdS )FileNotifyInformationNextEntryOffsetActionFileNameLengthFileNamer   N)r#   r$   r%   r   r2   c_charr&   r'   r(   r)   r=   r=      s<        	E"	5	5!	fma')	HHHr(   r=   c                    | |z  S r0   r'   xys     r)   <lambda>rG      
    Q r(   c                    | |z  S r0   r'   rD   s     r)   rG   rG      rH   r(   i   i   read_bufferbytesn_bytesintlist[tuple[int, str]]c                z   g }|dk    rt          j        | t                    d         }t          j        |          t          j        j        z   }t          j        ||j                  }|	                    |j
        |                    d          f           |j        }|dk    rn| |d          } ||z  }|dk    |S )Nr   zutf-16)r2   castLPFNI	addressofr=   rA   offset	string_atr@   appendr?   decoder>   )rJ   rL   resultsfniptrfilenamenum_to_skips          r)   _parse_event_bufferr\     s    G
A++k+u--a0s##&;&D&KK#C);<<
HOOH$=$=>???)!!+,,/; A++ Nr(   handler   pathstrboolc                    t          j        t                    }t          | |t          t                     |j        |k    S r0   )r2   create_unicode_bufferPATH_BUFFER_SIZEGetFinalPathNameByHandleWVOLUME_NAME_NTr*   )r]   r^   buffs      r)   _is_observed_path_deletedrg     s7     '(899Dfd,<nMMM:r(   tuple[bytes, int]c                 ^   t          j        d          } t          dt          t	          |           | j                            d                    }t          j        |          }t          j        t                    }t          j
        |t          j        |          |           |j        |fS )N.r   zutf-8)r2   rb   r=   FILE_ACTION_DELETED_SELFlenr*   encodesizeofcreate_string_bufferrc   memmoverR   raw)r^   event
event_sizerf   s       r)   %_generate_observed_path_deleted_eventrt     s    ',,D!!%=s4yy$*J[J[\cJdJdeeEu%%J&'788D
N4)%00*===8Zr(   c           	     T    t          | t          t          dt          t          d          S )z9Returns a Windows handle to the specified directory path.N)CreateFileWFILE_LIST_DIRECTORYWATCHDOG_FILE_SHARE_FLAGSOPEN_EXISTINGWATCHDOG_FILE_FLAGS)r^   s    r)   get_directory_handler{   (  s)    !  r(   Nonec                    	 t          | d            t          |            d S # t          $ rF t          j        t
                    5  t          |            d d d            Y d S # 1 swxY w Y   Y d S w xY wr0   )
CancelIoExCloseHandleOSError
contextlibsuppress	Exception)r]   s    r)   close_directory_handler   5  s     64   F       ++ 	  	 	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  s3   # #A3A$A3$A(	(A3+A(	,A32A3	recursivec          
        t          j        t                    }t                      }	 t	          | t          j        |          t          |          |t          t          j        |          dd           nT# t          $ rG}|j	        t          k    r|j        dfcY d}~S t          | |          rt                      cY d}~S  d}~ww xY w|j        t          |j                  fS )zRead changes to the directory using the specified directory handle.

    https://timgolden.me.uk/pywin32-docs/win32file__ReadDirectoryChangesW_meth.html
    Nr   )r2   ro   BUFFER_SIZEr   ReadDirectoryChangesWbyrefrl   WATCHDOG_FILE_NOTIFY_FLAGSr   winerrorERROR_OPERATION_ABORTEDrq   rg   rt   rM   r*   )r]   r^   r   event_buffernbyteses         r)   read_directory_changesr   >  s   
 .{;;LWWFL&&&L  		
 		
 		
 		
    :000#Q&&&&&&& %VT22 	;8:::::::: S....s0   AA6 6
C CCC;CCCT)unsafe_hashc                      e Zd ZU ded<   ded<   edd            Zedd            Zedd	            Zedd
            Zedd            Z	edd            Z
dS )WinAPINativeEventrM   actionr_   src_pathr.   r`   c                "    | j         t          k    S r0   )r   FILE_ACTION_CREATEDselfs    r)   is_addedzWinAPINativeEvent.is_addedb      {111r(   c                "    | j         t          k    S r0   )r   FILE_ACTION_REMOVEDr   s    r)   
is_removedzWinAPINativeEvent.is_removedf  r   r(   c                "    | j         t          k    S r0   )r   FILE_ACTION_MODIFIEDr   s    r)   is_modifiedzWinAPINativeEvent.is_modifiedj  s    {222r(   c                "    | j         t          k    S r0   )r   FILE_ACTION_RENAMED_OLD_NAMEr   s    r)   is_renamed_oldz WinAPINativeEvent.is_renamed_oldn      {:::r(   c                "    | j         t          k    S r0   )r   FILE_ACTION_RENAMED_NEW_NAMEr   s    r)   is_renamed_newz WinAPINativeEvent.is_renamed_newr  r   r(   c                "    | j         t          k    S r0   )r   FILE_ACTION_REMOVED_SELFr   s    r)   is_removed_selfz!WinAPINativeEvent.is_removed_selfv  s    {666r(   N)r.   r`   )r#   r$   r%   __annotations__propertyr   r   r   r   r   r   r'   r(   r)   r   r   ]  s         KKKMMM2 2 2 X2 2 2 2 X2 3 3 3 X3 ; ; ; X; ; ; ; X; 7 7 7 X7 7 7r(   r   list[WinAPINativeEvent]c               d    t          | ||          \  }}t          ||          }d |D             S )N)r   c                4    g | ]\  }}t          ||          S r'   )r   ).0r   r   s      r)   
<listcomp>zread_events.<locals>.<listcomp>~  s(    OOO4DFHfh//OOOr(   )r   r\   )r]   r^   r   bufr   eventss         r)   read_eventsr   {  s=    (KKKKC f--FOOOOOOr(   )r*   r+   r,   r   r-   r   r.   r   )rJ   rK   rL   rM   r.   rN   )r]   r   r^   r_   r.   r`   )r.   rh   )r^   r_   r.   r   )r]   r   r.   r|   )r]   r   r^   r_   r   r`   r.   rh   )r]   r   r^   r_   r   r`   r.   r   )\__doc__
__future__r   r   r2   ctypes.wintypesr   r   r   r   r   r	   dataclassesr
   	functoolsr   typingr   r   c_void_pr*   r7   FILE_NOTIFY_CHANGE_FILE_NAMEFILE_NOTIFY_CHANGE_DIR_NAMEFILE_NOTIFY_CHANGE_ATTRIBUTESFILE_NOTIFY_CHANGE_SIZEFILE_NOTIFY_CHANGE_LAST_WRITEFILE_NOTIFY_CHANGE_LAST_ACCESSFILE_NOTIFY_CHANGE_CREATIONFILE_NOTIFY_CHANGE_SECURITYFILE_FLAG_BACKUP_SEMANTICSFILE_FLAG_OVERLAPPEDrw   FILE_SHARE_READFILE_SHARE_WRITEFILE_SHARE_DELETEry   re   r   FILE_ACTION_DELETEDr   r   r   rk   FILE_ACTION_OVERFLOWFILE_ACTION_ADDEDr   r   THREAD_TERMINATEWAIT_ABANDONEDWAIT_IO_COMPLETIONWAIT_OBJECT_0WAIT_TIMEOUTr   	Structurer   r5   r8   r:   WinDLLr;   r   restypeerrcheckPOINTERargtypesrv   r   r~   CreateEventWCreateEventSetEventWaitForSingleObjectExCreateIoCompletionPortGetQueuedCompletionStatusPostQueuedCompletionStatusrd   r=   rQ   rz   rx   r   r   rc   r\   rg   rt   r{   r   r   r   r   r'   r(   r)   <module>r      s  	 	 # " " " " "      H H H H H H H H H H H H H H H H ! ! ! ! ! !                    'vr**0   $ "  $   % !& # $ ' !            !   ( ) 3          !             6=$$ 6  $  !/  

		FN5FN:
	"   " ' 		
		
  " y  

 $
 
FN:
 
 # ' 
	   " I  6  %  !0  
	"   "8 !'  "2  


		#   %> $(  !%3  "


FN:	&  " &@ %)  "&4  #
		FN:	'  # %> $)  !%4  "

			&  "    F,    	,--
 1 "F   $V$#%%#&#	  (                
 
 
 
       / / / /> t7 7 7 7 7 7 7 7:P P P P P Pr(   