B
    çÚ†\ÙŠ  ã               @   sð  d Z ddlZddlZddlZddlZddlZddlZddlmZ ddl	m
Z
 yddl	mZ W nd ek
rÀ Z zFeeƒ ¡  d¡r®e ¡ d dk r®d	Zed
7 Zed7 Zeeƒ‚n‚ W ddZ[X Y nX ddl
mZ ddl
mZ ddl
mZ ddl
mZ ddl
mZ ddl
mZ ddl
mZ ddl
mZ ddl
mZ ddl
mZ ddlm Z  ddlm!Z! ddlm"Z" ddlm#Z# ddlm$Z$ ddlm%Z% ddlm&Z& ddlm'Z' ddlm(Z( ddlm)Z) dd lm*Z* ej+d!krÔddl,Z,ndZ,d"d#d$d%d&d'd(d)d*d+g
Z-d,Z.e/ej0ej1ej2gƒZ3e/ej4ej5gƒZ6e7ed-ƒZ8e,dkr2d.Z9ne, :d/d+d.i¡Z;e;j9Z9ej<e
j=ej>e
j?ej@e
jAejBe
jCejDe
jEejFe
jGejHe
jIejJe
jKejLe
jMejNe
jOejPe
jQejRe.ejSe
jTiZUe,dk	rÜG d0d1„ d1e,j:ƒZVeWƒ  XeVjY¡ eZddd2d3d4d5dd6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEZ[dZ\dZ]dZ^dZ_dFZ`dGZadHZbdIZcdIZddJZedKZfe!ƒ dLdM„ ƒZgegƒ edk ZhedNdOdPdQdRdSgƒZiedTdUdVdWdXdYgƒZjedZd[d\d]d^d_d`dadbdcdddedfgƒZkedgekjldh ƒZmedidjd[gƒZnedkdldm oenjl¡ ƒZpedndodpdqdrdsdtgƒZqe!dudvdwdx„ ƒZrdydz„ Zsed{d|„ ƒZtd}d~„ Zudd€„ ZvejwZwdd‚„ Zxdƒd„„ Zyd…d†„ Zzd‡dˆ„ Z{d‰dŠ„ Z|d‹dŒ„ Z}ddŽ„ Z~dd„ Zd§d‘d’„Z€d“d”„ Zd•d–„ Z‚d—d˜„ Zƒd™dš„ Z„da…d›dœ„ Z†ddž„ Z‡dŸd"„ Zˆd d#„ Z‰G d¡d¢„ d¢eŠƒZ‹ejŒZŒejZejŽZŽd£d¤„ ZG d¥d¦„ d¦eŠƒZdS )¨z Windows platform implementation.é    N)Ú
namedtupleé   )Ú_common)Ú_psutil_windowszdll load failedé   z3this Windows version is too old (< Windows Vista); z:psutil 3.4.2 is the latest version which supports Windows z2000, XP and 2003 server)Ú	conn_tmap)ÚENCODING)ÚENCODING_ERRS)Úisfile_strict)Úmemoize)Úmemoize_when_activated)Úparse_environ_block)Úsockfam_to_enum)Úsocktype_to_enum)Úusage_percent)Úlong)Ú	lru_cache)ÚPY3)Úunicode)Úxrange)ÚABOVE_NORMAL_PRIORITY_CLASS)ÚBELOW_NORMAL_PRIORITY_CLASS)ÚHIGH_PRIORITY_CLASS)ÚIDLE_PRIORITY_CLASS)ÚNORMAL_PRIORITY_CLASS)ÚREALTIME_PRIORITY_CLASS)é   é   Úwin_service_iterÚwin_service_getr   r   r   r   r   r   ÚCONN_DELETE_TCBÚAF_LINKZ
DELETE_TCBÚproc_io_priority_getéÿÿÿÿÚAddressFamilyc               @   s$   e Zd ZeZeZeZeZeZeZdS )ÚPriorityN)	Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   © r)   r)   ú0lib/python3.7/site-packages/psutil/_pswindows.pyr%   m   s   r%   é   r   r   é   é   é   é	   é
   é   é   é   é   é   é   é   é   é   é   é   )Únum_handlesÚctx_switchesÚ	user_timeÚkernel_timeÚcreate_timeÚnum_threadsÚ	io_rcountÚ	io_wcountÚ	io_rbytesÚ	io_wbytesÚio_count_othersÚio_bytes_othersÚnum_page_faultsÚ	peak_wsetÚwsetÚpeak_paged_poolÚ
