psutil.WindowsService.username()返回空白

psutil.WindowsService.username()返回空白

问题描述:

在我的Win10机器中有一些显示名称以“_5e11c”结尾的服务。 Windows服务控制台表示它们都以本地系统身份登录。然而,对于任何人psutil.WindowsService.username()给出了一个空字符串,如果我查询与psutil.Process.username(过程中)我得到我登录的用户:psutil.WindowsService.username()返回空白

>>> import psutil 
>>> 
>>> s = psutil.win_service_get("OneSyncSvc_5e11c") 
>>> s 
<WindowsService(name='OneSyncSvc_5e11c', display_name='Sync Host_5e11c') at 2203559523440> 
>>> p = psutil.Process(s.pid()) 
>>> p 
<psutil.Process(pid=8348, name='svchost.exe') at 2203559523160> 
>>> p.username() 
'FOO_PC\\BAR_USER' 
>>> s.username() 
'' 
>>> 

什么继续?

方式psutil.WindowsService和psutil.Process工作略有不同,但一个有用的功能,它们都占有率as_dict()

利用这一点,我得到的信息是更详细:

{'username': '', 'start_type': 'automatic', 'display_name': 'Sync 
Host_11e740b', 'name': 'OneSyncSvc_11e740b', 'binpath': 'C:\\WINDOWS\\sy 
stem32\\svchost.exe -k UnistackSvcGroup', 'pid': 6492, 'status': 'running', 
'description': 'This service synchronizes mail, contacts, calendar and 
various other user data. Mail and other applications dependent on 
this functionality will not work properly when this service is 
not running.'} 

我看到的Svchost它已经从UnistackSvcGroup运行,所以我打开任务管理器中找到它,看到在同一组

list of other services that run under the same group

列出这些其他服务10如果您检查UnistackSvcGroup下运行的任何用户名,则所有这些用户都将返回而不使用用户名。

使用列出的共享PID来检查在svchost下运行的所有服务,所有服务都不返回用户名。你的代码没有问题。

单个进程与许多服务绑定,并在您的帐户下运行,但服务本身正在您的系统中运行。这就是为什么服务不会返回用户名,而svchost会将这些服务附加到您的帐户本身。

这由@eryksun的意见进行了说明,以及:

“” OneSyncSvc_ *”是Windows 10的新服务类型 - 每个用户的服务实例共享进程中运行(即SERVICE_USER_SERVICE | SERVICE_WIN32_SHARE_PROCESS | SERVICE_USERSERVICE_INSTANCE)作为在用户的会话的用户,而不是运行分离在会话0作为系统或服务帐户它出现在svchost进程所有服务实例具有相同的LUID(本地唯一ID)

后缀。

还有一个“OneSyncSvc”用户服务模板(即SERVICE_USER_SERVICE | SERVICE_WIN32_SHARE_PROCESS )在“HKLM \ System \ CurrentControlSet \ Services”中定义。 SERVICE_WIN32_SHARE_PROCESS | | SERVICE_USERSERVICE_INSTANCE每个用户的服务实例共享进程中运行(即`SERVICE_USER_SERVICE - 您可以通过SC QC OneSyncSvc“

+2

‘OneSyncSvc_ *’是Windows 10的新服务类型的查询其在命令行配置')作为用户的会话中的用户,而不是在会话0中作为SYSTEM或服务帐户运行隔离,它显示svchost进程中的所有服务实例都带有相同的LUID(本地唯一ID)后缀 – eryksun

+2

还有一个“OneSyncSvc “在HKLM \ System \ CurrentControlSet \ Services中定义的用户服务模板(即'SERVICE_USER_SERVICE | SERVICE_WIN32_SHARE_PROCESS')。你可以通过'sc qc OneSyncSvc'在命令行上查询它的配置。 – eryksun

+0

@eryksun那么可以这样说这样的服务在当前登录的用户帐户下运行? – R01k