o
    ç÷¡gÄ+  ã                   @   s¼  d Z ddlZddlZddlmZ dd„ ZG dd„ dejƒZdd	„ Zd
Z	ej
jjZejjejfe_ejje_ej
jjZejjfe_ejje_ej
jjZejjfe_ejje_ej
jjZejjfe_eje_ej
jjZejjejejjejjejjejjge_ejje_ej
jjZejje_ej
jjZejjfe_ej
jj Z ejejejfe _ejj!fej
jj"_G dd„ dƒZ#dZ$dZ%e$Z&e$Z'e$Z(dZ)dZ*d
Z+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4dZ5dZ6e%e*B e+B e,B e-B e.B e/B e0B e1B e2B e3B e4B e5B Z7e&e+B e,B Z8e'e-B e.B e/B e0B e1B e2B e3B e4B Z9e(e*B e5B Z:G dd„ dƒZ;G dd„ dƒZ<G d d!„ d!ej=ƒZ>G d"d#„ d#ej=ƒZ?G d$d%„ d%ej=ƒZ@e Ae?¡ejejjfej
jBjC_d&d'„ ZDd(d)„ ZEd*d+„ ZFd.d,d-„ZGdS )/zü
Windows API functions implemented as ctypes functions and classes as found
in jaraco.windows (3.4.1).

If you encounter issues with this module, please consider reporting the issues
in jaraco.windows and asking the author to port the fixes back here.
é    N)Úuc              	   C   sn   d}d}||B }d}| }d}t j ¡ }d}d}	t jj ||||t  |¡||	¡}
t|
ƒ |j}t jj 	|¡ |S )zf
    Call FormatMessage with a system error number to retrieve
    the descriptive error message.
    é   é   Nr   )
ÚctypesÚwintypesÚLPWSTRÚwindllÚkernel32ÚFormatMessageWÚbyrefÚhandle_nonzero_successÚvalueÚ	LocalFree)ÚerrnoÚALLOCATE_BUFFERÚFROM_SYSTEMÚflagsÚsourceÚ
message_idÚlanguage_idÚresult_bufferÚbuffer_sizeÚ	argumentsÚbytesÚmessage© r   ú;/usr/local/lib/python3.10/dist-packages/paramiko/_winapi.pyÚformat_system_message   s,   
ùr   c                       sJ   e Zd ZdZd‡ fdd„	Zedd„ ƒZedd„ ƒZd	d
„ Zdd„ Z	‡  Z
S )ÚWindowsErrorzZmore info about errors at
    http://msdn.microsoft.com/en-us/library/ms681381(VS.85).aspxNc                    s8   |d u r
t jj ¡ }t|ƒ}d|d |f}tƒ j|Ž  d S ©Nr   )r   r   r	   ÚGetLastErrorr   ÚsuperÚ__init__)Úselfr   ÚstrerrorÚargs©Ú	__class__r   r   r"   ;   s
   zWindowsError.__init__c                 C   ó   | j S ©N)r$   ©r#   r   r   r   r   B   ó   zWindowsError.messagec                 C   r(   r)   )Úwinerrorr*   r   r   r   ÚcodeF   r+   zWindowsError.codec                 C   r(   r)   )r   r*   r   r   r   Ú__str__J   s   zWindowsError.__str__c                 C   s   dj di tƒ ¤ŽS )Nz*{self.__class__.__name__}({self.winerror})r   )ÚformatÚvarsr*   r   r   r   Ú__repr__M   s   zWindowsError.__repr__r)   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r"   Úpropertyr   r-   r.   r1   Ú__classcell__r   r   r&   r   r   7   s    

r   c                 C   s   | dkrt ƒ ‚d S r   )r   )Úresultr   r   r   r   Q   s   ÿr   é   c                   @   sB   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )Ú	MemoryMapzL
    A memory map object which can have security attributes overridden.
    Nc                 C   s   || _ || _|| _d| _d S r   )ÚnameÚlengthÚsecurity_attributesÚpos)r#   r;   r<   r=   r   r   r   r"   Š   s   
