0iu dZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl mZddlZddlmZddlmZddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlmZddlmZer>es<e j<5e j>dddl Z ddl!Z!ddl"Z"ddl#Z#ddderddl$m%Z%ejLjNZ'ejPjSe dejPjSedGddeZ*dZ+e,fdZ-Gdde*Z.Gdde*Z/Gdde*Z0Gd d!e*Z1Gd"d#e*Z2ejPjSe dGd$d%eZ3ejPjSe dGd&d'eZ4ejPjSe dGd(d)eZ5y#1swY8xYw)*zWindows specific tests.N)mock)WINDOWS)GITHUB_ACTIONS) HAS_BATTERY)IS_64BIT)PYPY)TOLERANCE_DISK_USAGE)TOLERANCE_SYS_MEM)PsutilTestCase)pytest)retry_on_failure)sh) spawn_subproc) terminateignore)convert_oserrorz WINDOWS onlyreasonzpywin32 not available on PYPYc eZdZy)WindowsTestCaseN)__name__ __module__ __qualname__J/opt/hc_python/lib64/python3.12/site-packages/psutil/tests/test_windows.pyrr5s rrcxtjdstjdSd|d}t |S)zCurrently not used, but available just in case. Usage: >>> powershell( "Get-CIMInstance Win32_PageFileUsage | Select AllocatedBaseSize") zpowershell.exezpowershell.exe not availablezhpowershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden -Command "")shutilwhichr skipr)cmdcmdlines r powershellr$;sC <<( ){{9:: 558E =  g;rctd|d|j}dj|jddj}.d|vr"t fd|j DS|S|S)zCurrently not used, but available just in case. Usage: >>> wmic("Win32_OperatingSystem", "FreePhysicalMemory") 2134124534 z wmic path z get N,c3.K|] }|ywNr).0x converters r zwmic..Ts<|!1|s)rstripjoin splitlinestuplesplit)pathwhatr-outdatas ` rwmicr8Js} z$uTF + , 2 2 4C 773>>#AB' ( . . 0D $;.ts 7JtD * *7JwmiWMIsumWin32_Processorr@rA)rBwprocss rtest_cpu_count_logical_vs_wmiz)TestCpuAPIs.test_cpu_count_logical_vs_wmirsF GGI 787H7H7J  !U***rctj}td|jD}t j d|k(sJy)Nc34K|]}|jywr*) NumberOfCoresrPs rr.z:TestCpuAPIs.test_cpu_count_cores_vs_wmi..{sG3F4D&&3FrRF)logicalrS)rBrXcoress rtest_cpu_count_cores_vs_wmiz'TestCpuAPIs.test_cpu_count_cores_vs_wmiys? GGIG13D3D3FGG.%777rcptjttjdk(sJy)NT)percpu)r@rAlen cpu_timesrBs rtest_cpu_count_vs_cpu_timesz'TestCpuAPIs.test_cpu_count_vs_cpu_times~s)!S)9)9)F%GGGGrctj}|jd}|jt j j k(sJ|jt j jk(sJyNr) rTrUrWCurrentClockSpeedr@cpu_freqcurrent MaxClockSpeedmax)rBrXrQs r test_cpu_freqzTestCpuAPIs.test_cpu_freqsb GGI  "1%%%):)B)BBBB!!V__%6%:%::::rN)rrrr markskipifr>r?rDrLrZr`rfrnrrrr:r:`sQ [[bjj0>. . )+8 H;rr:ceZdZdZdZdZdZdZedZ edZ edZ d Z d Z d Zd Zd ZdZy)TestSystemAPIsctd}tjdj}|D]C}d|j ddj vr&||vs+t j|dcSy)Nz ipconfig /allT)perniczpseudo-interface -z+ nic wasn't found in 'ipconfig /all' output)rr@net_io_counterskeysreplacelowerr fail)rBr6nicsnics rtest_nic_nameszTestSystemAPIs.test_nic_namessq!%%T2779C!S[[c%:%@%@%BB#~{{gHI rctjjd}t|jt j jk(sJyrh)rTrUWin32_ComputerSystemr=TotalPhysicalMemoryr@virtual_memorytotalrBrXs rtest_total_phymemz TestSystemAPIs.test_total_phymemsC GGI * * ,Q /1(()V-B-B-D-J-JJJJrctjjd}tt |j t jjz tksJyrh) rTrUWin32_PerfRawData_PerfOS_Memoryabsr=AvailableBytesr@rfreer rs rtest_free_phymemzTestSystemAPIs.test_free_phymemsT GGI 5 5 7 : A$$%(=(=(?(D(DD E   rctjjd}t|jt j jz t jjk(sJt jjdk(rGt jjdk(sJt jjdk(sJyyrh) rTrUrr= CommitLimitr@rr swap_memoryrusedrs rtest_total_swapmemz!TestSystemAPIs.test_total_swapmems GGI 5 5 7 :  !6!6!8!>!> >!!#)) *  *     % % *%%',,1 11%%',,1 11 +rctjjdkDrtjj dd}t |jdzt |jz }tjjdk\sJttjj|z dksJtjjdksJyy)Nr_Total)NamedrF) r@rrrTrU#Win32_PerfRawData_PerfOS_PagingFiler= PercentUsagePercentUsage_Basepercentr)rBrX percentSwaps rtest_percent_swapmemz#TestSystemAPIs.test_percent_swapmems     % % ) ==8=LQOAann-3c!:M:M6NNK%%'//14 44v))+33kABQF FF%%'//36 66 *rctjj}|Dchc]}|j}}t t j }||k(sJycc}wr*)rTrU Win32_Process ProcessIdsetr@pids)rBrXr,wmi_pids psutil_pidss r test_pidszTestSystemAPIs.test_pidssS GGI # # %)*+AAKK+&++-( ;&&&,sA!ctjd}tjj }|D]8}|D]}|j j dd|jk(s.|jsBd|jvrR|jjdro tj|j}|jt|jk(sJt|j }|j"|k(sJt%|j"|z dkDr)t'j(d|j"d |ccS t'j(d |cSy#t$rYJwxYw) NTall\r&cdromA:izpsutil=z, wmi=zcan't find partition )r@disk_partitionsrTrUWin32_LogicalDiskdeviceryDeviceID mountpointopts startswith disk_usageFileNotFoundErrorrr=Size FreeSpacerrr r{)rBps_parts wmi_partsps_partwmi_partusagewmi_frees r test_diskszTestSystemAPIs.test_diskssS))d3GGI//1 G%>>))$3x7H7HH"--',,.))44T: & 1 1'2D2D E!;;#hmm*<<<<"8#5#56H ::1115::014DD%{{%ejj\zB -&0{{%:7+#FGG3 -s+E88 FFctjD]}d|jvrtj|j }tj |j }t|d|jz tksJt|d|jz tksJ|j|j|jz k(rJy)Nrrr') r@rrrGGetDiskFreeSpaceExrrrrr rr)rBdiskrJrKs rtest_disk_usagezTestSystemAPIs.test_disk_usages**,D$))# 33DOODI!,,T__=Ly|l&7&778;OO OOIaL<#5#5569MM M$$ (:(:\=N=N(NN NN-rcBtjjdDcgc]}|r|jds|dz}}t j dDcgc])}|j jds |j +}}||k(sJycc}wcc}w)Nz\rrTr)rGGetLogicalDriveStringsr3rr@rr)rBr,rJrKs rtest_disk_partitionsz#TestSystemAPIs.test_disk_partitionss446<'I II$$55g>'I II88O8    s ABBcd}d}d}tjj||k(sJtjj||k(sJtjj||k(sJy)Nz\\localhost\C$\Windows\Tempz!\??\UNC\localhost\C$\Windows\Tempz%\Device\Mup\localhost\C$\Windows\Temp)r@rr)rBrrrs rtest_convert_dos_path_uncz(TestSystemAPIs.test_convert_dos_path_uncsn4;?  11':gEEE  11':gEEE  11':gEEErc4ttj}tjj }t}|D]8}|j |j|j |j:||zs Jd|d|y)Nzno common entries in z, ) rcext net_if_statsrTrUWin32_NetworkAdapteraddrNetConnectionID)rBps_names wmi_adapters wmi_names wmi_adapters rtest_net_if_statsz TestSystemAPIs.test_net_if_stats"st((*+wwy557 E 'K MM+** + MM+55 6( y  ; "8*Byk : ; rctjj}|djj dd}t j j |d}t j jtj}t||z j}|dks J||fy)Nr. %Y%m%d%H%M%SrF) rTrUWin32_OperatingSystemLastBootUpTimer3datetimestrptime fromtimestampr@ boot_timer total_seconds)rBwmi_os wmi_btime_str wmi_btime_dt psutil_dtdiffs rtest_boot_timezTestSystemAPIs.test_boot_time-s002q 0066s;A> ((11 > %%33F4D4D4FG L9,;;=>qy39l33yrctjjj}|dz }t t j |z dksJy)Ng@@g?)ctypeswindllkernel32GetTickCount64rruptime)rBmssecss r test_uptimezTestSystemAPIs.test_uptime7sC]] # # 2 2 4F{4;;=4'(3...rN)rrrr~rrrrr rrrrrrrrrrrrrrrrs K 2 7.''HH< O O )( F ;4/rrrceZdZdZej j e ddZej j e ddZ dZ dZ dZ d Z y ) TestSensorsBatteryctjdrtjJytjJy)NSystemBatteriesPresent)rGGetPwrCapabilitiesr@sensors_batteryres rtest_has_batteryz#TestSensorsBattery.test_has_batteryEs>  & & ()A B))+7 77))+3 33rz no batteryrctj}|jdd}tj}t |j |jz dksJy)Nselect * from Win32_Batteryrr')rTrUqueryr@rrrEstimatedChargeRemainingrBrX battery_wmibattery_psutils r test_percentzTestSensorsBattery.test_percentKsZ GGIgg;  [[K =P>PrrceZdZedZedZdZdZdZdZ dZ dZ d Z d Z d Zd Zd ZdZdZdZdZy) TestProcessc6tj|_yr*rpidclss r setUpClasszTestProcess.setUpClass/%%rc.t|jyr*rr%r&s r tearDownClasszTestProcess.tearDownClass#''rctjd}tjtj5|j dddy#1swYyxYwrh)r@Processr raises AccessDeniedkillrBps r test_issue_24zTestProcess.test_issue_24s7 NN1  ]]6.. / FFH0 / /s AAcZtjd}|jdk(sJt||j |j dk\sJ |j dd\}}|dkDsJy#tj$rtjddvrYywxYw)NSystemgrrr'>win-7win7vista) r@r/namestrusername create_time memory_infor1platformuname)rBr4rss_vmss rtest_special_pidzTestProcess.test_special_pids NN1 vvx8### A }}#%%%  +IC 7N7 "" ~~"*DDE sA::-B*)B*ctj|j}tjt 5|j tjdddy#1swYyxYwr*) r@r/r%r r0 ValueError send_signalsignalSIGINTr3s rtest_send_signalzTestProcess.test_send_signals< NN488 $ ]]: & MM&-- (' & &s A""A+ctjtj}|j }t j tjtjtj}|j }||dzk(sJt j||j |k(sJy)Nr') r@r/r>getpid num_handlesrG OpenProcesswin32conPROCESS_QUERY_INFORMATIONFALSE CloseHandle)rBr4beforehandleafters rtest_num_handles_incrementz&TestProcess.test_num_handles_increments NN299; '%%  . .    """V$}}&(((rcvtj|jj}|j t j |j t j|j|jtjtj5|j t j dddtjtj5|j t jdddy#1swYUxYw#1swYyxYwr*) r@r/rr%rHrI CTRL_C_EVENTCTRL_BREAK_EVENTr2waitr r0 NoSuchProcessr3s rtest_ctrl_signalszTestProcess.test_ctrl_signalss NN4--/33 4 f))* f--.   ]]6// 0 MM&-- .1 ]]6// 0 MM&11 21 01 0 0 0s/ D#: D/#D,/D8ctjtj}|j drt j dStjj|k(sJy)N$zrunning as service account) rG GetUserNameExrPNameSamCompatibleendswithr r!r@r/r>)rBr<s r test_usernamezTestProcess.test_usernamesT%%h&@&@A == ;;;< <~~((*d222rc*tjddtjj }dj t jj}|jdd}|jdd}||k(sJy)Nz[ ]+rurr&) resubrGGetCommandLiner/r0r@r/r#ryrIs r test_cmdlinezTestProcess.test_cmdlinesxFF7C)@)@)BCIIK xx 0 8 8 :; %%c2. #++C4 L(((rcJtjtjtjt j }|jtj|tj|}tjj}||k(sJyr*)rGrOrPrQrRr>rM addCleanuprS win32processGetPriorityClassr@r/nicerBrUrJrKs r test_nicezTestProcess.test_nicesr%%  . .   ,,f5 11&9 ~~',,. y(((rctjtjtj|j }|j tj|tj|}tj|j j}|d|jk(sJ|d|jk(sJ|d|jk(sJ|d|j k(sJ|d|j"k(sJ|d|j$k(sJ|d|j&k(sJ|d|j(k(sJ|j*|jk(sJ|j,|j&k(sJy) NPeakWorkingSetSizeWorkingSetSizeQuotaPeakPagedPoolUsageQuotaPagedPoolUsageQuotaPeakNonPagedPoolUsageQuotaNonPagedPoolUsage PagefileUsagePeakPagefileUsage)rGrOrPrQrRr%rjrSrkGetProcessMemoryInfor@r/r@ peak_wsetwsetpeak_paged_pool paged_poolpeak_nonpaged_pool nonpaged_poolpagefile peak_pagefilerCvmsrns rtest_memory_infozTestProcess.test_memory_infos%%  . .  ,,f5 55f= ~~dhh/;;= -.,2H2HHHH)*l.?.???? / 0++ ,  ,./<3J3JJJJ 2 3.. /  / . /<3M3M M M)\-B-BBBB,-1K1KKKK<#4#4444<#8#8888rcttjtjtj|j }|j tj|tj|j }|j|j}tj|}||k(sJyr*)rGrOrPrQrRr%rjrSr@r/rr[rkGetExitCodeProcess)rBrUr4rKrJs r test_waitzTestProcess.test_waits%%  . .  ,,f5 NN488 $ vvx  33F; y(((rchd}tjtjtj|j }|j tj||tj|d}tj|j j}||k(sJy)NcPtdDcgc] }d|z|zs |c}Scc}w)N@r')range)r,is r from_bitmaskz3TestProcess.test_cpu_affinity..from_bitmasks($Ry9y!Q!VqLAy9 99s ##r) rGrOrPrQrRr%rjrSrkGetProcessAffinityMaskr@r/ cpu_affinity)rBrrUrJrKs rtest_cpu_affinityzTestProcess.test_cpu_affinitys :%%  . .  ,,f5  / / 7 : ~~dhh/<<> y(((rc,tjtjtjt j }|jtj|tj|}tjj}|j|dk(sJ|j|dk(sJ|j |dk(sJ|j"|dk(sJ|j$|dk(sJ|j&|dk(sJy)NReadOperationCountWriteOperationCountReadTransferCountWriteTransferCountOtherOperationCountOtherTransferCount)rGrOrPrQrRr>rMrjrSrkGetProcessIoCountersr@r/ io_counters read_count write_count read_bytes write_bytes other_count other_bytesrns rtest_io_counterszTestProcess.test_io_counters!s%%  . .   ,,f5 55f= ~~'335 &&)4H*IIII''95J+KKKK&&)4G*HHHH''95I+JJJJ''95J+KKKK''95I+JJJJrcddl}ddl}d}|jjj |d|j }|j |jjj||jj}|jjj||j||j}tj|j j}||k(sJy)Nr)rctypes.wintypesrrrOr%rjrSwintypesDWORDGetProcessHandleCountbyrefvaluer@r/rN)rBrrQrUhndcntrJrKs rtest_num_handleszTestProcess.test_num_handles/s$)!''33 %q$((   ..::FC&&( 44 LFLL( LL ~~dhh/;;= y(((rct}d|_tjd|5tjd5}t j }t jtj5|jdddddddddjdk\sJy#1swY+xYw#1swY/xYw#1swY3xYw)Ni+z psutil._psplatform.cext.proc_cwdrz time.sleeprF) OSErrorwinerrorrrr@r/r r0r1cwd call_count)rBexcrr4s rtest_error_partial_copyz#TestProcess.test_error_partial_copyAsi ZZ: LL)QNN$]]6#6#67EEG8*M ||q   87*)M Ls:C 8B>7B2B>C 2B; 7B>>C C  Cctjddz}tjj|}t j tj 5|jdddy#1swYyxYw)Nri)r@r _psplatformr/r r0r\exe)rBr%rQs rtest_exezTestProcess.test_exeLsVkkmB%'!!))#. ]]6// 0 HHJ1 0 0s A77BN)rrr classmethodr(r,r5rErKrWr]rcrhrorrrrrrrrrrr"r"st&& ") ) 33 ).)96 ) ) K)$ !rr"ceZdZdZedZedZdZejje ddZ dZ d Zed Zed Zd Zy )TestProcessWMIz%Compare Process API results with WMI.c6tj|_yr*r$r&s rr(zTestProcessWMI.setUpClassXr)rc.t|jyr*r+r&s rr,zTestProcessWMI.tearDownClass\r-rctjj|jd}t j |j}|j |jk(sJyNrr)rTrUrr%r@r/r<CaptionrBrXr4s r test_namezTestProcessWMI.test_name`sN GGI # #dhh # 7 : NN488 $vvx199$$$rz!unreliable path on GITHUB_ACTIONSrctjj|jd}t j |j}|j j|jjk(sJyr) rTrUrr%r@r/rrzExecutablePathrs rrzTestProcessWMI.test_exefsc GGI # #dhh # 7 : NN488 $uuw}}!"2"2"8"8"::::rc tjj|jd}t j |j}dj |j|jjddk(sJy)Nrrrurr&) rTrUrr%r@r/r0r# CommandLineryrs rrhzTestProcessWMI.test_cmdlinepsd GGI # #dhh # 7 : NN488 $xx $ (=(=c2(FFFFrctjj|jd}t j |j}|j \}}}|d|}|j|k(sJy)Nrrr)rTrUrr%r@r/GetOwnerr>)rBrXr4domain_r>s rrczTestProcessWMI.test_usernameusl GGI # #dhh # 7 : NN488 $jjl8XRz*zz|x'''rc tjj|jd}t j |j}|j j}|t|jk(sJyr) rTrUrr%r@r/r@rCr=rr)rBrXr4rCs rtest_memory_rsszTestProcessWMI.test_memory_rss|s` GGI # #dhh # 7 : NN488 $mmo!!c!**++++rcJtjj|jd}t j |j}|j j}t|j}|||dzhvrtjd|d|Sy)Nrrrzwmi=z , psutil=) rTrUrr%r@r/r@rr= PageFileUsager r{)rBrXr4r wmi_usages rtest_memory_vmszTestProcessWMI.test_memory_vmss GGI # #dhh # 7 : NN488 $mmo!! ( y)d"23 3;;i[ #?@ @ 4rcntjj|jd}t j |j}t |jjdd}tjdtj|j}||k(sJy)Nrrrr) rTrUrr%r@r/r= CreationDater3timestrftime localtimer?)rBrXr4 wmic_create psutil_creates rtest_create_timezTestProcessWMI.test_create_times GGI # #dhh # 7 : NN488 $!....s3A67  DNN1==?; m+++rN)rrr__doc__rr(r,rr rorprrrhrcr rrrrrrrrUs/&&%  [[B;;G (,,  A A,rrcTeZdZdZedZedZdZdZdZ dZ dZ d Z y ) TestDualProcessImplementationawCertain APIs on Windows have 2 internal implementations, one based on documented Windows APIs, another one based NtQuerySystemInformation() which gets called as fallback in case the first fails because of limited permission error. Here we test that the two methods return the exact same value, see: https://github.com/giampaolo/psutil/issues/304. c6tj|_yr*r$r&s rr(z(TestDualProcessImplementation.setUpClassr)rc.t|jyr*r+r&s rr,z+TestDualProcessImplementation.tearDownClassr-rctj|jj}t j dt 5}tj|jj}t|t|k(sJtt|D]/}||dk\sJ||dk\sJt||||z dkr/J|jsJ dddy#1swYyxYw)Nz(psutil._psplatform.cext.proc_memory_inforri) r@r/r%r@rrPermissionErrorrcrrr)rBmem_1funmem_2rs rrz.TestDualProcessImplementation.test_memory_infostxx(446 ZZ 6' NN488,88:Eu:U+ ++3u:&Qx1}$}Qx1}$}58eAh./#555':: :   s B C.C..C7c@tj|jj}t j dt 5}tj|jj|k(sJ|jsJ dddy#1swYyxYw)N"psutil._psplatform.cext.proc_timesr)r@r/r%r?rrrr)rBctimers rrz.TestDualProcessImplementation.test_create_timesttxx(446 ZZ 0' >>$((+779UB BB:: :    ABBctj|jj}t j dt 5}tj|jj}|jsJt|j|jz dksJt|j|jz dksJ dddy#1swYyxYw)Nrrg{Gz?) r@r/r%rdrrrrrusersystem)rB cpu_times_1r cpu_times_2s rtest_cpu_timesz,TestDualProcessImplementation.test_cpu_timessnnTXX.88: ZZ 0'  ..2<<>K:: :{''+*:*::;dB BB{))K,>,>>?$F FF   s B CC&ctj|jj}t j dt 5}tj|jj}tt|D]}t||||z dkrJ|jsJ dddy#1swYyxYw)Nz(psutil._psplatform.cext.proc_io_countersrrF) r@r/r%rrrrrrcrr)rB io_counters_1r io_counters_2rs rrz.TestDualProcessImplementation.test_io_countersstxx0<<> ZZ 6' "NN4884@@BM3}-.=+mA.>>?!CCC/:: :   s AC&CC c@tj|jj}t j dt 5}tj|jj|k(sJ|jsJ dddy#1swYyxYw)Nz(psutil._psplatform.cext.proc_num_handlesr)r@r/r%rNrrrr)rBrNrs rrz.TestDualProcessImplementation.test_num_handlesstnnTXX.::< ZZ 6' >>$((+779[H HH:: :    rc:tjD]8} tj|d}tj|d}||k(r8Jy#t$r@}t |}t |tjtjfsYd}~d}~wwxYw)NT)use_pebF) r@rr proc_cmdlinerr isinstancer1r\)rBr%aberrs rrhz*TestDualProcessImplementation.test_cmdlines;;=C %%c4%8%%c5%9Av v! %c*!&--v/C/CD s.A B6BBN) rrrrrr(r,rrrrrrhrrrrrsN&&  G  rrcheZdZdZedZddgZfdZfdZdZ dZ d Z d Z d Z d ZxZS) RemoteProcessTestCasezCertain functions require calling ReadProcessMemory. This trivially works when called on the current process. Check that this works on other processes, especially when they have a different bitness. cd}tjdD]s}tj|d|gtjtj}|j \}}|j |tt k(sq|cSy)Nz6import sys; sys.stdout.write(str(sys.maxsize > 2**32))zC:\Python*\python.exe-c)argsstdoutstderr) glob subprocessPopenPIPESTDOUT communicater[r=r)codefilenamerQoutputrs rfind_other_interpreterz,RemoteProcessTestCase.find_other_interpreters{H ":;H##d+!!((D ((*IFA IIK\**r?copyr=rMr test_argsrrproc32proc64)rB other_pythonr __class__s rr zRemoteProcessTestCase.setUps  224  ;;B  NNDM(DM(DMNNDMjjoo#&ryy{#3  (( ]]Odnn ,#Z__)  (( ]]Odnn ,#Z__)  rct||jj|jjyr*)r tearDownrrr)rBrs rrzRemoteProcessTestCase.tearDown)s.  ! !rctj|jj}t |j dk(sJ|j dd|j k(sJyNr')r@r/rr%rcr#rr3s rtest_cmdline_32z%RemoteProcessTestCase.test_cmdline_32.O NN4;;?? +199;1$$$yy{12$..000rctj|jj}t |j dk(sJ|j dd|j k(sJyr)r@r/rr%rcr#rr3s rtest_cmdline_64z%RemoteProcessTestCase.test_cmdline_643rrctj|jj}|j t j k(sJyr*)r@r/rr%rr>getcwdr3s r test_cwd_32z!RemoteProcessTestCase.test_cwd_3282 NN4;;?? +uuw"))+%%%rctj|jj}|j t j k(sJyr*)r@r/rr%rr>r r3s r test_cwd_64z!RemoteProcessTestCase.test_cwd_64<r"rctj|jj}|j }d|vsJ|dt t jk(sJy)Nr)r@r/rr%r?r=r>rM)rBr4es rtest_environ_32z%RemoteProcessTestCase.test_environ_32@sP NN4;;?? + IIK"a'''$%RYY[)9999rctj|jj} |j y#tj $rYywxYwr*)r@r/rr%r?r1r3s rtest_environ_64z%RemoteProcessTestCase.test_environ_64Fs> NN4;;?? +  IIK""   s<AA)rrrr staticmethodrrr rrrr!r$r'r) __classcell__)rs@rrrsQ   "56I 0" 1 1 &&: rrceZdZdZdZy) TestServicesc hd}hd}hd}tjD]j}|jdk(r|j}t |dt sJ|dj sJt |dt sJt |dt sJ|d|vsJ|d tj|d t |d t sJt |dt sJt |d t sJ|d |vsJ|d|vsJt |d t sJ|j}|'tj|}|jsJtj|j}||k(rkJy) N>stoppausestartpausedrunningstoppedcontinue>manualdisabled automatic>r2r3r4 stop_pending pause_pending start_pendingcontinue_pending WaaSMedicSvcr< display_namer>statusr%binpath start_type description) r@win_service_iterr<as_dictrr=r/r/r% is_runningwin_service_get)rBvalid_statusesvalid_start_typesservr7r%r4ss rtest_win_service_iterz"TestServices.test_win_service_iterUs @ ++-Dyy{n,<<>Dd6lC0 00<%%' ''d>2C8 88d:.4 44>^3 33E{&tE{+d9os3 33d:.4 44d<0#6 66 %):: ::>^3 33d=137 77((*CNN3'||~%~&&tyy{3A19 97.rctjjj}tjjj}t tj j}tjtj5}tj|dzdddjj|dzk(sJtj|}tddd}||_tj d|5tjtj5|j#ddddddtj d|5tjtj5|j%ddddddtddd}||_tj d|5tjtj&5|j#ddddddtj d|5tjtj&5|j%dddddd|jt)|vsJ|j+t)|vsJ|jt-|vsJ|j+t-|vsJy#1swYJxYw#1swYxYw#1swYxYw#1swYzxYw#1swYxYw#1swY$xYw#1swY)xYw#1swYxYw#1swYxYw)Nz???rmsgz/psutil._psplatform.cext.winservice_query_statusrz/psutil._psplatform.cext.winservice_query_config)r@rrERROR_SERVICE_DOES_NOT_EXISTERROR_ACCESS_DENIEDnextrCr<r r0r\rFrrrrrr?r>r1r=r>repr)rBrNrOr<cmservicers rtest_win_service_getz!TestServices.test_win_service_gets    # # @ @ %%0055IIF++-.335 ]]6// 0B  " "4%< 01xx}}u ,,,((.a"3 ZZ =3 v334 5 ZZ =3 v334  "5 a"* ZZ =3 v223 4 ZZ =3 v223  "4 ||~W---##%W555||~g...##%g666K1 054  54  43  43  sK8$L:L L2$L,L'L,"$ML9M>$M"M3M8LL LLL) $L,,L69M >MMM MM(N)rrrrKrTrrrr-r-Ss /b,7rr-)6rrrrr>rArerrIrr rwarningsunittestrr@r psutil.testsrrrrr r r r r rrrcatch_warnings simplefilterrGrPrkrTpsutil._pswindowsrrrrorprr$r=r8r:rrrr"rrrr-rrrr[s     '$!-*')&" 4  "h' # 1K7D!@A n B8   #,%;/%;Pt/_t/x>>LH/HVB,_B,PK7TNT8TnK7UNU8UzK7^7>^78^7[ # "s #G99H