§
    ÷¢±j”  ã            	      óˆ  — U d Z ddlmZ ddlZddlZej        Zi Zded<   dd„Zddej	        dfd„Z
ddej	        ddfd	„Zd
„ Zd„ Zedej        fd„Zedk    rk e¦   «           ed¦  «        Z ed ede¬¦  «        ¦  «          ed e
 ed¦  «         ed¦  «        ¦  «        ¦  «          ed¦  «          e¦   «          dS dS )a  Utilities for the win32 Performance Data Helper module

Example:
  To get a single bit of data:
  >>> import win32pdhutil
  >>> win32pdhutil.GetPerformanceAttributes("Memory", "Available Bytes")
  6053888
  >>> win32pdhutil.FindPerformanceAttributesByName("python", counter="Virtual Bytes")
  [22278144]

  First example returns data which is not associated with any specific instance.

  The second example reads data for a specific instance - hence the list return -
  it would return one result for each instance of Python running.

  In general, it can be tricky finding exactly the "name" of the data you wish to query.
  Although you can use <om win32pdh.EnumObjectItems>(None,None,(eg)"Memory", -1) to do this,
  the easiest way is often to simply use PerfMon to find out the names.
é    )ÚannotationsNzdict[str, int]Úcounter_english_mapc                óª  — t           s›dd l}dd l}|                     |j        d¦  «        }|d         }t          dt          |¦  «        dz
  d¦  «        D ]N}	 t          ||         ¦  «        }n# t          $ r Y Œ%w xY w|t           ||dz             	                    ¦   «         <   ŒOt          j        |t           |  	                    ¦   «                  ¦  «        S )Nr   zCounter 009é   é   )r   Úwin32apiÚwin32conÚRegQueryValueExÚHKEY_PERFORMANCE_DATAÚrangeÚlenÚintÚ
ValueErrorÚlowerÚwin32pdhÚLookupPerfNameByIndex)Úenglish_nameÚmachine_namer   r	   Úcounter_reg_valueÚcounter_listÚiÚ
counter_ids           úbC:\Users\johnn\AppData\Local\Programs\Python\Python311\Lib\site-packages\win32/lib/win32pdhutil.pyÚfind_pdh_counter_localized_namer   #   sø   € Ýð JØˆˆˆØˆˆˆà$×4Ò4ØÔ*¨Mñ
ô 
Ðð )¨Ô+ˆÝ�q�#˜lÑ+Ô+¨aÑ/°Ñ3Ô3ð 	Jð 	JˆAðÝ  ¨a¤Ñ1Ô1�
�
øÝð ð ð Ø�ðøøøà?IÕ ¨Q°©UÔ 3× 9Ò 9Ñ ;Ô ;Ñ<Ð<ÝÔ)ØÕ)¨,×*<Ò*<Ñ*>Ô*>Ô?ñô ð s   ÁA-Á-
A:Á9A:éÿÿÿÿc                óš  — t          j        || |d ||f¦  «        }t          j        ¦   «         }	 t          j        ||¦  «        }	 t          j        |¦  «         t          j        ||¦  «        \  }	}
|
t          j        |¦  «         t          j        |¦  «         S # t          j        |¦  «         w xY w# t          j        |¦  «         w xY w©N)r   ÚMakeCounterPathÚ	OpenQueryÚ
AddCounterÚCollectQueryDataÚGetFormattedCounterValueÚRemoveCounterÚ
CloseQuery)ÚobjectÚcounterÚinstanceÚinumÚformatÚmachineÚpathÚhqÚhcÚtypeÚvals              r   ÚGetPerformanceAttributesr0   7   sÌ   € õ Ô# W¨f°hÀÀdÈGÐ$TÑUÔU€DÝ	Ô	Ñ	Ô	€Bð	 ÝÔ   TÑ*Ô*ˆð	'ÝÔ% bÑ)Ô)Ð)Ý Ô9¸"¸fÑEÔE‰IˆD�#ØåÔ" 2Ñ&Ô&Ð&åÔ˜BÑÔÐÐøõ Ô" 2Ñ&Ô&Ð&Ð&øøøøåÔ˜BÑÔÐÐøøøs#   ¯B4 Á-B Á2B4 ÂB1Â1B4 Â4C
c                ó  — |€t          d|¦  «        }|€t          d|¦  «        }|rt          j        d|dd¦  «         |                      ¦   «         } t          j        dd|d¦  «        \  }}i }|D ](}		 ||	xx         dz  cc<   Œ# t
          $ r d||	<   Y Œ%w xY wg }
