
    wBfx                        d dl mZ d dlmZ ddlmZmZ  ee      Zerd dl	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZ d dlmZmZmZmZmZmZ  e
e      Z e
e      ZdZ dZ!ejD                  jF                  Z#eefe#_$        ee#_%        ejD                  jL                  Z&efe&_$        ee&_%         G d	 d
e      Z' e
e'      Z(ejR                  jT                  Z+e(fe+_$        ee+_%         G d de      Z, G d de      Z-d Z.d Z/d Z0ddZ1y)    )IntEnum)	getLogger   )ensure_binaryon_win)POINTER	StructureWinErrorbyrefc_char_pc_intc_ulongc_ulonglongc_void_p	c_wchar_ppointersizeofwindll)BOOLDWORDHANDLE	HINSTANCEHKEYHWND@   c                   t    e Zd ZdZdefdefdefdefdefdefdefd	efd
e	fde
fdefdefdefdefdefgZd Zy)ShellExecuteInfoz
        https://docs.microsoft.com/en-us/windows/desktop/api/shellapi/nf-shellapi-shellexecuteexa
        https://docs.microsoft.com/en-us/windows/desktop/api/shellapi/ns-shellapi-_shellexecuteinfoa
        cbSizefMaskhwndlpVerblpFilelpParameterslpDirectorynShowhInstApplpIDListlpClass	hKeyClassdwHotKeyhIconhProcessc                     t        j                  |        t        |       | _        |j	                         D ]-  \  }}t        |t              rt        |      }t        | ||       / y )N)	r	   __init__r   r   items
isinstancestrr   setattr)selfkwargs
field_namefield_values       8lib/python3.12/site-packages/conda/common/_os/windows.pyr/   zShellExecuteInfo.__init__A   sU    t$ ,DK+1<<> 7'
Kk3/"/"<Kj+67    N)__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   r   _fields_r/    r9   r8   r   r   )   s    	 ugTNx x X&H%e#"!$f 
$	7r9   r   c                   <    e Zd ZdZdZdZdZdZdZdZ	dZ
dZd	Zd
ZdZy)SWr         	      
   r               N)r:   r;   r<   HIDEMAXIMIZEMINIMIZERESTORESHOWSHOWDEFAULTSHOWMAXIMIZEDSHOWMINIMIZEDSHOWMINNOACTIVESHOWNASHOWNOACTIVATE
SHOWNORMALr?   r9   r8   rA   rA   O   s>    DHHGDKMMOFNJr9   rA   c                   @    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZy)ERRORr   r   rB      rE                      rH      N)r:   r;   r<   ZEROFILE_NOT_FOUNDPATH_NOT_FOUND
BAD_FORMATACCESS_DENIEDASSOC_INCOMPLETEDDE_BUSYDDE_FAILDDE_TIMEOUTDLL_NOT_FOUNDNO_ASSOCOOMSHAREr?   r9   r8   rX   rX   ^   sD    DNNJMHHKMH
CEr9   rX   c                     d }t        d      }	 t        j                  j                  t	        |       d d t        |             |j                  }|S # t        $ r!}t        j                  d|       Y d }~|S d }~ww xY w)Nr   %r)
r   r   kernel32GetDiskFreeSpaceExWr   r   value	Exceptionloginfo)dir_nameresult
free_byteses       r8   get_free_space_on_windowsrz   n   sy    FQJ	++hJ		
 !! M  qMs   A A 	A;A66A;c                      d} 	 t         j                  j                         dk7  } | S # t        $ r!}t        j                  d|       Y d }~| S d }~ww xY w)NFr   ro   )r   shell32IsUserAnAdminrs   rt   ru   )rw   ry   s     r8   is_admin_on_windowsr~   ~   sR    F--/14 M  qMs   !' 	AAAc                     	 t        | t               t        |        y# t        $ r }t        j                  d|       Y d}~yd}~ww xY w)zBWaits until spawned process finishes and closes the handle for it.ro   N)WaitForSingleObjectINFINITECloseHandlers   rt   ru   )process_handlery   s     r8   _wait_and_close_handler      s:    NH5N# qs    	AAAc           	         | d   }dj                  t        |       dkD  r| dd nd      }d}d}	 t        t        dd||dt        j
                        }t        t        |            }|j                  }|st               }||fS |rt        j                         ||fS # t        $ r$}d}|}t        j                  d	|       Y d}~Sd}~ww xY w)
a  
    Run command line argument list (`args`) with elevated privileges.

    If `wait` is True, the process will block until completion.

    NOTES:
        - no stdin / stdout / stderr pipe support
        - does not automatically quote arguments (i.e. for paths that may contain spaces)
    See:
    - http://stackoverflow.com/a/19719292/1170370 on 20160407 MCS.
    - msdn.microsoft.com/en-us/library/windows/desktop/bb762153(v=vs.85).aspx
    - https://github.com/ContinuumIO/menuinst/blob/master/menuinst/windows/win_elevate.py
    - https://github.com/saltstack/salt-windows-install/blob/master/deps/salt/python/App/Lib/site-packages/win32/Demos/pipes/runproc.py  # NOQA
    - https://github.com/twonds/twisted/blob/master/twisted/internet/_dumbwin32proc.py
    - https://stackoverflow.com/a/19982092/2127762
    - https://www.codeproject.com/Articles/19165/Vista-UAC-The-Definitive-Guide
    - https://github.com/JustAMan/pyWinClobber/blob/master/win32elevate.py
    r    rJ   Nr?   runas)r    r!   r"   r#   r$   r%   r&   Fro   )joinlenr   SEE_MASK_NOCLOSEPROCESSrA   rK   ShellExecuteExr   r-   rs   rt   ru   r
   r   )	argswaitarg0	param_strhprocess
error_codeexecute_info
successfulry   s	            r8   run_as_adminr      s    & 7DSY]ab;IHJ')"''
 $E,$78
(( Z
 Z 
|445Z  

qs   AB 	C'CCN)T)2enumr   loggingr   compatr   r   r:   rt   ctypesr   r	   r
   r   r   r   r   r   r   r   r   r   r   ctypes.wintypesr   r   r   r   r   r   PHANDLEPDWORDr   r   rp   r   argtypesrestyper   r   PShellExecuteInfoShell32ShellExecuteExAr   rA   rX   rz   r~   r   r   r?   r9   r8   <module>r      s     *	    KJfoGU^F(H //==$*E? "'//--K"9KK79 7@   01^^33N02N!N G   - r9   