paged_poolÚpeak_non_paged_poolÚnon_paged_poolÚpagefileÚpeak_pagefileÚmem_private)r0   r   )r   r+   )r   r   )r   r   )r,   r+   )r,   r   c              C   s   t  ¡ } | j| jfS )zBUsage:
    >>> if get_winver() <= WIN_VISTA:
    ...      ...
    )ÚsysÚgetwindowsversionÚmajorÚminor)Zwvr)   r)   r*   Ú
get_winver¡   s    rV   Ú	scputimesÚuserÚsystemÚidleÚ	interruptÚdpcÚsvmemÚtotalZ	availableÚpercentÚusedÚfreeÚpmemÚrssÚvmsrH   rI   rJ   rK   rL   Zpeak_nonpaged_poolZnonpaged_poolrO   rP   ZprivateÚpfullmem)ÚussÚpmmap_groupedÚpathÚ	pmmap_extzaddr perms ú ÚpioZ
read_countZwrite_countZ
read_bytesZwrite_bytesÚother_countZother_bytesi   )Úmaxsizec             C   s<   d  |  d¡dd… ¡}t |¡}tj  || t|ƒd… ¡S )zConvert paths using native DOS format like:
        "\Device\HarddiskVolume1\Windows\systemew\file.txt"
    into:
        "C:\Windows\systemew\file.txt"
    ú\Nr   )ÚjoinÚsplitÚcextZwin32_QueryDosDeviceÚosrh   Úlen)ÚsZrawdriveZdriveletterr)   r)   r*   Úconvert_dos_pathÐ   s    
ru   c             C   s&   t r| S t| tƒr| S |  tt¡S dS )zmEncode a unicode string to a byte string by using the default fs
    encoding + "replace" error handler.
    N)r   Ú
isinstanceÚstrÚencoder   r	   )rt   r)   r)   r*   Úpy2_strencodeÜ   s
    
ry   c               C   s   t  ¡ S )N)rq   Úgetpagesizer)   r)   r)   r*   rz   é   s    rz   c              C   sN   t  ¡ } | \}}}}}}|}|}|}	|| }
t|| |dd}t||||
|	ƒS )z&System virtual memory as a namedtuple.r   )Úround_)rq   Úvirtual_memr   r]   )ÚmemZtotphysZ	availphysZtotpagefZ
availpagefZtotvirtZfreevirtr^   Zavailra   r`   r_   r)   r)   r*   Úvirtual_memoryó   s    r~   c              C   sB   t  ¡ } | d }| d }|| }t||dd}t ||||dd¡S )z=Swap system memory as a (total, used, free, sin, sout) tuple.r+   r   r   )r{   r   )rq   r|   r   r   Zsswap)r}   r^   ra   r`   r_   r)   r)   r*   Úswap_memory   s    r   c             C   sP   t rt| tƒr| jtdd} t | ¡\}}|| }t||dd}t 	||||¡S )z'Return disk usage associated with path.Ústrict)Úerrorsr   )r{   )
r   rv   ÚbytesÚdecoder   rq   Ú
disk_usager   r   Z
sdiskusage)rh   r^   ra   r`   r_   r)   r)   r*   r„     s    r„   c             C   s   t  | ¡}dd„ |D ƒS )zReturn disk partitions.c             S   s   g | ]}t j|Ž ‘qS r)   )r   Z	sdiskpart)Ú.0Úxr)   r)   r*   ú
<listcomp>!  s    z#disk_partitions.<locals>.<listcomp>)rq   Údisk_partitions)ÚallÚrawlistr)   r)   r*   rˆ     s    
rˆ   c              C   s<   t  ¡ \} }}tdd„ tt  ¡ Ž D ƒŽ }t| |||j|jƒS )z)Return system CPU times as a named tuple.c             S   s   g | ]}t |ƒ‘qS r)   )Úsum)r…   Únr)   r)   r*   r‡   /  s    zcpu_times.<locals>.<listcomp>)rq   Ú	cpu_timesrW   ÚzipÚper_cpu_timesr[   r\   )rX   rY   rZ   Zpercpu_summedr)   r)   r*   r   )  s    r   c              C   s>   g } x4t  ¡ D ](\}}}}}t|||||ƒ}|  |¡ qW | S )z6Return system per-CPU times as a list of named tuples.)rq   r   rW   Úappend)ÚretrX   rY   rZ   r[   r\   Úitemr)   r)   r*   r   4  s
    r   c               C   s   t  ¡ S )z0Return the number of logical CPUs in the system.)rq   Úcpu_count_logicalr)   r)   r)   r*   r“   =  s    r“   c               C   s   t  ¡ S )z6Return the number of physical CPU cores in the system.)rq   Zcpu_count_physr)   r)   r)   r*   Úcpu_count_physicalB  s    r”   c              C   s$   t  ¡ \} }}}d}t | |||¡S )zReturn CPU statistics.r   )rq   Ú	cpu_statsr   Z	scpustats)r=   Z
interruptsZdpcsZsyscallsZsoft_interruptsr)   r)   r*   r•   G  s    
r•   c              C   s(   t  ¡ \} }d}t t| ƒ|t|ƒ¡gS )zMReturn CPU frequency.
    On Windows per-cpu frequency is not supported.
    g        )rq   Úcpu_freqr   ZscpufreqÚfloat)ZcurrZmax_Zmin_r)   r)   r*   r–   O  s    r–   c          
   C   sâ   | t kr(td| d dd„ t D ƒ¡f ƒ‚t |  \}}t |||¡}tƒ }x|D ]ˆ}|\}}}	}
}}}|
rrtj|
Ž }
|r€tj|Ž }t| }t	|ƒ}t
|	ƒ}	|dkr¸t |||	|
|||¡}nt |||	|
||¡}| |¡ qNW t|ƒS )zˆReturn socket connections.  If pid == -1 return system-wide
    connections (as opposed to connections opened by one process only).
    z+invalid %r kind argument; choose between %sz, c             S   s   g | ]}t |ƒ‘qS r)   )Úrepr)r…   r†   r)   r)   r*   r‡   c  s    z#net_connections.<locals>.<listcomp>r#   )r   Ú
ValueErrorro   rq   Únet_connectionsÚsetr   ÚaddrÚTCP_STATUSESr   r   ZsconnZpconnÚaddÚlist)ÚkindÚ_pidZfamiliesÚtypesrŠ   r‘   r’   ÚfdZfamÚtypeZladdrZraddrÚstatusÚpidÚntr)   r)   r*   rš   ]  s(    


rš   c              C   s|   i } t  ¡ }xj| ¡ D ]^\}}ts@t|tƒs8tt|ƒƒ‚t|ƒ}|\}}}}t	t
dƒr`t
 |¡}t
 ||||¡| |< qW | S )z)Get NIC stats (isup, duplex, speed, mtu).Ú	NicDuplex)rq   Únet_if_statsÚitemsr   rv   r   ÚAssertionErrorr¤   ry   Úhasattrr   r¨   Z	snicstats)r‘   ZrawdictÚnamerª   ZisupZduplexZspeedZmtur)   r)   r*   r©   x  s    

