
    zc4                        d dl Zd dlmZ ej        j        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Z#dZ$dZ%d Z&dZ'dZ( G d dej)                  Z*d Z+d Z,d Z- ej.        d          Z/e/j0        Z0ej        j1        e0_2        e+e0_3        ej        j4        eej        j5        ej        j1        ej        j5         ej6        ej        j5                   ej6        e*          efe0_7        e/j8        Z8ej        j4        e8_2        e,e8_3        ej        j9        ej        j5        ej        j5        eej        j5        ej        j5        ej        j4        fe8_7        e/j:        Z:ej        j1        e:_2        ej        j4        fe:_7        e/j;        Z;ej        j1        e;_2        e+e;_3        ej        j4         ej6        e*          fe;_7        e/j<        Z=ej        j4        e=_2        e,e=_3        eej        j1        ej        j1        ej        j9        fe=_7        e/j>        Z>ej        j1        e>_2        e+e>_3        ej        j4        fe>_7        e/j?        Z?ej        j5        e?_2        e-e?_3        ej        j4        ej        j5        ej        j1        fe?_7        e/j@        Z@ej        j4        e@_2        e,e@_3        ej        j4        ej        j4        eej        j5        fe@_7        e/jA        ZAej        j1        eA_2        e+eA_3        ej        j4        ee ej6        e*          ej        j5        feA_7        e/jB        ZBej        j1        eB_2        e+eB_3        ej        j4        ej        j5        ej        j5         ej6        e*          feB_7        e/jC        ZCej        j5        eC_2        e-eC_3        ej        j4        ej        jD        ej        j5        ej        j5        feC_7         G d dej)                  ZE ej6        eE          ZFeZG ed eeeg          ZH ed e	e
eeeeeeg          ZId ZJd!ZKd" ZLd# ZMd$ ZNd% ZOd& ZPd' ZQ G d( d)          ZRd* ZSdS )+    N)reduce                   @      i   i   @      i  i        i  i  c                   r    e Zd Zdefdefdej        j        fdej        j        fdefdej        j        fgZdS )
OVERLAPPEDInternalInternalHighOffset
OffsetHighPointerhEventN)	__name__
__module____qualname__LPVOIDctypeswintypesDWORDHANDLE_fields_     9lib/python3.11/site-packages/watchdog/observers/winapi.pyr   r   \   sT        V$(6?01v45F#6?12HHHr#   r   c                 0    | st          j                    |S Nr   WinErrorvaluefuncargss      r$   _errcheck_boolr-   f   s      oKr#   c                 l    | st          j                    | t          k    rt          j                    |S r&   )r   r(   INVALID_HANDLE_VALUEr)   s      r$   _errcheck_handler0   l   s9      o$$  oKr#   c                 8    | dk    rt          j                    |S )Nl    r'   r)   s      r$   _errcheck_dwordr2   t   s"    
  oKr#   kernel32c                   v    e Zd Zdej        j        fdej        j        fdej        j        fdej        dz  fgZdS )FILE_NOTIFY_INFORMATIONNextEntryOffsetActionFileNameLengthFileNamer   N)r   r   r   r   r   r   c_charr!   r"   r#   r$   r5   r5      sK        "FO$9:6?01!6?#89fma/1	3HHHr#   r5   c                     | |z  S r&   r"   xys     r$   <lambda>r?      
    Q r#   c                     | |z  S r&   r"   r<   s     r$   r?   r?      r@   r#   i   i   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)r   castLPFNI	addressofr5   r9   offset	string_atr8   appendr7   decoder6   )
readBuffernBytesresultsfniptrfilename	numToSkips          r$   _parse_event_bufferrQ     s    G
1* 
k*e,,Q/s##&=&F&MM#C);<<
HOOH$=$=>???'	> 		

+
) 1* 
 Nr#   c                     t          j        t                    }t          | |t          t                     |j        |k    S r&   )r   create_unicode_bufferPATH_BUFFER_SIZEGetFinalPathNameByHandleWVOLUME_NAME_NTr*   )handlepathbuffs      r$   _is_observed_path_deletedrZ   '  s7     '(899Dfd,<nMMM:r#   c                  T   t          j        d          } t          dt          t	          |           | j                            d                    }t          j        |          }t          j        t                    }t          j
        |t          j        |          |           ||fS )N.r   zutf-8)r   rS   r5   FILE_ACTION_DELETED_SELFlenr*   encodesizeofcreate_string_bufferrT   memmoverE   )rX   event
