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    










		