zMemoryMap.__init__c              	   C   sv   | j r	t | j ¡nd }d}d}d}tjj |||d| jt| jƒ¡}t	|ƒ ||kr-t
dƒ‚|| _t||dddƒ| _| S )Néÿÿÿÿé   r9   r   zFailed to create file mapping)r=   r   r   r   r	   ÚCreateFileMappingWr<   r   r;   r   Ú	ExceptionÚfilemapÚMapViewOfFileÚview)r#   Úp_SAÚINVALID_HANDLE_VALUEÚPAGE_READWRITEÚFILE_MAP_WRITErC   r   r   r   Ú	__enter__�   s*   ÿýúzMemoryMap.__enter__c                 C   s
   || _ d S r)   )r>   )r#   r>   r   r   r   Úseek¨   s   
zMemoryMap.seekc                 C   sp   t |tƒsJ ‚t|ƒ}| j| | jkrtd|› d�ƒ‚| j| j }t |¡}tj	j
 |||¡ |  j|7  _d S )NzRefusing to write z bytes)Ú
isinstancer   Úlenr>   r<   Ú
ValueErrorrE   r   Úc_size_tr   r	   ÚRtlMoveMemory)r#   ÚmsgÚnÚdestr<   r   r   r   Úwrite«   s   
zMemoryMap.writec                 C   sF   t  |¡}| j| j }t  |¡}t jj |||¡ |  j|7  _|jS )z0
        Read n bytes from mapped view.
        )	r   Úcreate_string_bufferrE   r>   rO   r   r	   rP   Úraw)r#   rR   Úoutr   r<   r   r   r   Úreadµ   s   

zMemoryMap.readc                 C   s$   t jj | j¡ t jj | j¡ d S r)   )r   r   r	   ÚUnmapViewOfFilerE   ÚCloseHandlerC   )r#   Úexc_typeÚexc_valÚtbr   r   r   Ú__exit__À   s   zMemoryMap.__exit__r)   )
r2   r3   r4   r5   r"   rJ   rK   rT   rX   r^   r   r   r   r   r:   …   s    