r©   c              C   s   t  ¡ } tdd„ |  ¡ D ƒƒS )zsReturn network I/O statistics for every network interface
    installed on the system as a dict of raw tuples.
    c             S   s   g | ]\}}t |ƒ|f‘qS r)   )ry   )r…   ÚkÚvr)   r)   r*   r‡   Œ  s    z#net_io_counters.<locals>.<listcomp>)rq   Únet_io_countersÚdictrª   )r‘   r)   r)   r*   r°   ‡  s    r°   c              C   s<   g } x2t  ¡ D ]&}t|ƒ}t|d ƒ|d< |  |¡ qW | S )z,Return the addresses associated to each NIC.r   )rq   Únet_if_addrsrŸ   ry   r   )r‘   rª   r)   r)   r*   r²     s    r²   c              C   sd   t  ¡ \} }}}| dk}t|d@ ƒ}t|d@ ƒ}|r8dS |s@|rHtj}n|dkrVtj}t |||¡S )zReturn battery information.r   é€   r.   Nr#   )rq   Úsensors_batteryÚboolr   ZPOWER_TIME_UNLIMITEDZPOWER_TIME_UNKNOWNZsbattery)Zacline_statusÚflagsr_   ZsecsleftZpower_pluggedZ
no_batteryZchargingr)   r)   r*   r´   ž  s    r´   c              C   s,   t t ¡ ƒ} t| t ƒdkr tS | a| S dS )z:The system boot time expressed in seconds since the epoch.r   N)r—   rq   Ú	boot_timeÚabsÚ_last_btime)r‘   r)   r)   r*   r·   º  s
    r·   c              C   sL   g } t  ¡ }x:|D ]2}|\}}}t|ƒ}t |d||d¡}|  |¡ qW | S )z:Return currently connected users as a list of namedtuples.N)rq   Úusersry   r   Zsuserr   )ÚretlistrŠ   r’   rX   ZhostnameZtstampr§   r)   r)   r*   rº   È  s    

