
    ɧd                         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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 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& nn# e'$ rfZ( e)e(          *                                +                    d          r0 ej,                    d         d k     rd!Z-e-d"z  Z-e-d#z  Z- e.e-           dZ([(ww xY wej/        d$k    rddl0Z0ndZ0g d%Z1d&Z2d'Z3d(ej4        v Z5e0d)Z6n e0j7        d*d+d)i          Z8e8j6        Z6e&j9        ej:        e&j;        ej<        e&j=        ej>        e&j?        ej@        e&jA        ejB        e&jC        ejD        e&jE        ejF        e&jG        ejH        e&jI        ejJ        e&jK        ejL        e&jM        ejN        e&jO        e2e&jP        ejQ        iZRe05 G d, d-e0j7                  ZS eT            U                    eSjV                   e0	dZWdZXd.ZYd/ZZn5 G d0 d1e0j7                  Z[ eT            U                    e[jV                    e\di d2dd3dd4d.d5d/d6d7d8d9d:d d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXZ] e	dYg dZ          Z^ e	d[g d\          Z_ e	d]g d^          Z` e	d_e`ja        d`z             Zb e	dadbdcg          Zc e	dddedfd                    ecja                  z             Ze e	dgg dh          Zf edij          dk             Zgdl Zhedm             Zidn Zjdo Zke&jl        Zldp Zmdq Zndr Zods Zpdt Zqdu Zrdv Zsdw Ztdxaudy ZvddzZwd{ Zxd| Zyd} Zzd~ Z{da|d Z}d Z~d Zd Z G d de          Ze&j        Ze&j        Ze&j        Zd ZddZd Zd Z G d de          ZdS )z Windows platform implementation.    N)
namedtuple   )_common)ENCODING)ENCODING_ERRS)AccessDenied)NoSuchProcess)TimeoutExpired)	conn_tmap)conn_to_ntuple)debug)isfile_strict)memoize)memoize_when_activated)parse_environ_block)usage_percent)PY3)long)	lru_cacherange)unicode)ABOVE_NORMAL_PRIORITY_CLASS)BELOW_NORMAL_PRIORITY_CLASS)HIGH_PRIORITY_CLASS)IDLE_PRIORITY_CLASS)NORMAL_PRIORITY_CLASS)REALTIME_PRIORITY_CLASS)_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)      )win_service_iterwin_service_getr   r   r   r   r   r   IOPRIO_VERYLOW
IOPRIO_LOWIOPRIO_NORMALIOPRIO_HIGHCONN_DELETE_TCBAF_LINK
DELETE_TCBi+  __pypy__AddressFamilyr*   c                   &    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        1lib/python3.11/site-packages/psutil/_pswindows.pyr0   r0   n   s4        &A#&A#11 5"9r5   r0      r!   c                       e Zd ZdZdZdZdZdS )
IOPriorityr   r   r7   r!   N)r1   r2   r3   r%   r&   r'   r(   r4   r5   r6   r9   r9   ~   s"        
r5   r9   num_handlesctx_switches	user_timekernel_timecreate_timer"   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   	scputimes)usersystemidle	interruptdpcsvmem)total	availablepercentusedfreepmem)rssvmsrL   rN   rP   rR   rT   peak_nonpaged_poolnonpaged_poolrZ   r\   privatepfullmem)usspmmap_groupedpathrm   	pmmap_extzaddr perms  pio)
read_countwrite_count
read_byteswrite_bytesother_countother_bytesi   )maxsizec                     d                     |                     d          dd                   }t          j        |          }| t	          |          d         }t
          j                             ||          S )zConvert paths using native DOS format like:
        "\Device\HarddiskVolume1\Windows\systemew\file.txt"
    into:
        "C:\Windows\systemew\file.txt"
    \Nr!   )joinsplitcextQueryDosDevicelenosru   )srawdrivedriveletter	remainders       r6   convert_dos_pathr      sb     yyrr*++H%h//K#h--..!I7<<Y///r5   c                     t           r| S t          | t                    r| S |                     t          t
                    S )zmEncode a unicode string to a byte string by using the default fs
    encoding + "replace" error handler.
    )r   
isinstancestrencoder   r   )r   s    r6   py2_strencoder      s<      5a 	5H88Hm444r5   c                  (    t          j                    S N)r   getpagesizer4   r5   r6   r   r      s    r5   c                      t          j                    } | \  }}}}}}|}|}|}	||z
  }
t          ||z
  |d          }t          ||||
|	          S )z&System virtual memory as a namedtuple.r   round_)r   virtual_memr   rf   )memtotphys	availphystotpagef
availpageftotvirtfreevirtrg   availrk   rj   ri   s               r6   virtual_memoryr      sh    