event_sizerY   s       r$   %_generate_observed_path_deleted_eventre   0  s    ',,D#A'?TDJL]L]^eLfLfggEu%%J&'788D
N4)%00*===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)rX   s    r$   get_directory_handlerl   :  s)    t02K],?G G Gr#   c                     	 t          | d            t          |            d S # t          $ r& 	 t          |            Y d S # t          $ r Y Y d S w xY ww xY wr&   )
CancelIoExCloseHandleOSError	Exception)rW   s    r$   close_directory_handlerr   @  s    64   F   	 	 	 	FFF	s&   # 
AA  
A
AAAc           
         t          j        t                    }t           j                                        }	 t          | t          j        |          t          |          |t          t          j        |          dd           nP# t          $ rC}|j
        t          k    r	g 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.

    http://timgolden.me.uk/pywin32-docs/win32file__ReadDirectoryChangesW_meth.html
    Nr   )r   ra   BUFFER_SIZEr   r   ReadDirectoryChangesWbyrefr^   WATCHDOG_FILE_NOTIFY_FLAGSrp   winerrorERROR_OPERATION_ABORTEDrZ   re   rawintr*   )rW   rX   	recursiveevent_buffernbyteses         r$   read_directory_changesr   K  s   
 .{;;L_""$$Fffl<&@&@!,//8$l622D$	@ 	@ 	@ 	@    :00 	q5LLLLLL %VT22 	;8:::::::: S....s0   AB 
CC#C)CCCCc                       e Zd Zd Zed             Zed             Zed             Zed             Zed             Z	ed             Z
d Zd	S )
WinAPINativeEventc                 "    || _         || _        d S r&   )actionsrc_path)selfr   r   s      r$   __init__zWinAPINativeEvent.__init__e  s     r#   c                 "    | j         t          k    S r&   )r   FILE_ACTION_CREATEDr   s    r$   is_addedzWinAPINativeEvent.is_addedi      {111r#   c                 "    | j         t          k    S r&   )r   FILE_ACTION_REMOVEDr   s    r$   
is_removedzWinAPINativeEvent.is_removedm  r   r#   c                 "    | j         t          k    S r&   )r   FILE_ACTION_MODIFIEDr   s    r$   is_modifiedzWinAPINativeEvent.is_modifiedq  s    {222r#   c                 "    | j         t          k    S r&   )r   FILE_ACTION_RENAMED_OLD_NAMEr   s    r$   is_renamed_oldz WinAPINativeEvent.is_renamed_oldu      {:::r#   c                 "    | j         t          k    S r&   )r   FILE_ACTION_RENAMED_NEW_NAMEr   s    r$   is_renamed_newz WinAPINativeEvent.is_renamed_newy  r   r#   c                 "    | j         t          k    S r&   )r   FILE_ACTION_REMOVED_SELFr   s    r$   is_removed_selfz!WinAPINativeEvent.is_removed_self}  s    {666r#   c                 J    dt          |           j        | j        | j        fz  S )Nz<%s: action=%d, src_path=%r>)typer   r   r   r   s    r$   __repr__zWinAPINativeEvent.__repr__  s+    .T

#T[$-2A A 	Br#   N)r   r   r   r   propertyr   r   r   r   r   r   r   r"   r#   r$   r   r   d  s        ! ! ! 2 2 X2 2 2 X2 3 3 X3 ; ; X; ; ; X; 7 7 X7B B B B Br#   r   c                 b    t          | ||          \  }}t          ||          }d |D             S )Nc                 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   rQ   )rW   rX   r|   bufr~   eventss         r$   read_eventsr     s:    (yAAKC f--FOOOOOOr#   )Tctypes.wintypesr   	functoolsr   r   r   c_void_pr*   r/   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_OVERLAPPEDrh   FILE_SHARE_READFILE_SHARE_WRITEFILE_SHARE_DELETErj   rV   r   FILE_ACTION_DELETEDr   r   r   r]   FILE_ACTION_OVERFLOWFILE_ACTION_ADDEDr   r   THREAD_TERMINATEWAIT_ABANDONEDWAIT_IO_COMPLETIONWAIT_OBJECT_0WAIT_TIMEOUTry   	Structurer   r-   r0   r2   WinDLLr3   ru   BOOLrestypeerrcheckr    r   POINTERargtypesrg   LPCWSTRro   rn   CreateEventWCreateEventSetEventWaitForSingleObjectExCreateIoCompletionPortGetQueuedCompletionStatusPostQueuedCompletionStatusrU   LPWSTRr5   rD   rk   ri   rw   rt   rT   rQ   rZ   re   rl   rr   r   r   r   r"   r#   r$   <module>r      s  L          		 'vr**0   $ "  $   % !& # $ ' !            !   ( ) 3          !          6=$$ 6  & 4  !/  
O

O
O
OFN6?())FN:
	"   "o, ' 
O
O
O

O
O
O  "o* 
O   
_)
 $
 
OFN:
 
 #o, ' 

O
O
O	  ?' " 
O  !6  & 5  !0  
O
O
O"   "8 !'!7  "2  
O
O

O	#   %> $*O$8  !%3  "
O

FN:
O&  " &@ %+_%9  "&4  #
O
O
OFN:	'  # %> $*O$9  !%4  "
O
O
O
O	&  "3 3 3 3 3f. 3 3 3 	.//
 1 "F   $V$#%%#&#	
 
 $          G G G  / / /2B B B B B B B BDP P P P Pr#   