rº   c              c   s.   x(t  ¡ D ]\} }tt| ƒt|ƒƒV  q
W dS )z*Yields a list of WindowsService instances.N)rq   Zwinservice_enumerateÚWindowsServicery   )r­   Údisplay_namer)   r)   r*   r   Ù  s    c             C   s   t | dƒ}| ¡ d |_|S )zBOpen a Windows service and return it as a WindowsService instance.Nr½   )r¼   Ú_query_configÚ_display_name)r­   Zservicer)   r)   r*   r   ß  s    
c               @   sž   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
ejdd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$S )%r¼   z(Represents an installed Windows service.c             C   s   || _ || _d S )N)Ú_namer¿   )Úselfr­   r½   r)   r)   r*   Ú__init__é  s    zWindowsService.__init__c             C   s    d| j | jf }d| jj|f S )Nz(name=%r, display_name=%r)z%s%s)rÀ   r¿   Ú	__class__r&   )rÁ   Zdetailsr)   r)   r*   Ú__str__í  s    zWindowsService.__str__c             C   s   d|   ¡ t| ƒf S )Nz
<%s at %s>)rÄ   Úid)rÁ   r)   r)   r*   Ú__repr__ò  s    zWindowsService.__repr__c             C   s   t |tƒstS | j|jkS )N)rv   r¼   ÚNotImplementedrÀ   )rÁ   Úotherr)   r)   r*   Ú__eq__õ  s    
zWindowsService.__eq__c             C   s
   | |k S )Nr)   )rÁ   rÈ   r)   r)   r*   Ú__ne__ü  s    zWindowsService.__ne__c          	   C   sH   |   ¡  t | j¡\}}}}W d Q R X tt|ƒt|ƒt|ƒt|ƒdS )N)r½   ÚbinpathÚusernameÚ
start_type)Ú_wrap_exceptionsrq   Zwinservice_query_configrÀ   r±   ry   )rÁ   r½   rË   rÌ   rÍ   r)   r)   r*   r¾   ÿ  s    
zWindowsService._query_configc          	   C   s<   |   ¡  t | j¡\}}W d Q R X |dkr0d }t||dS )Nr   )r¥   r¦   )rÎ   rq   Zwinservice_query_statusrÀ   r±   )rÁ   r¥   r¦   r)   r)   r*   Ú_query_status
  s
    
zWindowsService._query_statusc          
   c   s‚   y
dV  W nr t k
r| } zT|jtkr>td| jd| j d‚n.|jtksR|jtkrjtd| jd| j d‚n‚ W dd}~X Y nX dS )z{Ctx manager which translates bare OSError and WindowsError
        exceptions into NoSuchProcess and AccessDenied.
        Nz2service %r is not querable (not enough privileges))r¦   r­   Úmsgzservice %r does not exist))ZWindowsErrorÚerrnoÚACCESS_DENIED_ERRSETÚAccessDeniedrÀ   ÚNO_SUCH_SERVICE_ERRSETZwinerrorÚNoSuchProcess)rÁ   Úerrr)   r)   r*   rÎ     s    



zWindowsService._wrap_exceptionsc             C   s   | j S )z¢The service name. This string is how a service is referenced
        and can be passed to win_service_get() to get a new
        WindowsService instance.
        )rÀ   )rÁ   r)   r)   r*   r­   (  s    zWindowsService.namec             C   s   | j S )z_The service display name. The value is cached when this class
        is instantiated.
        )r¿   )rÁ   r)   r)   r*   r½   /  s    zWindowsService.display_namec             C   s   |   ¡ d S )zwThe fully qualified path to the service binary/exe file as
        a string, including command line arguments.
        rË   )r¾   )rÁ   r)   r)   r*   rË   5  s    zWindowsService.binpathc             C   s   |   ¡ d S )z,The name of the user that owns this service.rÌ   )r¾   )rÁ   r)   r)   r*   rÌ   ;  s    zWindowsService.usernamec             C   s   |   ¡ d S )zRA string which can either be "automatic", "manual" or
        "disabled".
        rÍ   )r¾   )rÁ   r)   r)   r*   rÍ   ?  s    zWindowsService.start_typec             C   s   |   ¡ d S )zzThe process PID, if any, else None. This can be passed
        to Process class to control the service's process.
        r¦   )rÏ   )rÁ   r)   r)   r*   r¦   G  s    zWindowsService.pidc             C   s   |   ¡ d S )zService status as a string.r¥   )rÏ   )rÁ   r)   r)   r*   r¥   M  s    zWindowsService.statusc             C   s   t t |  ¡ ¡ƒS )zService long description.)ry   rq   Zwinservice_query_descrr­   )rÁ   r)   r)   r*   ÚdescriptionQ  s    zWindowsService.descriptionc             C   s>   |   ¡ }| |  ¡ ¡ |  ¡ |d< |  ¡ |d< |  ¡ |d< |S )zUUtility method retrieving all the information above as a
        dictionary.
        r­   r½   r×   )r¾   ÚupdaterÏ   r­   r½   r×   )rÁ   Údr)   r)   r*   Úas_dictW  s    zWindowsService.as_dictN)r&   r'   r(   Ú__doc__rÂ   rÄ   rÆ   rÉ   rÊ   r¾   rÏ   Ú