CBE?GY*gxEED5=DUU]U1===Gwd333r5   c                      t          j                    } | d         }| d         }| d         }| d         }||z
  }t          |||z
            }||z
  }t          ||d          }t	          j        ||||dd          S )z=Swap system memory as a (total, used, free, sin, sout) tuple.r   r   r7   r!   r   )r   r   minr   r   sswap)	r   
total_phys	free_phystotal_systemfree_systemrg   rk   rj   ri   s	            r6   swap_memoryr      s    



CQJAIq6La&K :%EukI-..D4<DD%222G=dGQ:::r5   c                     t           r1t          | t                    r|                     t          d          } t          j        |           \  }}||z
  }t          ||d          }t          j	        ||||          S )z'Return disk usage associated with path.strict)errorsr   r   )
r   r   bytesdecoder   r   
disk_usager   r   
sdiskusage)ru   rg   rk   rj   ri   s        r6   r   r     sy    
 6z$&& 6 {{8H{55/$''KE44<DD%222GeT4999r5   c                 B    t          j        |           }d |D             S )zReturn disk partitions.c                 *    g | ]}t          j        | S r4   )r   	sdiskpart.0xs     r6   
<listcomp>z#disk_partitions.<locals>.<listcomp>  s     333aGq!333r5   )r   disk_partitions)allrawlists     r6   r   r     s&    "3''G3373333r5   c                      t          j                    \  } }}t          d t          t          j                     D              }t          | |||j        |j                  S )z)Return system CPU times as a named tuple.c                 ,    g | ]}t          |          S r4   )sum)r   ns     r6   r   zcpu_times.<locals>.<listcomp>)  s    KKK1AKKKr5   )r   	cpu_timesr`   zipper_cpu_timesrd   re   )ra   rb   rc   percpu_summeds       r6   r   r   #  se    ))D&$ KKT5G5I5I0JKKKLMT64",m.?A A Ar5   c                      g } t          j                    D ]0\  }}}}}t          |||||          }|                     |           1| S )z6Return system per-CPU times as a list of named tuples.)r   r   r`   append)retra   rb   rc   rd   re   items          r6   r   r   .  sY    
C.2.@.B.B  *fdIsvtY<<

