2017-10-19 255 views
1

在我的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() 
'' 
>>> 

什麼繼續?

回答

3

方式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