contextlibÚcontextmanagerrÎ   r­   r½   rË   rÌ   rÍ   r¦   r¥   r×   rÚ   r)   r)   r)   r*   r¼   æ  s$   r¼   c                s   t  ˆ ¡‡ fdd„ƒ}|S )zqDecorator which translates bare OSError and WindowsError
    exceptions into NoSuchProcess and AccessDenied.
    c          
      sl   yˆ | f|ž|ŽS  t k
rf } z8|jtkr:t| j| jƒ‚|jtjkrTt| j| jƒ‚‚ W d d }~X Y nX d S )N)ÚOSErrorrÑ   rÒ   rÓ   r¦   rÀ   ÚESRCHrÕ   )rÁ   ÚargsÚkwargsrÖ   )Úfunr)   r*   Úwrapper˜  s    
z wrap_exceptions.<locals>.wrapper)Ú	functoolsÚwraps)râ   rã   r)   )râ   r*   Úwrap_exceptions”  s    
ræ   c               @   sÂ  e Zd ZdZddddgZdd„ Zdd	„ Zd
d„ Zee	dd„ ƒƒZ
edd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZdd„ Zdd„ Zedd„ ƒZedd„ ƒZdd„ Zed d!„ ƒZed"d#„ ƒZedPd%d&„ƒZed'd(„ ƒZed)d*„ ƒZed+d,„ ƒZed-d.„ ƒZed/d0„ ƒZed1d2„ ƒZed3d4„ ƒZed5d6„ ƒZed7d8„ ƒZedQd:d;„ƒZ ed<d=„ ƒZ!ed>d?„ ƒZ"e#rved@dA„ ƒZ$edBdC„ ƒZ%edDdE„ ƒZ&edFdG„ ƒZ'edHdI„ ƒZ(edJdK„ ƒZ)edLdM„ ƒZ*edNdO„ ƒZ+d$S )RÚProcessz1Wrapper class around underlying C implementation.r¦   rÀ   Ú_ppidÚ_cachec             C   s   || _ d | _d | _d S )N)r¦   rÀ   rè   )rÁ   r¦   r)   r)   r*   rÂ   ª  s    zProcess.__init__c             C   s   | j  | ¡ d S )N)Úoneshot_infoZcache_activate)rÁ   r)   r)   r*   Úoneshot_enter±  s    zProcess.oneshot_enterc             C   s   | j  | ¡ d S )N)rê   Zcache_deactivate)rÁ   r)   r)   r*   Úoneshot_exit´  s    zProcess.oneshot_exitc             C   s$   t  | j¡}t|ƒttƒks t‚|S )zOReturn multiple information about this process as a
        raw tuple.
        )rq   Z	proc_infor¦   rs   Ú	pinfo_mapr«   )rÁ   r‘   r)   r)   r*   rê   ·  s    zProcess.oneshot_infoc             C   sV   | j dkrdS | j dkrdS yttj |  ¡ ¡ƒS  tk
rP   tt | j ¡ƒS X dS )zbReturn process name, which on Windows is always the final
        part of the executable.
        r   zSystem Idle Processr   ZSystemN)	r¦   ry   rr   rh   ÚbasenameÚexerÓ   rq   Z	proc_name)rÁ   r)   r)   r*   r­   Á  s    

zProcess.namec             C   sF   t st | j¡}n,| jdkr*t| j| jƒ‚t | j¡}t|ƒ}t|ƒS )N)r   r   )Ú	IS_WIN_XPrq   Zproc_exer¦   rÓ   rÀ   ru   ry   )rÁ   rï   r)   r)   r*   rï   Ô  s    
zProcess.exec          
   C   sŽ   t jt jkrdyt j| jdd}W qt tk