4Jr5   c                  (    t          j                    S )z0Return the number of logical CPUs in the system.)r   cpu_count_logicalr4   r5   r6   r   r   7  s    !###r5   c                  (    t          j                    S )z-Return the number of CPU cores in the system.)r   cpu_count_coresr4   r5   r6   r   r   <  s    !!!r5   c                  d    t          j                    \  } }}}d}t          j        | |||          S )zReturn CPU statistics.r   )r   	cpu_statsr   	scpustats)r;   
interruptsdpcssyscallssoft_interruptss        r6   r   r   A  s;    /3~/?/?,L*dHO\:%' ' 'r5   c                      t          j                    \  } }d}t          j        t	          |           |t	          |                    gS )zMReturn CPU frequency.
    On Windows per-cpu frequency is not supported.
            )r   cpu_freqr   scpufreqfloat)currmax_min_s      r6   r   r   I  s<     JD$DU4[[$d<<==r5   Fc                      t           st          j                     da t          j                    } t	          d | D                       S )z~Return the number of processes in the system run queue averaged
    over the last 1, 5, and 15 minutes respectively as a tupleTc                 .    g | ]}t          |d           S )r7   )round)r   loads     r6   r   zgetloadavg.<locals>.<listcomp>`  s     777T%a..777r5   )_loadavg_inititializedr   init_loadavg_counter
getloadavgtuple)	raw_loadss    r6   r   r   U  sM    
 " &!###!% !!I77Y777888r5   c                    | t           vr7t          d| dd                    d t           D                                 t           |          \  }}t          j        |||          }t                      }|D ]E}|\  }}}	}
}}}t          |||	|
||t          |dk    r|nd          }|                    |           Ft          |          S )zReturn socket connections.  If pid == -1 return system-wide
    connections (as opposed to connections opened by one process only).
    zinvalid z kind argument; choose between z, c                 ,    g | ]}t          |          S r4   )reprr   s     r6   r   z#net_connections.<locals>.<listcomp>n  s    ,H,H,HT!WW,H,H,Hr5   r-   N)pid)
r   
ValueErrorr   r   net_connectionssetr   TCP_STATUSESaddlist)kind_pidfamiliestypesr   r   r   fdfamtypeladdrraddrstatusr   nts                  r6   r   r   h  s     9 Lj DD$)),H,Hi,H,H,H"I"I"IK L L 	LoOHe"4599G
%%C  370CueVSBT5%'+rz ;t= = =99r5   c                  |   i } t          j                    }|                                D ]\  }}t          s;t	          |t
                    sJ t          |                      t          |          }|\  }}}}t          t          d          rt          j
        |          }t          j        ||||          | |<   | S )z)Get NIC stats (isup, duplex, speed, mtu).	NicDuplex)r   net_if_statsitemsr   r   r   r   r   hasattrr   r   	snicstats)r   rawdictnamer   isupduplexspeedmtus           r6   r   r   z  s    
C!!G}} @ @e 	'dG,,88d4jj888 &&D#( feS7K(( 	/&v..F%dFE3??D		Jr5   c                  ~    t          j                    } t          d |                                 D                       S )zsReturn network I/O statistics for every network interface
    installed on the system as a dict of raw tuples.
    c                 6    g | ]\  }}t          |          |fS r4   r   )r   kvs      r6   r   z#net_io_counters.<locals>.<listcomp>  s)    ???41a-""A&???r5   )r   net_io_countersdictr   r   s    r6   r	  r	    s7     

 
 C??399;;???@@@r5   c                      g } t          j                    D ]>}t          |          }t          |d                   |d<   |                     |           ?| S )z,Return the addresses associated to each NIC.r   )r   net_if_addrsr   r   r   )r   r   s     r6   r  r    sY    
C"$$  U q**a

5Jr5   c                      t          j                    \  } }}}| dk    }t          |dz            }t          |dz            }|rdS |s|rt          j        }n|dk    rt          j        }t          j        |||          S )zReturn battery information.r      rE   Nr-   )r   sensors_batteryboolr   POWER_TIME_UNLIMITEDPOWER_TIME_UNKNOWNsbattery)acline_statusflagsri   secsleftpower_plugged
no_batterychargings          r6   r  r    s    
 /3.B.D.D+M5'8!Q&Meck""JEAIH t . ./	R .-GX}===r5   c                      t          t          j                              } t          | t          z
            dk    rt          S | a| S )z:The system boot time expressed in seconds since the epoch.r   )r   r   	boot_timeabs_last_btimer  s    r6   r  r    sC       
!
!C
3" 
r5   c                      g } t          j                    }|D ]D}|\  }}}t          |          }t          j        |d||d          }|                     |           E| S )z:Return currently connected users as a list of namedtuples.N)r   usersr   r   suserr   )retlistr   r   ra   hostnametstampr   s          r6   r   r     sk    GjllG  !%hT""]4x>>rNr5   c               #      K   t          j                    D ]1\  } }t          t          |           t          |                    V  2dS )z*Yields a list of WindowsService instances.N)r   winservice_enumerateWindowsServicer   )r   display_names     r6   r#   r#     sZ      "799 O Ol]400-2M2MNNNNNNO Or5   c                 d    t          | d          }|                                d         |_        |S )zBOpen a Windows service and return it as a WindowsService instance.Nr(  )r'  _query_config_display_name)r   services     r6   r$   r$     s/    T4((G#1133NCGNr5   c                       e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
ej        d	             Zd
 Zd Zd Zd Zd Zd Zd Zd Zd ZdS )r'  z(Represents an installed Windows service.c                 "    || _         || _        d S r   )_namer+  )selfr   r(  s      r6   __init__zWindowsService.__init__  s    
)r5   c                 H    d| j         d| j        d}| j        j        |S )Nz(name=z, display_name=))r/  r+  	__class__r1   )r0  detailss     r6   __str__zWindowsService.__str__  s4     JJJ***,00''::r5   c                 R    d|                                  dt          |           dS )N<z at >)r6  idr0  s    r6   __repr__zWindowsService.__repr__  s%     #||~~~~r$xxxx88r5   c                 Z    t          |t                    st          S | j        |j        k    S r   )r   r'  NotImplementedr/  r0  others     r6   __eq__zWindowsService.__eq__  s+     %00 	"!!zU[((r5   c                     | |k     S r   r4   r?  s     r6   __ne__zWindowsService.__ne__  s    5=  r5   c                 $   |                                  5  t          j        | j                  \  }}}}d d d            n# 1 swxY w Y   t	          t          |          t          |          t          |          t          |                    S )N)r(  binpathusername
start_type)_wrap_exceptionsr   winservice_query_configr/  r
  r   )r0  r(  rE  rF  rG  s        r6   r*  zWindowsService._query_config  s    ""$$ 	9 	9,TZ88 8L'8Z	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 &|44!'**"8,,$Z00	2 2 2 	2s   A  AAc                     |                                  5  t          j        | j                  \  }}d d d            n# 1 swxY w Y   |dk    rd }t	          ||          S )Nr   )r   r   )rH  r   winservice_query_statusr/  r
  )r0  r   r   s      r6   _query_statuszWindowsService._query_status  s    ""$$ 	C 	C6tzBBKFC	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C!8 	C6s++++s   >AAc              #     K   	 dV  dS # t           $ rr}t          |          rt          d| j        d| j        z            |j        t
          j        t
          j        fv rt          d| j        d| j        z             d}~ww xY w)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))	OSErroris_permission_errr   r/  winerrorr   ERROR_INVALID_NAMEERROR_SERVICE_DOES_NOT_EXISTr	   r0  errs     r6   rH  zWindowsService._wrap_exceptions  s      
	EEEEE 	 	 	 %% "4:L
#$ $ $ $ $"9"&"C"E E #4:4tzAC C C C 	s   
 
BA-BBc                     | j         S )zThe 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;  s    r6   r   zWindowsService.name*  s    
 zr5   c                     | j         S )z_The service display name. The value is cached when this class
        is instantiated.
        )r+  r;  s    r6   r(  zWindowsService.display_name1  s     !!r5   c                 6    |                                  d         S )zwThe fully qualified path to the service binary/exe file as
        a string, including command line arguments.
        rE  r*  r;  s    r6   rE  zWindowsService.binpath7  s     !!##I..r5   c                 6    |                                  d         S )z,The name of the user that owns this service.rF  rZ  r;  s    r6   rF  zWindowsService.username=  s    !!##J//r5   c                 6    |                                  d         S )zRA string which can either be "automatic", "manual" or
        "disabled".
        rG  rZ  r;  s    r6   rG  zWindowsService.start_typeA  s     !!##L11r5   c                 6    |                                  d         S )zzThe process PID, if any, else None. This can be passed
        to Process class to control the service's process.
        r   rL  r;  s    r6   r   zWindowsService.pidI  s     !!##E**r5   c                 6    |                                  d         S )zService status as a string.r   r^  r;  s    r6   r   zWindowsService.statusO  s    !!##H--r5   c                 h    t          t          j        |                                                     S )zService long description.)r   r   winservice_query_descrr   r;  s    r6   descriptionzWindowsService.descriptionS  s#    T8EEFFFr5   c                    |                                  }|                    |                                            |                                 |d<   |                                 |d<   |                                 |d<   |S )zUUtility method retrieving all the information above as a
        dictionary.
        r   r(  rb  )r*  updaterL  r   r(  rb  )r0  ds     r6   as_dictzWindowsService.as_dictY  su       	##%%&&&IIKK&	 --//.++---r5   N)r1   r2   r3   __doc__r1  r6  r<  rA  rC  r*  rL  
contextlibcontextmanagerrH  r   r(  rE  rF  rG  r   r   rb  rf  r4   r5   r6   r'  r'    s,       22* * *; ; ;
9 9 9) ) )! ! !	2 	2 	2, , ,   ,  " " "/ / /0 0 02 2 2+ + +. . .G G G	 	 	 	 	r5   r'  c                     t          | t                    s
J |             | j        t          j        t          j        fv p(t          | dd          t          j        t          j        fv S )z*Return True if this is a permission error.rR  r-   )	r   rP  errnoEPERMEACCESgetattrr   ERROR_ACCESS_DENIEDERROR_PRIVILEGE_NOT_HELD)excs    r6   rQ  rQ    sg    c7##((S((( 9el33 HZ$$)A)-)F)H 	HHr5   c                     t          | t                    s
J |             t          |           rt          ||          S | j        t          j        k    rt          ||          S | )z3Convert OSError into NoSuchProcess or AccessDenied.r   r   )r   rP  rQ  r   rk  ESRCHr	   )rq  r   r   s      r6   convert_oserrorru    sl    c7##((S((( 0$////
yEK 140000
Ir5   c                 F     t          j                    fd            }|S )zDDecorator which converts OSError into NoSuchProcess or AccessDenied.c                 z    	  | g|R i |S # t           $ r!}t          || j        | j                  d }~ww xY w)Nrs  )rP  ru  r   r/  )r0  argskwargsrV  funs       r6   wrapperz wrap_exceptions.<locals>.wrapper  se    	F3t-d---f--- 	F 	F 	F!#48$*EEEE	Fs    
:5:	functoolswrapsrz  r{  s   ` r6   wrap_exceptionsr    s=    _SF F F F F
 Nr5   c                 F     t          j                    fd            }|S )zWorkaround for https://github.com/giampaolo/psutil/issues/875.
    See: https://stackoverflow.com/questions/4457745#4457745
    c                 :   d}d}t          |          D ]a}	  	| g|R i |c S # t          $ rD}|}|j        t          k    r,t	          j        |           t          |dz  d          }Y d }~Y d }~ww xY w	d|d|}t          | j        | j	        |          )N-C6?!   r7   {Gz?z	 retried z: times, converted to AccessDenied as it's still returning rN  )