|                     ¦   «         D ]Y\  }	}t          |dz   ¦  «        D ]A}|	                     ¦   «         | k    r'|
                     t          |||	|||¦  «        ¦  «         ŒBŒZ|
S )zÑFind performance attributes by (case insensitive) instance name.

    Given a process name, return a list with the requested attributes.
    Most useful for returning a tuple of PIDs given a process name.
    NÚProcessú
ID Processr   r   r   )
r   r   ÚEnumObjectsr   ÚEnumObjectItemsÚKeyErrorÚitemsr   Úappendr0   )ÚinstanceNamer%   r&   r)   r*   ÚbRefreshr7   Ú	instancesÚinstance_dictr'   ÚretÚmax_instancesr(   s                r   ÚFindPerformanceAttributesByNamer?   Q   so  € ð €~Ý0°¸GÑDÔDˆØ€Ý1°,ÀÑHÔHˆØð 2ÝÔ˜T 7¨A¨qÑ1Ô1Ð1Ø×%Ò%Ñ'Ô'€LÝÔ/°°d¸FÀBÑGÔGÑ€Eˆ9à€MØð (ð (ˆð	(Ø˜(Ð#Ð#Ô# qÑ(Ð#Ð#Ñ#Ð#øÝð 	(ð 	(ð 	(Ø&'ˆM˜(Ñ#Ð#Ð#ð	(øøøð €CØ#0×#6Ò#6Ñ#8Ô#8ð ð Ñˆ�-Ý˜-¨!Ñ+Ñ,Ô,ð 	ð 	ˆDØ�~Š~ÑÔ <Ò/Ð/Ø—
’
Ý,Ø ¨°4¸Àñô ñô ð øð	ð €Js   Á3BÂBÂBc                 óò  — t          d¦  «        } t          j        d d | t          j        ¦  «        \  }}i }|D ](}	 ||xx         dz  cc<   Œ# t          $ r d||<   Y Œ%w xY wt          d¦  «        g|d d…         z   }t          dd                     |¦  «        ¦  «         |                     ¦   «         D �]B\  }}t          |dz   ¦  «        D �](}t          j	        ¦   «         }g }|D ]D}	t          j
        d | |d ||	f¦  «        }
