Windows 服务类型 0x30 是什么意思?
What does a Windows service type of 0x30 mean?
类型WIN32_SHARE_PROCESS
(0x20
) 的Windows 服务在与其他服务共享的进程中作为线程运行。 (虽然,在最近的 Windows 10 个构建中,它 may get its own process anyway。)类型 WIN32_OWN_PROCESS
(0x10
) 的 Windows 服务在其自己的独立进程中运行。但是,某些 Windows 服务的类型为 wIN32_OWN_PROCESS | WIN32_SHARE_PROCESS
(0x30
)。这个组合是什么意思?
sc query
称该组合为 WIN32
。例如,sc query AppInfo
报告:
SERVICE_NAME: AppInfo
TYPE : 30 WIN32
STATE : 4 RUNNING
(STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
Windows API 文档没有提到这种可能性。他们单独谈论每个标志的含义,而不是组合在一起。他们确实在 EnumServicesStatusA 的文档中引用了 0x30
,但在该函数的上下文中,它被记录为返回具有任一类型集的服务,它没有谈论服务具有的含义两种类型都设置。
(服务类型字段可以采用其他几个值:驱动程序服务,如 SERVIC_KERNEL_DRIVER
、SERVICE_INTERACTIVE_PROCESS
标志、用户服务等。我不是在询问任何其他 values/flags在这个问题中,只关于0x30
组合。)
正如您所指出的,changes to service host grouping in Windows 10 可能会导致 SERVICE_WIN32_SHARE_PROCESS 运行 类型的服务在其自己的隔离进程中。每当服务发生这种情况时,SC 都会将其显示为 SERVICE_WIN32 —— SERVICE_WIN32_OWN_PROCESS 和 SERVICE_WIN32_SHARE_PROCESS.
的混淆组合
我们通过注册表确认了这种情况。
在我们的 Windows 10 VM(有足够的 RAM 来触发进程隔离增强)上,SC 说 AppInfo 是类型 WIN32 (30):
任务管理器报告 AppInfo 运行 在它自己的进程中。
根据 the documentation,我们通过添加 SvcHostSplitDisable 值禁用了 AppInfo 服务的进程隔离:
重启后,SC 报告类型为 WIN32_SHARE_PROCESS (20) 的 AppInfo:
任务管理器确认进程确实被共享。
所以这一切都归结于 Windows 10 Creators Update(版本 1703)中对服务进程隔离的更改。
类型WIN32_SHARE_PROCESS
(0x20
) 的Windows 服务在与其他服务共享的进程中作为线程运行。 (虽然,在最近的 Windows 10 个构建中,它 may get its own process anyway。)类型 WIN32_OWN_PROCESS
(0x10
) 的 Windows 服务在其自己的独立进程中运行。但是,某些 Windows 服务的类型为 wIN32_OWN_PROCESS | WIN32_SHARE_PROCESS
(0x30
)。这个组合是什么意思?
sc query
称该组合为 WIN32
。例如,sc query AppInfo
报告:
SERVICE_NAME: AppInfo
TYPE : 30 WIN32
STATE : 4 RUNNING
(STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
Windows API 文档没有提到这种可能性。他们单独谈论每个标志的含义,而不是组合在一起。他们确实在 EnumServicesStatusA 的文档中引用了 0x30
,但在该函数的上下文中,它被记录为返回具有任一类型集的服务,它没有谈论服务具有的含义两种类型都设置。
(服务类型字段可以采用其他几个值:驱动程序服务,如 SERVIC_KERNEL_DRIVER
、SERVICE_INTERACTIVE_PROCESS
标志、用户服务等。我不是在询问任何其他 values/flags在这个问题中,只关于0x30
组合。)
正如您所指出的,changes to service host grouping in Windows 10 可能会导致 SERVICE_WIN32_SHARE_PROCESS 运行 类型的服务在其自己的隔离进程中。每当服务发生这种情况时,SC 都会将其显示为 SERVICE_WIN32 —— SERVICE_WIN32_OWN_PROCESS 和 SERVICE_WIN32_SHARE_PROCESS.
的混淆组合我们通过注册表确认了这种情况。
在我们的 Windows 10 VM(有足够的 RAM 来触发进程隔离增强)上,SC 说 AppInfo 是类型 WIN32 (30):
任务管理器报告 AppInfo 运行 在它自己的进程中。
根据 the documentation,我们通过添加 SvcHostSplitDisable 值禁用了 AppInfo 服务的进程隔离:
重启后,SC 报告类型为 WIN32_SHARE_PROCESS (20) 的 AppInfo:
任务管理器确认进程确实被共享。
所以这一切都归结于 Windows 10 Creators Update(版本 1703)中对服务进程隔离的更改。