r   WindowsErrorrR  ERROR_PARTIAL_COPYtimesleepr   r   r   r/  )
r0  rx  ry  delaytimesr   _rV  rO  rz  s
            r6   r{  z)retry_error_partial_copy.<locals>.wrapper  s    u 	G 	GA	s41$111&11111   <#55 Ju%%%	400EHHHH ),UUUCC9C48$*#FFFFs   &
A49A/.A//A4r|  r  s   ` r6   retry_error_partial_copyr    s?     _SG G G G G$ Nr5   c                      e Zd ZdZg dZd Zd Zd Zed             Z	d Z
eed                         Zeed	                         Zeed
                         Zd Zd Zed             Zed             Zd Zed             Zed             Zed)d            Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zeed                         Zed             Z ed*d            Z!ed             Z"ed              Z#ed!             Z$ed"             Z%ed#             Z&ed$             Z'ed%             Z(ed&             Z)ed'             Z*ed(             Z+dS )+Processz1Wrapper class around underlying C implementation.)r   r/  _ppid_cachec                 0    || _         d | _        d | _        d S r   )r   r/  r  )r0  r   s     r6   r1  zProcess.__init__  s    



r5   c                 n    | j                             |            | j                            |            d S r   )
_proc_infocache_activateexer;  s    r6   oneshot_enterzProcess.oneshot_enter  s4    &&t,,,%%%%%r5   c                 n    | j                             |            | j                            |            d S r   )r  cache_deactivater  r;  s    r6   oneshot_exitzProcess.oneshot_exit  s4    ((...!!$'''''r5   c                     t          j        | j                  }t          |          t          t                    k    sJ |S )zOReturn multiple information about this process as a
        raw tuple.
        )r   	proc_infor   r   	pinfo_mapr0  r   s     r6   r  zProcess._proc_info  s7    
 nTX&&3xx3y>>))))
r5   c                     | j         dk    rdS | j         dk    rdS t          j                            |                                           S )zbReturn process name, which on Windows is always the final
        part of the executable.
        r   zSystem Idle Processr"   System)r   r   ru   basenamer  r;  s    r6   r   zProcess.name  sI     8q= 	)((8q= 	8w

+++r5   c                    t           re	 t          j        | j                  }nc# t          $ r=}|j        dk    r,t          d|z             t          | j        | j                   d }~ww xY wt          j        | j                  }t          st          |          }|                    d          rt          |          S |S )N   z%r translated into AccessDeniedr   )PYPYr   proc_exer   r  rk  r   r   r/  r   r   
startswithr   )r0  r  rV  s      r6   r  zProcess.exe  s      	*mDH--    9? =;cABBB&tx<<< -))C 	%$$C>>$ 	)#C(((
s   # 
A*8A%%A*c                 V   t           j        t           j        k    r`	 t          j        | j        d          }n^# t
          $ r6}t          |          rt          j        | j        d          }n Y d }~n#d }~ww xY wt          j        | j        d          }t          r|S d |D             S )NT)use_pebFc                 ,    g | ]}t          |          S r4   r  )r   r   s     r6   r   z#Process.cmdline.<locals>.<listcomp>   s     222M!$$222r5   )r   WINVERWINDOWS_8_1proc_cmdliner   rP  rQ  r   )r0  r   rV  s      r6   cmdlinezProcess.cmdline  s     ;$** 	<'$???   $S)) +DHeDDDCC CCCC #DHd;;;C 	3J22c2222s   8 
A8,A33A8c                     t          j        | j                  }|r3t          s,t	          |t
                    sJ t          |                      t          t          |                    S r   )	r   proc_environr   r   r   r   r   r   r   )r0  ustrs     r6   environzProcess.environ"  s_      ** 	9 	9dG,,88d4jj888"=#6#6777r5   c                     	 t                      | j                 S # t          $ r t          | j        | j                  w xY wr   )ppid_mapr   KeyErrorr	   r/  r;  s    r6   ppidzProcess.ppid*  sG    	6::dh'' 	6 	6 	6$*555	6s	    %A c                    	 t          j        | j                  S # t          $ r}t	          |          r|                                 }|t          d                  |t          d                  |t          d                  |t          d                  |t          d                  |t          d                  |t          d                  |t          d                  |t          d	                  |t          d
                  f
cY d }~S  d }~ww xY w)NrL   rN   rP   rR   rT   rV   rX   rZ   r\   r^   )r   proc_memory_infor   rP  rQ  r  r  )r0  rV  infos      r6   _get_raw_meminfozProcess._get_raw_meminfo0  s   	(222 	 	 	 %%  ((#456;/06*+#456<01#89:#345:./?34=12       #	s!    
D	CD=D	DD	c                 f    |                                  }|d         }|d         }t          ||f|z    S )Nr7   rC   )r  rl   )r0  trm   rn   s       r6   memory_infozProcess.memory_infoF  s;    
 !!##ddc3\A%&&r5   c                     |                                  }t          j        | j                  }|t	                      z  }t          ||fz    S r   )r  r   proc_memory_ussr   r   rr   )r0  	basic_memrs   s      r6   memory_full_infozProcess.memory_full_infoP  sE    $$&&	"48,,{}}cW,--r5   c              #   $  K   	 t          j        | j                  }|D ]C\  }}}}t          |          }t          st          |          }t          |          }||||fV  Dd S # t          $ r }t          || j        | j	                  d }~ww xY wr   )
r   proc_memory_mapsr   r   r   r   hexrP  ru  r/  )r0  rawaddrpermru   rm   rV  s          r6   memory_mapszProcess.memory_mapsW  s      	.'11C *- . .%dD#'-- /(..D4yyT4-----. .  	= 	= 	= "#tx<<<	=s   A% %
B/B

Bc                 4    t          j        | j                  S r   )r   	proc_killr   r;  s    r6   killzProcess.killf  s    ~dh'''r5   c                 :   |t           j        k    rt          j        | j                   d S |t          t           dt                                t          t           dt                                fv rt          j        | j        |           d S t          d          )NCTRL_C_EVENTCTRL_BREAK_EVENTzPonly SIGTERM, CTRL_C_EVENT and CTRL_BREAK_EVENT signals are supported on Windows)
signalSIGTERMr   r  r   rn  objectr   r  r   )r0  sigs     r6   send_signalzProcess.send_signalj  s    &.  		,N48$$$$$WV^VXX>>V%7BBD D 	,GDHc"""""+, , ,r5   Nc                 8   |t           j        }nt          |dz            }t          t          dt          j                  }| |            |z   nd }	 t          j        | j        |          }n@# t           j        $ r t          || j        | j                  t           j	        $ r d }Y nw xY wd}	 t          | j                  s|S |r* |            |k    rt          || j        | j                  t	          j        |           t          |dz  d          }j)Ni  	monotonicr  Trs  r7   r  )r   INFINITEintrn  r  	proc_waitr   r
   r/  TimeoutAbandoned
pid_existsr  r   )r0  timeoutcext_timeouttimerstop_at	exit_coder  s          r6   waitzProcess.waitw  sG    	/=LL w~..Lk4955'.D%%''G##	 tx>>II" 	@ 	@ 	@ $(DJ???$ 		 		 		 III		 	)dh'' !   M5577g- M$W$(LLLLJu	4((E	)s   A/ /:B,+B,c                     | j         dv rdS t          j        | j                   \  }}t          |          dz   t          |          z   S )Nr   r"   zNT AUTHORITY\SYSTEMr   )r   r   proc_usernamer   )r0  domainra   s      r6   rF  zProcess.username  sM    8v 	*)))$(33V$$t+mD.A.AAAr5   c                     	 t          j        | j                  \  }}}|S # t          $ r?}t	          |          r*|                                 t          d                  cY d }~S  d }~ww xY w)Nr>   )r   
proc_timesr   rP  rQ  r  r  )r0  ra   rb   createdrV  s        r6   r>   zProcess.create_time  s    	$(ODH$=$=!D&'N 	 	 	 %% C((=)ABBBBBBB	s    ! 
A*3A%A*$A%%A*c                 L    |                                  t          d                  S )Nr?   )r  r  r;  s    r6   r?   zProcess.num_threads  s      =!9::r5   c                     t          j        | j                  }g }|D ]1\  }}}t          j        |||          }|                    |           2|S r   )r   proc_threadsr   r   pthreadr   )r0  r   r"  	thread_idutimestimentuples          r6   threadszProcess.threads  s\    #DH--'. 	# 	##Iue_Yu==FNN6""""r5   c                 0   	 t          j        | j                  \  }}}na# t          $ rT}t	          |          s |                                 }|t          d                  }|t          d                  }Y d }~nd }~ww xY wt          j        ||dd          S )Nr<   r=   r   )	r   r  r   rP  rQ  r  r  r   	pcputimes)r0  ra   rb   r  rV  r  s         r6   r   zProcess.cpu_times  s    	4$(ODH$=$=!D&'' 	4 	4 	4$S)) ??$$D	+./D)M23FFFFFF	4  vsC888s     
A>A
A99A>c                 :    t          j        | j        d           d S )NTr   proc_suspend_or_resumer   r;  s    r6   suspendzProcess.suspend  s    #DHd33333r5   c                 :    t          j        | j        d           d S )NFr  r;  s    r6   resumezProcess.resume  s    #DHe44444r5   c                     | j         dv rt          | j         | j                  t          j        | j                   }t          t          j                            |                    S )Nr  )	r   r   r/  r   proc_cwdr   r   ru   normpath)r0  ru   s     r6   cwdzProcess.cwd  sX     8v 	5tx444 }TX&&RW--d33444r5   c                 J   | j         dv rg S t                      }t          j        | j                   }|D ]`}t	          |          }t          |          r@t          st          |          }t          j	        |d          }|
                    |           at          |          S )Nr  r-   )r   r   r   proc_open_filesr   r   r   r   r   	popenfiler   r   )r0  r   raw_file_names_filer  s        r6   
