o
    hs-                  
   @  sl  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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Z5G dd dej6Z7dRd$d%Z8dRd&d'Z9dRd(d)Z:e;d*Z<e<j=Z=ee=_>e8e=_?ee
eeee@ee@e7e
fe=_Ae<jBZBeeB_>e9eB_?e	eee
eeefeB_Ae<jCZCeeC_>efeC_Ae<jDZDeeD_>e8eD_?ee@e7feD_Ae<jEZFeeF_>e9eF_?e
eee	feF_Ae<jGZGeeG_>e8eG_?efeG_Ae<jHZHeeH_>e:eH_?eeefeH_Ae<jIZIeeI_>e9eI_?eee
efeI_Ae<jJZJeeJ_>e8eJ_?ee
e
e@e7efeJ_Ae<jKZKeeK_>e8eK_?eeee@e7feK_Ae<jLZLeeL_>e:eL_?eeeefeL_AG d+d, d,ej6ZMe@eMZNeZOed-d. e!e"e#gZPed/d. eeeeeeeegZQd0ZRd1ZSdSd7d8ZTdTd>d?ZUdUdAdBZVdVdCdDZWdWdFdGZXdXdIdJZYedKdLG dMdN dNZZdYdPdQZ[dS )Zu  :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                   @  s4   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_ r%   r%   M/var/www/vscode/kcb/lib/python3.10/site-packages/watchdog/observers/winapi.pyr   I   s    r   value
Any | Nonefuncr   argsreturnc                 C  s   | st  |S NctypesWinErrorr'   r)   r*   r%   r%   r&   _errcheck_boolT   s   r1   c                 C  s    | st  | tkrt  |S r,   )r.   r/   INVALID_HANDLE_VALUEr0   r%   r%   r&   _errcheck_handleZ   s
   r3   c                 C  s   | dkrt  |S )Nl    r-   r0   r%   r%   r&   _errcheck_dwordb   s   r4   kernel32c                   @  s.   e Zd Zdefdefdefdejd ffZdS )FileNotifyInformationNextEntryOffsetActionFileNameLengthFileNamer   N)r!   r"   r#   r   r.   c_charr$   r%   r%   r%   r&   r6      s    r6   c                 C     | |B S r,   r%   xyr%   r%   r&   <lambda>       r@   c                 C  r<   r,   r%   r=   r%   r%   r&   r@      rA   i   i   read_bufferbytesn_bytesintlist[tuple[int, str]]c                 C  s   g }|dkrAt | td }t |tjj }t ||j}|	|j
|df |j}|dkr3	 |S | |d  } ||8 }|dks|S )Nr   zutf-16)r.   castLPFNI	addressofr6   r:   offset	string_atr9   appendr8   decoder7   )rB   rD   resultsfniptrfilenamenum_to_skipr%   r%   r&   _parse_event_buffer  s   
rS   handler   pathstrboolc                 C  s"   t t}t| |tt |j|kS r,   )r.   create_unicode_bufferPATH_BUFFER_SIZEGetFinalPathNameByHandleWVOLUME_NAME_NTr'   )rT   rU   buffr%   r%   r&   _is_observed_path_deleted  s   

r]   tuple[bytes, int]c                  C  sV   t d} tdtt| | jd}t |}t t	}t 
|t || |j|fS )N.r   zutf-8)r.   rX   r6   FILE_ACTION_DELETED_SELFlenr'   encodesizeofcreate_string_bufferrY   memmoverI   raw)rU   event
event_sizer\   r%   r%   r&   %_generate_observed_path_deleted_event  s   



ri   c                 C  s   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)rU   r%   r%   r&   get_directory_handle(  s   ro   Nonec                 C  sd   zt | d  t|  W d S  ty1   tt t|  W d    Y d S 1 s)w   Y  Y d S w r,   )
CancelIoExCloseHandleOSError
contextlibsuppress	Exception)rT   r%   r%   r&   close_directory_handle5  s   

&rw   	recursivec             
   C  s   t t}t }zt| t |t||tt |dd W n+ tyH } z|j	t
kr5|jdfW  Y d}~S t| |rCt W  Y d}~S  d}~w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   )r.   rd   BUFFER_SIZEr   ReadDirectoryChangesWbyrefra   WATCHDOG_FILE_NOTIFY_FLAGSrs   winerrorERROR_OPERATION_ABORTEDrf   r]   ri   rE   r'   )rT   rU   rx   event_buffernbyteser%   r%   r&   read_directory_changes>  s,   




r   T)unsafe_hashc                   @  sr   e Zd ZU ded< ded< edddZedd	d
ZedddZedddZedddZ	edddZ
dS )WinAPINativeEventrE   actionrV   src_pathr+   rW   c                 C  
   | j tkS r,   )r   FILE_ACTION_CREATEDselfr%   r%   r&   is_addedb     
zWinAPINativeEvent.is_addedc                 C  r   r,   )r   FILE_ACTION_REMOVEDr   r%   r%   r&   
is_removedf  r   zWinAPINativeEvent.is_removedc                 C  r   r,   )r   FILE_ACTION_MODIFIEDr   r%   r%   r&   is_modifiedj  r   zWinAPINativeEvent.is_modifiedc                 C  r   r,   )r   FILE_ACTION_RENAMED_OLD_NAMEr   r%   r%   r&   is_renamed_oldn  r   z WinAPINativeEvent.is_renamed_oldc                 C  r   r,   )r   FILE_ACTION_RENAMED_NEW_NAMEr   r%   r%   r&   is_renamed_newr  r   z WinAPINativeEvent.is_renamed_newc                 C  r   r,   )r   FILE_ACTION_REMOVED_SELFr   r%   r%   r&   is_removed_selfv  r   z!WinAPINativeEvent.is_removed_selfN)r+   rW   )r!   r"   r#   __annotations__propertyr   r   r   r   r   r   r%   r%   r%   r&   r   ]  s   
 r   list[WinAPINativeEvent]c                C  s*   t | ||d\}}t||}dd |D S )N)rx   c                 S  s   g | ]	\}}t ||qS r%   )r   ).0r   r   r%   r%   r&   
<listcomp>~  s    zread_events.<locals>.<listcomp>)r   rS   )rT   rU   rx   bufr   eventsr%   r%   r&   read_events{  s   
r   )r'   r(   r)   r   r*   r   r+   r   )rB   rC   rD   rE   r+   rF   )rT   r   rU   rV   r+   rW   )r+   r^   )rU   rV   r+   r   )rT   r   r+   rp   )rT   r   rU   rV   rx   rW   r+   r^   )rT   r   rU   rV   rx   rW   r+   r   )\__doc__
__future__r   rt   r.   ctypes.wintypesr   r   r   r   r   r   dataclassesr	   	functoolsr
   typingr   r   c_void_pr'   r2   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_OVERLAPPEDrk   FILE_SHARE_READFILE_SHARE_WRITEFILE_SHARE_DELETErm   r[   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_TIMEOUTr~   	Structurer   r1   r3   r4   WinDLLr5   rz   restypeerrcheckPOINTERargtypesrj   rr   rq   CreateEventWCreateEventSetEventWaitForSingleObjectExCreateIoCompletionPortGetQueuedCompletionStatusPostQueuedCompletionStatusrZ   r6   rH   rn   rl   r|   ry   rY   rS   r]   ri   ro   rw   r   r   r   r%   r%   r%   r&   <module>   sJ    





	


	



	