o
    e
$                     @   s   d dl Z e jdkredd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
dddZd 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 Zd$ddZ		d%ddZe
je
je
je
jgZdS )&    Nwin32zIntended to use only on Windowsc              
   C   sT   zt |  W d S  tjy) } z|d ur|d|j  |jW  Y d }~S d }~ww )Nzfailed to close handle: %s)	win32fileCloseHandle
pywintypeserrorstrerrorwinerror)handleloggere r   ./usr/lib/python3/dist-packages/ovs/winutils.pyclose_handle   s   
r   c                 C   sP   | dkrt  } d| _|d u rd}zt| |\}}W ||fS  tjy'    w )Nr      r   )win32securitySECURITY_ATTRIBUTESbInheritHandle	win32pipe
CreatePiper   r   )sAttrsnSize	read_pipe
write_piper   r   r   windows_create_pipe(   s   r   c              
   C   sL   zt | |\}}||fW S  tjy% } z|jdfW  Y d }~S d }~ww N r   ReadFiler   r   r   )fdlengthr   datar   r   r   r   windows_read_pipe9   s   
r"   c              	   C   s   |d u r
t jt jB }|d u rd}|dkrd }|d u rt j}|d u r*t jt jB t jB }|dkr0d }zt | ||||||}W |S  tj	yG    w )Nr   r   )
r   GENERIC_READGENERIC_WRITEOPEN_EXISTINGFILE_ATTRIBUTE_NORMALFILE_FLAG_OVERLAPPEDFILE_FLAG_NO_BUFFERING
CreateFiler   r   )filenamedesiredAccess	shareMode
attributesCreationDispositionflagsAndAttributeshTemplateFilenpiper   r   r   create_fileA   s:   	r2   c              
   C   N   zt | ||\}}||fW S  tjy& } z|jdfW  Y d }~S d }~ww )Nr   )r   	WriteFiler   r   r   )r	   r!   
overlappederrCodenBytesWrittenr   r   r   r   
write_fileb   s   
r8   c              
   C   r3   r   r   )r	   bufsizer5   r6   read_bufferr   r   r   r   	read_filen   s   
r;   c              
   C   s  |d u r
t jt jB }|d u rt jt jB t jB }|d u rd}|d u r#d}|d u r)d}|d u r/d}|dkrt }tj	}t
 }	|	|d |	dtj g }
t
 }||d |dtj t
 }||d |dtj |dtj |
| |
| t }|  |tjtj|	 |
D ]}|tjtj| qt }|  |d|d d|_||_zt| |||||||}|tjkrW d S |W S  tjy   Y d S w )	N@   i  r   r   r      TF) win32conPIPE_ACCESS_DUPLEXr'   PIPE_TYPE_MESSAGEPIPE_READMODE_BYTE	PIPE_WAITr   r   ntsecurityconSECURITY_NT_AUTHORITYSID
InitializeSetSubAuthoritySECURITY_NETWORK_RIDSECURITY_LOCAL_SYSTEM_RIDSECURITY_BUILTIN_DOMAIN_RIDDOMAIN_ALIAS_RID_ADMINSappendACLAddAccessDeniedAceACL_REVISIONGENERIC_ALLAddAccessAllowedAceSECURITY_DESCRIPTORSetSecurityDescriptorDaclr   r   CreateNamedPiper   INVALID_HANDLE_VALUEr   r   )pipenameopenModepipeModenMaxInstancesnOutBufferSizenInBufferSizenDefaultTimeOutsaAttrsiaremoteAccessSidallowedPsidsallowedPsid_0allowedPsid_1aclallowedPsidsdr1   r   r   r   create_named_pipey   s   


	rf   c                 C   s8   |dkrt j}zt | ||| W d S  tjy    w )Nr   )r   rA   SetNamedPipeHandleStater   r   )hPipemodemaxCollectionCountcollectDataTimeoutr   r   r   set_pipe_mode   s   
rl   c              
   C   s@   z	t | |}|W S  tjy } z	|jW  Y d }~S d }~ww N)r   ConnectNamedPiper   r   r   )pipe_handler5   r   r   r   r   r   connect_named_pipe   s   rp   c                 C   s$   |  dd} |  dd} d|  } | S )N/r   \z	\\.\pipe\)replace)namer   r   r   get_pipe_name   s   ru   Fc                 C   s$   zt | ||W S  tjy    w rm   )r   GetOverlappedResultr   r   )r	   r5   bWaitr   r   r   get_overlapped_result   s
   rx   Tc                 C   s   t | |||S rm   )
win32eventCreateEvent)sabManualResetbInitialState
objectNamer   r   r   get_new_event  s   r   rm   )r   N)NNr   NNr   )NNNNNNr   )r   NN)NF)NTTN)sysplatform	ExceptionrC   r   r>   ry   r   r   r   r   r   r   r"   r2   r8   r;   rf   rl   rp   ru   rx   r   ERROR_PIPE_NOT_CONNECTEDERROR_BAD_PIPEERROR_NO_DATAERROR_BROKEN_PIPEpipe_disconnected_errorsr   r   r   r   <module>   sN   





!

d