open_fileszProcess.open_files  s    8v 	Iee
 -dh77# 	  	 E$U++EU##   1)%00E *5"55Cyyr5   inetc                 .    t          || j                  S )N)r   )r   r   )r0  r   s     r6   connectionszProcess.connections  s    t$(3333r5   c                 d    t          j        | j                  }t          t	          |          }|S r   )r   proc_priority_getr   enumr0   r0  values     r6   nice_getzProcess.nice_get  s,    &tx00 	$UOOEr5   c                 6    t          j        | j        |          S r   )r   proc_priority_setr   r  s     r6   nice_setzProcess.nice_set  s    %dh666r5   c                 d    t          j        | j                  }t          t	          |          }|S r   )r   proc_io_priority_getr   r  r9   r  s     r6   
ionice_getzProcess.ionice_get  s,    '11 	"S//C
r5   c                     |rt          d          |t          t          t          t          fvrt          d|z            t          j        | j        |           d S )Nz&value argument not accepted on Windowsz%s is not a valid priority)		TypeErrorr%   r&   r'   r(   r   r   proc_io_priority_setr   )r0  ioclassr	  s      r6   
ionice_setzProcess.ionice_set
  se     	FDEEE>:}&( ( 	E9GCDDD!$(G44444r5   c           	         	 t          j        | j                  }n# t          $ r}t	          |          s |                                 }|t          d                  |t          d                  |t          d                  |t          d                  |t          d                  |t          d                  f}Y d }~nd }~ww xY wt          | S )NrA   rB   rD   rF   rH   rJ   )r   proc_io_countersr   rP  rQ  r  r  rx   )r0  r   rV  r  s       r6   io_counterszProcess.io_counters  s    	'11CC 	 	 	$S)) ??$$DY{+,Y{+,Y{+,Y{+,Y012Y012CCCCCC		 Cys    
CBB==Cc                 h    t          j        | j                  }|rt          j        S t          j        S r   )r   proc_is_suspendedr   r   STATUS_STOPPEDSTATUS_RUNNING)r0  	suspendeds     r6   r   zProcess.status%  s.    *4844	 	*))))r5   c                 P    d }t          j        | j                  } ||          S )Nc                 :      fdt          d          D             S )Nc                 $    g | ]}d |z  z  
|S )r   r4   )r   ir   s     r6   r   zBProcess.cpu_affinity_get.<locals>.from_bitmask.<locals>.<listcomp>0  s&    999!Q!VqL9A999r5   @   r   )r   s   `r6   from_bitmaskz.Process.cpu_affinity_get.<locals>.from_bitmask/  s#    9999uRyy9999r5   )r   proc_cpu_affinity_getr   )r0  r#  bitmasks      r6   cpu_affinity_getzProcess.cpu_affinity_get-  s3    	: 	: 	:,TX66|G$$$r5   c                 R   d }t          t          t          t                                                    }|D ]F}||vr@t	          |t
          t          f          st          d|z            t          d|z            G ||          }t          j
        | j        |           d S )Nc                 L    | st          d| z            d}| D ]
}|d|z  z  }|S )Nzinvalid argument %rr   r7   )r   )lsoutbs      r6   
to_bitmaskz,Process.cpu_affinity_set.<locals>.to_bitmask6  sF     = !6!;<<<C  qAvJr5   z&invalid CPU %r; an integer is requiredzinvalid CPU %r)r   r   r   r   r   r  r   r  r   r   proc_cpu_affinity_setr   )r0  r	  r,  allcpuscpur%  s         r6   cpu_affinity_setzProcess.cpu_affinity_set4  s    	 	 	 uS112233 	= 	=C'! =!#T{33 =#@3FH H H %%5%;<<<= *U##"48W55555r5   c                     	 t          j        | j                  S # t          $ r?}t	          |          r*|                                 t          d                  cY d }~S  d }~ww xY w)Nr:   )r   proc_num_handlesr   rP  rQ  r  r  rU  s     r6   r:   zProcess.num_handlesM  sv    	(222 	 	 	 %% C((=)ABBBBBBB	s     
A$3AA$AA$c                 v    |                                  t          d                  }t          j        |d          S )Nr;   r   )r  r  r   pctxsw)r0  r;   s     r6   num_ctx_switcheszProcess.num_ctx_switchesV  s-    ((>)BC~lA...r5   r   )r  ),r1   r2   r3   rg  	__slots__r1  r  r  r   r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  rF  r>   r?   r  r   r  r  r  r  r  r
  r  r  r  r  r   r&  r0  r:   r5  r4   r5   r6   r  r    s       ;;333I  & & &( ( (   
, 
, 
,    _& 3 3  _3$ 8 8  _86 6 6  , ' ' _' . . _.. . . ( ( _( 
, 
, _
, () () () _()T B B _B 	 	 _	 ; ; _;   _ 
9 
9 _
9 4 4 _4 5 5 _5 5 5  _5   _$ 4 4 4 _4   _ 7 7 _7   _ 5 5 _5   _" * * _* % % _% 6 6 _60   _ / / _/ / /r5   r  r4   )r-   )NN)rg  rh  rk  r}  r   r  sysr  collectionsr    r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   _compatr   r   r   r   r   r   r   r   r   r   r   r   r   ImportErrorrV  r   lowerr  getwindowsversionrO  RuntimeErrorversion_infor  __extra__all__r)   r  builtin_module_namesr  r*   IntEnumr.   MIB_TCP_STATE_ESTABCONN_ESTABLISHEDMIB_TCP_STATE_SYN_SENTCONN_SYN_SENTMIB_TCP_STATE_SYN_RCVDCONN_SYN_RECVMIB_TCP_STATE_FIN_WAIT1CONN_FIN_WAIT1MIB_TCP_STATE_FIN_WAIT2CONN_FIN_WAIT2MIB_TCP_STATE_TIME_WAITCONN_TIME_WAITMIB_TCP_STATE_CLOSED
CONN_CLOSEMIB_TCP_STATE_CLOSE_WAITCONN_CLOSE_WAITMIB_TCP_STATE_LAST_ACKCONN_LAST_ACKMIB_TCP_STATE_LISTENCONN_LISTENMIB_TCP_STATE_CLOSINGCONN_CLOSINGMIB_TCP_STATE_DELETE_TCBPSUTIL_CONN_NONE	CONN_NONEr   r0   globalsrd  __members__r%   r&   r'   r(   r9   r
  r  r`   rf   rl   _fieldsrr   rt   r   rv   rx   r   r   r   r   r   disk_io_countersr   r   r   r   r   r   r   r   r   r   r   r   r	  r  r  r  r  r   r#   r$   r  r'  pidsr  r  rQ  ru  r  r  r  r4   r5   r6   <module>ra     s	  
 ' &          				  



  " " " " " "             " " " " " " ! ! ! ! ! ! " " " " " " # # # # # #       # # # # # #       " " " " " "       + + + + + + ( ( ( ( ( ( " " " " " "                               8 8 8 8 8 8 8 8 8 8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 2 2 2 4 4 4 4 4 4)))))))   
s3xx~~""#455 !C!##A&* DKK))l3 v KKKKD
 
 
"  S-- $GG DL9b/BBM#G 	g6!6!6 '"8 '"8 '"8w1!7#:!6w2 4!?7,   	+: : : : :4< : : : GIIX)*** -NJMKK    T\   
 GIIZ+,,,D    a 	
   a a a a B B B b 
  B!" r#$ %& 2'( R)* "+, -	@ J{EEEG G	 	
7MMMNNz
 5 5 56 6 :j$,":;;
?VUO<<J-*?!@!@@B B	 j 7 7 7 8 8 3	0 	0 	0
5 
5 
5 	  	
4 
4 
4; ; ;. ( 	: 	: 	:4 4 4A A A  $ $ $
" " "
' ' '> > >  9 9 9&   $  A A A  > > >2   	 	 	"O O O  z z z z zV z z zR y_
=H H H       4J/ J/ J/ J/ J/f J/ J/ J/ J/ J/s   <C D.A!D))D.