r` } z"|jtkrNt j| jdd}n‚ W d d }~X Y qtX nt j| jdd}tr||S dd„ |D ƒS d S )NT)Zuse_pebFc             S   s   g | ]}t |ƒ‘qS r)   )ry   )r…   rt   r)   r)   r*   r‡   ô  s    z#Process.cmdline.<locals>.<listcomp>)	rq   ZWINVERZWINDOWS_8_1Zproc_cmdliner¦   rÞ   rÑ   rÒ   r   )rÁ   r‘   rÖ   r)   r)   r*   Úcmdlineã  s    
zProcess.cmdlinec             C   s6   t  | j¡}|r*ts*t|tƒs*tt|ƒƒ‚tt	|ƒƒS )N)
rq   Zproc_environr¦   r   rv   r   r«   r¤   r   ry   )rÁ   Zustrr)   r)   r*   Úenvironö  s    zProcess.environc             C   s4   yt ƒ | j S  tk
r.   t| j| jƒ‚Y nX d S )N)Úppid_mapr¦   ÚKeyErrorrÕ   rÀ   )rÁ   r)   r)   r*   Úppidý  s    zProcess.ppidc             C   s°   yt  | j¡S  tk
rª } z€|jtkr˜|  ¡ }|td  |td  |td  |td  |td  |td  |td  |td  |td	  |td
  f
S ‚ W d d }~X Y nX d S )NrH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   )rq   Zproc_memory_infor¦   rÞ   rÑ   rÒ   rê   rí   )rÁ   rÖ   Úinfor)   r)   r*   Ú_get_raw_meminfo  s     









zProcess._get_raw_meminfoc             C   s(   |   ¡ }|d }|d }t||f| Ž S )Nr+   r-   )r÷   rb   )rÁ   Útrc   rd   r)   r)   r*   Úmemory_info  s    zProcess.memory_infoc             C   s,   |   ¡ }t | j¡}|tƒ 9 }t||f Ž S )N)rù   rq   Zproc_memory_ussr¦   rz   re   )rÁ   Z	basic_memrf   r)   r)   r*   Úmemory_full_info#  s    
zProcess.memory_full_infoc          
   c   sÂ   yt  | j¡}W nV tk
rf } z8|jtkr:t| j| jƒ‚|jtjkrTt	| j| jƒ‚‚ W d d }~X Y nXX xT|D ]L\}}}}t
|ƒ}ts¤t|tƒsœtt|ƒƒ‚t|ƒ}t|ƒ}||||fV  qnW d S )N)rq   Zproc_memory_mapsr¦   rÞ   rÑ   rÒ   rÓ   rÀ   rß   rÕ   ru   r   rv   r   r«   r¤   ry   Úhex)rÁ   ÚrawrÖ   rœ   Zpermrh   rc   r)   r)   r*   Úmemory_maps*  s    
zProcess.memory_mapsc             C   s   t  | j¡S )N)rq   Z	proc_killr¦   )rÁ   r)   r)   r*   Úkill>  s    zProcess.killc             C   s   t  | j|¡ d S )N)rr   rþ   r¦   )rÁ   Zsigr)   r)   r*   Úsend_signalB  s    zProcess.send_signalNc             C   sæ   |d krt j}nt|d ƒ}ttdtjƒ}|d k	r<|ƒ | nd }yt  | j|¡}W n> t jk
rx   t|| j| jƒ‚Y n t j	k
r   d }Y nX d}xJt
| jƒs¦|S |rÆ|ƒ |krÆt|| j| jd‚t |¡ t|d dƒ}q˜W d S )Niè  Z	monotonicg-Cëâ6?)r¦   r­   r+   g{®Gáz¤?)rq   ZINFINITEÚintÚgetattrÚtimeZ	proc_waitr¦   ÚTimeoutExpiredrÀ   ZTimeoutAbandonedÚ
pid_existsZsleepÚmin)rÁ   ZtimeoutZcext_timeoutZtimerZstop_atZ	exit_codeZdelayr)   r)   r*   ÚwaitF  s&    	


zProcess.waitc             C   s2   | j dkrdS t | j ¡\}}t|ƒd t|ƒ S )N)r   r   zNT AUTHORITY\SYSTEMrn   )r¦   rq   Zproc_usernamery   )rÁ   ZdomainrX   r)   r)   r*   rÌ   q  s    
zProcess.usernamec          
   C   s`   | j dkrtƒ S yt | j ¡S  tk
rZ } z |jtkrH|  ¡ td  S ‚ W d d }~X Y nX d S )N)r   r   r@   )	r¦   r·   rq   Zproc_create_timerÞ   rÑ   rÒ   rê   rí   )rÁ   rÖ   r)   r)   r*   r@   x  s    