r:   i   i   i   é   r@   é   é   é    é@   é€   r   i   i   i   r   c                   @   ó   e Zd ZdZdS )ÚTokenAccessr`   N)r2   r3   r4   ÚTOKEN_QUERYr   r   r   r   rf   	  ó    rf   c                   @   re   )ÚTokenInformationClassr_   N)r2   r3   r4   Ú	TokenUserr   r   r   r   ri     rh   ri   c                   @   s&   e Zd ZdZdejfdejjfgZdS )Ú
TOKEN_USERr_   ÚSIDÚ
ATTRIBUTESN)	r2   r3   r4   Únumr   Úc_void_pr   ÚDWORDÚ_fields_r   r   r   r   rk     s
    
þrk   c                   @   sV   e Zd ZdZejjZdZdej	fdej	fdefdej
fdej
fdej
fd	ej
fgZd
S )ÚSECURITY_DESCRIPTORzÿ
    typedef struct _SECURITY_DESCRIPTOR
        {
        UCHAR Revision;
        UCHAR Sbz1;
        SECURITY_DESCRIPTOR_CONTROL Control;
        PSID Owner;
        PSID Group;
        PACL Sacl;
        PACL Dacl;
        }   SECURITY_DESCRIPTOR;
    r_   ÚRevisionÚSbz1ÚControlÚOwnerÚGroupÚSaclÚDaclN)r2   r3   r4   r5   r   r   ÚUSHORTÚSECURITY_DESCRIPTOR_CONTROLÚREVISIONÚc_ubytero   rq   r   r   r   r   rr     s    ùrr   c                       sZ   e Zd ZdZdejjfdejfdejjfgZ	‡ fdd„Z
edd„ ƒZejd	d„ ƒZ‡  ZS )
ÚSECURITY_ATTRIBUTESz¦
    typedef struct _SECURITY_ATTRIBUTES {
        DWORD  nLength;
        LPVOID lpSecurityDescriptor;
        BOOL   bInheritHandle;
    } SECURITY_ATTRIBUTES;
    ÚnLengthÚlpSecurityDescriptorÚbInheritHandlec                    s"   t ƒ j|i |¤Ž t t¡| _d S r)   )r!   r"   r   Úsizeofr~   r   )r#   r%   Úkwargsr&   r   r   r"   D  s   zSECURITY_ATTRIBUTES.__init__c                 C   r(   r)   )Ú_descriptorr*   r   r   r   Ú
descriptorH  r+   zSECURITY_ATTRIBUTES.descriptorc                 C   s   || _ t |¡| _d S r)   )r„   r   Ú	addressofr€   )r#   r   r   r   r   r…   L  s   )r2   r3   r4   r5   r   r   rp   ro   ÚBOOLrq   r"   r6   r…   Úsetterr7   r   r   r&   r   r~   5  s    
	
ý
r~   c              
   C   sv   t j ¡ }t jj | |jddt  |¡¡ t  |j	¡}t
t jj | |jt  |¡t  |¡t  |¡¡ƒ t  |t  t¡¡jS )z:
    Given a token, get the token information for it.
    r   )r   r   rp   r   Úadvapi32ÚGetTokenInformationrn   r   rU   r   r   r‚   ÚcastÚPOINTERrk   Úcontents)ÚtokenÚinformation_classÚ	data_sizeÚdatar   r   r   rŠ   \  s   
ÿûÿ	rŠ   c                 C   s6   t j ¡ }t j | ¡} tt jj | |t  |¡¡ƒ |S r)   )r   r   ÚHANDLEr   r   r‰   ÚOpenProcessTokenr   )Úproc_handleÚaccessr8   r   r   r   r“   q  s   
ÿÿr“   c                  C   s   t tjj ¡ tjƒ} t| tƒS )z<
    Return a TOKEN_USER for the owner of this process.
    )	r“   r   r   r	   ÚGetCurrentProcessrf   rg   rŠ   rk   )Úprocessr   r   r   Úget_current_user|  s   ÿ
r˜   c                 C   sn   | du rt ƒ } t| tƒsJ dƒ‚tƒ }tƒ }||_d|_tjj	 
t |¡tj¡ tjj	 t |¡| jd¡ |S )z…
    Return a SECURITY_ATTRIBUTES structure with the SID set to the
    specified user (uses current user if none is specified).
    Nz user must be TOKEN_USER instancer_   r   )r˜   rL   rk   rr   r~   r…   r�   r   r   r‰   ÚInitializeSecurityDescriptorr   r|   ÚSetSecurityDescriptorOwnerrl   )ÚuserÚSDÚSAr   r   r   Ú get_security_attributes_for_user†  s   ÿÿrž   r)   )Hr5   ÚbuiltinsÚctypes.wintypesr   Úparamiko.utilr   r   r   r   ÚGMEM_MOVEABLEr   r	   ÚGlobalAllocr   ÚUINTrO   Úargtypesr’   ÚrestypeÚ
GlobalLockÚHGLOBALÚLPVOIDÚGlobalUnlockr‡   Ú
GlobalSizerA   ÚCreateFileMappingro   rp   r   rD   rY   rP   ÚHLOCALr   r:   ÚREAD_CONTROLÚSTANDARD_RIGHTS_REQUIREDÚSTANDARD_RIGHTS_READÚSTANDARD_RIGHTS_WRITEÚSTANDARD_RIGHTS_EXECUTEÚSTANDARD_RIGHTS_ALLÚPOLICY_VIEW_LOCAL_INFORMATIONÚPOLICY_VIEW_AUDIT_INFORMATIONÚPOLICY_GET_PRIVATE_INFORMATIONÚPOLICY_TRUST_ADMINÚPOLICY_CREATE_ACCOUNTÚPOLICY_CREATE_SECRETÚPOLICY_CREATE_PRIVILEGEÚPOLICY_SET_DEFAULT_QUOTA_LIMITSÚPOLICY_SET_AUDIT_REQUIREMENTSÚPOLICY_AUDIT_LOG_ADMINÚPOLICY_SERVER_ADMINÚPOLICY_LOOKUP_NAMESÚPOLICY_NOTIFICATIONÚPOLICY_ALL_ACCESSÚPOLICY_READÚPOLICY_WRITEÚPOLICY_EXECUTErf   ri   Ú	Structurerk   rr   r~   rŒ   r‰   rš   rŠ   r“   r˜   rž   r   r   r   r   Ú<module>   sú    $







ú




Dÿþýüûúùø	÷
öõôÿÿþÿÿþýüûúùøÿÿþÿý

