o
    �õ±jô  ã                   @   s¨  d Z ddlmZ ddlZddlmZ ejjjZeje_	ejj
jZejeje ej¡fe_eje_	G dd„ dejƒZejj
jZejeje e¡fe_eje_	G dd„ dƒZd	Zd
ZdZdZG dd„ dejƒZejj
jZeje e¡eje ej¡fe_eje_	G dd„ dejƒZe e¡Zejj
jZejej ej!eje ej¡ge_eje_	ejj
j"Z"eje"_	ejejeejee ej¡ge"_dd„ Z#dd„ Z$dd„ Z%dd„ Z&dd„ Z'dS )z`
A module built to test if the current process has the privilege to
create symlinks on Windows.
é    )Úprint_functionN)Úwintypesc                   @   s0   e Zd ZdejfdejfgZdd„ Zdd„ ZdS )ÚLUIDÚlow_partÚ	high_partc                 C   s   | j |j ko| j|jkS ©N)r   r   ©ÚselfÚother© r   úŒ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/minidump/utils/privileges.pyÚ__eq__   s   
þzLUID.__eq__c                 C   s
   | |k S r   r   r   r   r   r   Ú__ne__    s   
zLUID.__ne__N)	Ú__name__Ú
__module__Ú__qualname__r   ÚDWORDÚLONGÚ_fields_r   r   r   r   r   r   r      s    þr   c                   @   s   e Zd ZdZdZdZdS )ÚTOKEN_INFORMATION_CLASSé   é   é   N)r   r   r   Ú	TokenUserÚTokenGroupsÚTokenPrivilegesr   r   r   r   r   +   s    r   r   r   é   l        c                   @   s>   e Zd ZdefdejfgZdd„ Zdd„ Zdd„ Z	d	d
„ Z
dS )ÚLUID_AND_ATTRIBUTESr   Ú
attributesc                 C   s   t | jt@ ƒS r   )Úboolr   ÚSE_PRIVILEGE_ENABLED©r	   r   r   r   Ú
is_enabled<   s   zLUID_AND_ATTRIBUTES.is_enabledc                 C   s   |  j tO  _ d S r   )r   r    r!   r   r   r   Úenable?   s   zLUID_AND_ATTRIBUTES.enablec                 C   s@   t  d¡}t |j¡}td | j||ƒ}|dkrt‚|d |j… S )Ni (  r   )r   r   ÚctypesÚcreate_unicode_bufferÚvalueÚLookupPrivilegeNamer   ÚRuntimeError)r	   ÚsizeÚbufÚresr   r   r   Úget_nameB   s   
zLUID_AND_ATTRIBUTES.get_namec                 C   s(   | j }ddg|  ¡  }|jdi tƒ ¤ŽS )Nz{name}z{name} (enabled)r   )Únamer"   ÚformatÚvars)r	   r-   Úfmtr   r   r   Ú__str__J   s   zLUID_AND_ATTRIBUTES.__str__N)r   r   r   r   r   r   r   r"   r#   r,   r1   r   r   r   r   r   6   s    þr   c                   @   s2   e Zd Zdejfded fgZdd„ Zdd„ ZdS )	ÚTOKEN_PRIVILEGESÚcountÚ
privilegesr   c                 C   s$   t | j }t | jt |¡¡j}|S r   )r   r3   r$   Úcastr4   ÚPOINTERÚcontents)r	   Ú
array_typer4   r   r   r   Ú	get_array^   s   
ÿÿzTOKEN_PRIVILEGES.get_arrayc                 C   s   t |  ¡ ƒS r   )Úiterr9   r!   r   r   r   Ú__iter__d   s   zTOKEN_PRIVILEGES.__iter__N)	r   r   r   r   r   r   r   r9   r;   r   r   r   r   r2   X   s    
þr2   c                  C   s.   t  ¡ } d}ttƒ || ƒ}|dkstdƒ‚| S )zGet the current process tokeniÿ r   zCouldn't get process token)r   ÚHANDLEÚOpenProcessTokenÚGetCurrentProcessr(   )ÚtokenÚTOKEN_ALL_ACCESSr+   r   r   r   Úget_process_token   s   rA   c                  C   s&   t ƒ } td d| ƒ}|dkstdƒ‚| S )NÚSeDebugPrivileger   zCouldn't lookup privilege value)r   ÚLookupPrivilegeValuer(   )Úsymlink_luidr+   r   r   r   Úget_debug_luidˆ   s   ÿrE   c                  C   st   t  ¡ } tƒ tjdd| g}t|Ž }t | j¡}||d< | j|d< t|Ž }|dks.J d| ƒ‚t 	|t 
t¡¡j}|S )z7Get all privileges associated with the current process.Nr   r   r   z(Error in second GetTokenInformation (%d))r   r   rA   r   r   ÚGetTokenInformationr$   Úcreate_string_bufferr&   r5   r6   r2   r7   )Úreturn_lengthÚparamsr+   Úbufferr4   r   r   r   Úget_privilege_information�   s   û
rK   c                  C   s(   t ƒ } td | j¡ƒ ttt| ƒƒ dS )zAReport all privilege information assigned to the current process.zfound {0} privilegesN)rK   Úprintr.   r3   ÚtupleÚmap)r4   r   r   r   Úreport_privilege_information«   s   rO   c                  C   s˜   t  t¡} | t  t¡7 } t  | ¡}t  |t  t¡¡j}d|_| 	¡ d  
¡  tƒ | 	¡ d _tƒ }t|d|dddƒ}|dkrBtdƒ‚d}t jj ¡ |kS )z|
    Try to assign the symlink privilege to the current process token.
    Return True if the assignment is successful.
    r   r   FNzError in AdjustTokenPrivilegesi  )r$   Úsizeofr2   r   rG   r5   r6   r7   r3   r9   r#   rE   r   rA   ÚAdjustTokenPrivilegesr(   ÚwindllÚkernel32ÚGetLastError)r)   rJ   Útpr?   r+   ÚERROR_NOT_ALL_ASSIGNEDr   r   r   Úenable_debug_privilege±   s   

rW   )(Ú__doc__Ú
__future__r   r$   r   rR   rS   r>   r<   ÚrestypeÚadvapi32r=   r   r6   ÚargtypesÚBOOLÚ	Structurer   ÚLookupPrivilegeValueWrC   ÚLPWSTRr   ÚSE_PRIVILEGE_ENABLED_BY_DEFAULTr    ÚSE_PRIVILEGE_REMOVEDÚSE_PRIVILEGE_USED_FOR_ACCESSr   ÚLookupPrivilegeNameWr'   r2   ÚPTOKEN_PRIVILEGESrF   Úc_uintÚc_void_prQ   rA   rE   rK   rO   rW   r   r   r   r   Ú<module>   sn    


ÿ
ý

ü


û

ú		