U
    ςd+                     @   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kernel32ZFormatMessageWbyrefhandle_nonzero_successvalue	LocalFree)errnoZALLOCATE_BUFFERZFROM_SYSTEMflagssourceZ
message_idZlanguage_idZresult_bufferbuffer_size	argumentsbytesmessage r   M/var/www/html/myproject/myenv/lib/python3.8/site-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 krt jj }t|}d|d |f}t j|  d S Nr   )r   r   r	   ZGetLastErrorr   super__init__)selfr   strerrorargs	__class__r   r   r   ;   s
    zWindowsError.__init__c                 C   s   | j S N)r   r   r   r   r   r   B   s    zWindowsError.messagec                 C   s   | j S r!   )winerrorr"   r   r   r   codeF   s    zWindowsError.codec                 C   s   | j S r!   )r   r"   r   r   r   __str__J   s    zWindowsError.__str__c                 C   s   dj f t S )Nz*{self.__class__.__name__}({self.winerror}))formatvarsr"   r   r   r   __repr__M   s    zWindowsError.__repr__)N)__name__
__module____qualname____doc__r   propertyr   r$   r%   r(   __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   r2   r3   r4   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rZt
d|| _t||ddd| _| S )N   r0   r   zFailed to create file mapping)r4   r   r
   r   r	   CreateFileMappingWr3   r   r2   r   	ExceptionfilemapMapViewOfFileview)r   Zp_SAZINVALID_HANDLE_VALUEZPAGE_READWRITEZFILE_MAP_WRITEr:   r   r   r   	__enter__   s*    zMemoryMap.__enter__c                 C   s
   || _ d S r!   )r5   )r   r5   r   r   r   seek   s    zMemoryMap.seekc                 C   sp   t |tstt|}| j| | jkr6td| d| j| j }t	|}tj
j||| |  j|7  _d S )NzRefusing to write z bytes)
isinstancer   AssertionErrorlenr5   r3   
ValueErrorr<   r   c_size_tr   r	   RtlMoveMemory)r   msgndestr3   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_bufferr<   r5   rC   r   r	   rD   raw)r   rF   outr   r3   r   r   r   read   s    

zMemoryMap.readc                 C   s$   t jj| j t jj| j d S r!   )r   r   r	   UnmapViewOfFiler<   ZCloseHandler:   )r   exc_typeexc_valtbr   r   r   __exit__   s    zMemoryMap.__exit__)N)
r)   r*   r+   r,   r   r=   r>   rH   rL   rQ   r   r   r   r   r1      s   

r1   i   i   i      r7             @      r   i   i   i   r   c                   @   s   e Zd ZdZdS )TokenAccessrS   N)r)   r*   r+   TOKEN_QUERYr   r   r   r   rX   	  s   rX   c                   @   s   e Zd ZdZdS )TokenInformationClassrR   N)r)   r*   r+   Z	TokenUserr   r   r   r   rZ     s   rZ   c                   @   s&   e Zd ZdZdejfdejjfgZdS )
TOKEN_USERrR   SIDZ
ATTRIBUTESN)	r)   r*   r+   numr   c_void_pr   DWORD_fields_r   r   r   r   r[     s   
r[   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;
    rR   ZRevisionZSbz1ControlZOwnerGroupZSaclZDaclN)r)   r*   r+   r,   r   r   ZUSHORTZSECURITY_DESCRIPTOR_CONTROLREVISIONZc_ubyter^   r`   r   r   r   r   ra     s   ra   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|| tt| _d S r!   )r   r   r   sizeofre   rf   )r   r   kwargsr   r   r   r   D  s    zSECURITY_ATTRIBUTES.__init__c                 C   s   | j S r!   )_descriptorr"   r   r   r   
descriptorH  s    zSECURITY_ATTRIBUTES.descriptorc                 C   s   || _ t|| _d S r!   )rk   r   Z	addressofrg   )r   r   r   r   r   rl   L  s    )r)   r*   r+   r,   r   r   r_   r^   BOOLr`   r   r-   rl   setterr.   r   r   r   r   re   5  s   	


re   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   r_   r   advapi32GetTokenInformationr]   r
   rI   r   r   ri   castPOINTERr[   contents)tokenZinformation_class	data_sizedatar   r   r   rp   \  s&    
    	rp   c                 C   s6   t j }t j| } tt jj| |t | |S r!   )r   r   HANDLEr   r   ro   OpenProcessTokenr
   )Zproc_handleaccessr/   r   r   r   rx   q  s    
  rx   c                  C   s   t tjj tj} t| tS )z<
    Return a TOKEN_USER for the owner of this process.
    )	rx   r   r   r	   ZGetCurrentProcessrX   rY   rp   r[   )processr   r   r   get_current_user|  s
    
 r{   c                 C   sn   | dkrt  } t| ts t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 instancerR   r   )r{   r?   r[   r@   ra   re   rl   rh   r   r   ro   ZInitializeSecurityDescriptorr
   rd   SetSecurityDescriptorOwnerr\   )userZSDZSAr   r   r    get_security_attributes_for_user  s"       r~   )N)Hr,   builtinsZctypes.wintypesr   Zparamiko.utilr   r   r   r   ZGMEM_MOVEABLEr   r	   ZGlobalAllocr   ZUINTrC   Zargtypesrw   restypeZ
GlobalLockZHGLOBALZLPVOIDZGlobalUnlockrm   Z
GlobalSizer8   ZCreateFileMappingr^   r_   r   r;   rM   rD   ZHLOCALr   r1   ZREAD_CONTROLZSTANDARD_RIGHTS_REQUIREDZSTANDARD_RIGHTS_READZSTANDARD_RIGHTS_WRITEZSTANDARD_RIGHTS_EXECUTEZSTANDARD_RIGHTS_ALLZPOLICY_VIEW_LOCAL_INFORMATIONZPOLICY_VIEW_AUDIT_INFORMATIONZPOLICY_GET_PRIVATE_INFORMATIONZPOLICY_TRUST_ADMINZPOLICY_CREATE_ACCOUNTZPOLICY_CREATE_SECRETZPOLICY_CREATE_PRIVILEGEZPOLICY_SET_DEFAULT_QUOTA_LIMITSZPOLICY_SET_AUDIT_REQUIREMENTSZPOLICY_AUDIT_LOG_ADMINZPOLICY_SERVER_ADMINZPOLICY_LOOKUP_NAMESZPOLICY_NOTIFICATIONZPOLICY_ALL_ACCESSZPOLICY_READZPOLICY_WRITEZPOLICY_EXECUTErX   rZ   Z	Structurer[   ra   re   rr   ro   r|   rp   rx   r{   r~   r   r   r   r   <module>   s   $












D	