zProcess.create_timec             C   s   |   ¡ td  S )NrA   )rê   rí   )rÁ   r)   r)   r*   rA   „  s    zProcess.num_threadsc             C   s@   t  | j¡}g }x*|D ]"\}}}t |||¡}| |¡ qW |S )N)rq   Zproc_threadsr¦   r   Zpthreadr   )rÁ   rŠ   r»   Z	thread_idÚutimeZstimeÚntupler)   r)   r*   Úthreadsˆ  s    zProcess.threadsc          
   C   sv   yt  | j¡\}}W nP tk
rd } z2|jtkrR|  ¡ }|td  }|td  }n‚ W d d }~X Y nX t 	||dd¡S )Nr>   r?   g        )
rq   Zproc_cpu_timesr¦   rÞ   rÑ   rÒ   rê   rí   r   Z	pcputimes)rÁ   rX   rY   rÖ   rö   r)   r)   r*   r   ‘  s    
zProcess.cpu_timesc             C   s   t  | jd¡ d S )NT)rq   Úproc_suspend_or_resumer¦   )rÁ   r)   r)   r*   ÚsuspendŸ  s    zProcess.suspendc             C   s   t  | jd¡ d S )NF)rq   r
  r¦   )rÁ   r)   r)   r*   Úresume£  s    zProcess.resumec             C   s4   | j dkrt| j | jƒ‚t | j ¡}ttj |¡ƒS )N)r   r   )	r¦   rÓ   rÀ   rq   Zproc_cwdry   rr   rh   Únormpath)rÁ   rh   r)   r)   r*   Úcwd§  s    
zProcess.cwdc             C   sh   | j dkrg S tƒ }t | j ¡}x>|D ]6}t|ƒ}t|ƒr&tsFt|ƒ}t 	|d¡}| 
|¡ q&W t|ƒS )N)r   r   r#   )r¦   r›   rq   Zproc_open_filesru   r
   r   ry   r   Z	popenfilerž   rŸ   )rÁ   r‘   Zraw_file_namesZ_filer  r)   r)   r*   Ú
open_files°  s    

zProcess.open_filesÚinetc             C   s   t || jdS )N)r¡   )rš   r¦   )rÁ   r    r)   r)   r*   ÚconnectionsÃ  s    zProcess.connectionsc             C   s    t  | j¡}td k	rt|ƒ}|S )N)rq   Zproc_priority_getr¦   Úenumr%   )rÁ   Úvaluer)   r)   r*   Únice_getÇ  s    zProcess.nice_getc             C   s   t  | j|¡S )N)rq   Zproc_priority_setr¦   )rÁ   r  r)   r)   r*   Únice_setÎ  s    zProcess.nice_setc             C   s   t  | j¡S )N)rq   r"   r¦   )rÁ   r)   r)   r*   Ú
ionice_getÔ  s    zProcess.ionice_getc             C   s.   |rt dƒ‚|dkr td| ƒ‚t | j|¡S )Nz<set_proc_ionice() on Windows takes only 1 argument (2 given))r+   r   r   z9value must be 2 (normal), 1 (low) or 0 (very low); got %r)Ú	TypeErrorr™   rq   Zproc_io_priority_setr¦   )rÁ   r  Ú_r)   r)   r*   Ú
ionice_setØ  s    zProcess.ionice_setc             C   s’   yt  | j¡}W nx tk
rˆ } zZ|jtkrv|  ¡ }|td  |td  |td  |td  |td  |td  f}n‚ W d d }~X Y nX t|Ž S )NrB   rC   rD   rE   rF   rG   )	rq   Zproc_io_countersr¦   rÞ   rÑ   rÒ   rê   rí   rk   )rÁ   r‘   rÖ   rö   r)   r)   r*   Úio_countersâ  s    