|                     t          j        ||
¦  «        ¦  «         ŒEt          j        |¦  «         t          j        d¦  «         t          j        |¦  «         t          d	|d d
…         z  d¬¦  «         |D ]L}t          j        |t          j        ¦  «        \  }}t          d|z  d¬¦  «         t          j        |¦  «         ŒMt          ¦   «          t          j        |¦  «         �Œ*�ŒDd S )Nr2   r   r   r3   é   zProcess Nameú,g{®Gáz„?z%-15s	é   ú )Úendz%5d)r   r   r5   ÚPERF_DETAIL_WIZARDr6   ÚprintÚjoinr7   r   r   r   r8   r    r!   ÚtimeÚsleepr"   ÚPDH_FMT_LONGr#   r$   )r%   r7   r;   r<   r'   r>   r(   r,   ÚhcsÚitemr+   r-   r.   r/   s                 r   ÚShowAllProcessesrN   z   sG  € Ý,¨YÑ7Ô7€FÝÔ/Øˆd�F�HÔ7ñô Ñ€Eˆ9ð €MØð (ð (ˆð	(Ø˜(Ð#Ð#Ô# qÑ(Ð#Ð#Ñ#Ð#øÝð 	(ð 	(ð 	(Ø&'ˆM˜(Ñ#Ð#Ð#ð	(øøøõ -¨\Ñ:Ô:Ð;¸eÀBÀQÀB¼iÑG€EÝ	ˆ.˜#Ÿ(š( 5™/œ/Ñ*Ô*Ð*Ø#0×#6Ò#6Ñ#8Ô#8ð $ñ $Ñˆ�-Ý˜-¨!Ñ+Ñ,Ô,ð 	$ñ 	$ˆDÝÔ#Ñ%Ô%ˆBØˆCØð :ð :�ÝÔ/Ø˜6 8¨T°4¸Ð>ñô �ð —
’
�8Ô.¨r°4Ñ8Ô8Ñ9Ô9Ð9Ð9ÝÔ% bÑ)Ô)Ð)õ ŒJ�tÑÔÐÝÔ% bÑ)Ô)Ð)Ý�)˜x¨¨¨œ}Ñ-°3Ð7Ñ7Ô7Ð7Øð +ð +�Ý$Ô=¸bÅ(ÔBWÑXÔX‘	��cÝ�e˜s‘m¨Ð-Ñ-Ô-Ð-ÝÔ& rÑ*Ô*Ð*Ð*Ý‰GŒGˆGÝÔ Ñ#Ô#Ð#Ñ#ñ'	$ð$ð $s   »AÁAÁAc           
     óØ   — | D ]f}t          j        |¦  «        \  }}}}}}t          ||||t           j        |¦  «        }t	          d|z  |¦  «         t	          d||||||fz  ¦  «         ŒgdS )NzValue of '%s' iszDAdded '%s' on object '%s' (machine %s), instance %s(%d)-parent of %sr   )r   ÚParseCounterPathr0   ÚPDH_FMT_DOUBLErG   )	Úcountersr&   r*   r%   r'   ÚparentInstanceÚindexÚcounterNameÚresults	            r   ÚBrowseCallBackDemorW   ¥   s¨   € àð 
ð 
ˆõ Ô% gÑ.Ô.ñ	
ØØØØØØõ *Ø�K ¨5µ(Ô2IÈ7ñ
ô 
ˆõ 	Ð  7Ñ*¨FÑ3Ô3Ð3ÝØRØ˜F G¨X°u¸nÐMñNñ	
ô 	
ð 	
ð 	
ð ˆ1ó    zPython Browserc                ó:   — t          j        d d| ||d¬¦  «         d S )Nr   T)ÚReturnMultiple)r   ÚBrowseCounters)ÚcallbackÚtitleÚlevels      r   Úbrowser_   ¼   s(   € õ
 Ô˜D ! X¨u°eÈDÐQÑQÔQÐQÐQÐQrX   Ú__main__zVirtual ByteszVirtual Bytes = Úpython)r&   zAvailable Bytes = ÚMemoryzAvailable ByteszBrowsing for counters...r   )Ú__doc__Ú
__future__r   rI   r   Úerrorr   Ú__annotations__r   rK   r0   r?   rN   rW   rF   r_   Ú__name__r&   rG   © rX   r   ú<module>ri      sÀ  ððð ð ð( #Ð "Ð "Ð "Ð "Ð "à €€€à €€€àŒ€ð
 ')Ð Ð (Ð (Ð (Ñ (ðð ð ð ð* #¨°HÔ4IÐSWð ð  ð  ð  ð8 ØØÔ ØØð&ð &ð &ð &ðR$$ð $$ð $$ðVð ð ð0  Ø
Ø
Ô
%ðRð Rð Rð Rð ˆzÒÐØÐÑÔÐà-Ð-¨oÑ>Ô>€GØ	€EØÐ;Ð;¸HÈgÐVÑVÔVñô ð ð 
€EØØ Ð Ø+Ð+¨HÑ5Ô5Ø+Ð+Ð,=Ñ>Ô>ñ	
ô 	
ñô ð ð 
€EÐ
$Ñ%Ô%Ð%Ø
€F�H„H€H€H€Hð! ÐrX   