zProcess.io_countersc             C   s    t  | j¡}|rtjS tjS d S )N)rq   Zproc_is_suspendedr¦   r   ZSTATUS_STOPPEDZSTATUS_RUNNING)rÁ   Z	suspendedr)   r)   r*   r¥   õ  s    zProcess.statusc             C   s   dd„ }t  | j¡}||ƒS )Nc                s   ‡ fdd„t dƒD ƒS )Nc                s   g | ]}d |> ˆ @ r|‘qS )r   r)   )r…   Úi)r†   r)   r*   r‡      s    zBProcess.cpu_affinity_get.<locals>.from_bitmask.<locals>.<listcomp>é@   )r   )r†   r)   )r†   r*   Úfrom_bitmaskÿ  s    z.Process.cpu_affinity_get.<locals>.from_bitmask)rq   Zproc_cpu_affinity_getr¦   )rÁ   r  Úbitmaskr)   r)   r*   Úcpu_affinity_getý  s    zProcess.cpu_affinity_getc             C   sr   dd„ }t tttƒ ƒƒƒ}x<|D ]4}||kr t|ttfƒsHtd| ƒ‚q td| ƒ‚q W ||ƒ}t	 
| j|¡ d S )Nc             S   s2   | st d|  ƒ‚d}x| D ]}|d| O }qW |S )Nzinvalid argument %rr   r+   )r™   )ÚlÚoutÚbr)   r)   r*   Ú
to_bitmask  s    
z,Process.cpu_affinity_set.<locals>.to_bitmaskz&invalid CPU %r; an integer is requiredzinvalid CPU %r)rŸ   Úrangers   r   rv   r   r   r  r™   rq   Zproc_cpu_affinity_setr¦   )rÁ   r  r#  ZallcpusZcpur  r)   r)   r*   Úcpu_affinity_set  s    
zProcess.cpu_affinity_setc          
   C   sP   yt  | j¡S  tk
rJ } z |jtkr8|  ¡ td  S ‚ W d d }~X Y nX d S )Nr<   )rq   Zproc_num_handlesr¦   rÞ   rÑ   rÒ   rê   rí   )rÁ   rÖ   r)   r)   r*   r<     s    
zProcess.num_handlesc             C   s   |   ¡ td  }t |d¡S )Nr=   r   )rê   rí   r   Zpctxsw)rÁ   r=   r)   r)   r*   Únum_ctx_switches&  s    zProcess.num_ctx_switches)N)r  ),r&   r'   r(   rÛ   Ú	__slots__rÂ   rë   rì   ræ   r   rê   r­   rï   rñ   rò   rõ   r÷   rù   rú   rý   rþ   rÿ   r  rÌ   r@   rA   r	  r   r  r  r  r  r  r  r  ÚHAS_PROC_IO_PRIORITYr  r  r  r¥   r  r%  r<   r&  r)   r)   r)   r*   rç   ¥  sT   	
*		
	rç   )r#   )‘rÛ   rÜ   rÑ   rä   rr   rR   r  Úcollectionsr   Ú r   r   rq   ÚImportErrorrÖ   rw   ÚlowerÚ
startswithrS   rÐ   ÚRuntimeErrorr   r   r	   r
   r   r   r   r   r   r   Z_compatr   r   r   r   r   r   r   r   r   r   r   Úversion_infor  Z__extra__all__r    Ú	frozensetZEPERMZEACCESZERROR_ACCESS_DENIEDrÒ   ZERROR_INVALID_NAMEZERROR_SERVICE_DOES_NOT_EXISTrÔ   r¬   r(  r!   ÚIntEnumr$   ZMIB_TCP_STATE_ESTABZCONN_ESTABLISHEDZMIB_TCP_STATE_SYN_SENTZCONN_SYN_SENTZMIB_TCP_STATE_SYN_RCVDZCONN_SYN_RECVZMIB_TCP_STATE_FIN_WAIT1ZCONN_FIN_WAIT1ZMIB_TCP_STATE_FIN_WAIT2ZCONN_FIN_WAIT2ZMIB_TCP_STATE_TIME_WAITZCONN_TIME_WAITZMIB_TCP_STATE_CLOSEDZ
CONN_CLOSEZMIB_TCP_STATE_CLOSE_WAITZCONN_CLOSE_WAITZMIB_TCP_STATE_LAST_ACKZCONN_LAST_ACKZMIB_TCP_STATE_LISTENZCONN_LISTENZMIB_TCP_STATE_CLOSINGZCONN_CLOSINGZMIB_TCP_STATE_DELETE_TCBZPSUTIL_CONN_NONEZ	CONN_NONEr   r%   ÚglobalsrØ   Ú__members__r±   rí   rÕ   ZZombieProcessrÓ   r  ZWIN_10ZWIN_8ZWIN_7ZWIN_SERVER_2008Z	WIN_VISTAZWIN_SERVER_2003ZWIN_XPrV   rð   rW   r]   rb   Ú_fieldsre   rg   ro   ri   rk   ru   ry   rz   r~   r   Zdisk_io_countersr„   rˆ   r   r   r“   r”   r•   r–   rš   r©   r°   r²   r´   r¹   r·   rº   r   r   Úobjectr¼   Zpidsr  ró   ræ   rç   r)   r)   r)   r*   Ú<module>   s8  









	

	
 *