Windows的UMS API的官方状态是什么?



Windows 7增加了一个名为UMS的API集,允许您从用户模式回收线程,并实现自定义调度逻辑。

从Windows 11开始,此功能似乎不起作用。这个问题反映在msdn官方页面:https://learn.microsoft.com/en-us/windows/win32/procthread/user-mode-scheduling

虽然这似乎解决了这个问题,但这个更改是由stackoverflow用户添加的,因为他们在Windows 11机器上遇到了这个问题。你可以在另一个问题的评论区找到这个转换:UMS线程死锁,没有错误码

维基百科在Windows 11中删除的功能页面(https://en.wikipedia.org/wiki/List_of_features_removed_in_Windows_11)上也指出UMS被删除了,但引用只是链接到MSDN页面。

我怀疑的原因是因为Windows 11很新,所以这可能只是一个内核错误或未实现的功能?

而且,这是一个非常重要的功能,没有替代品可用。相比之下,InterlockedExchangeAquire (https://learn.microsoft.com/en-us/previous-versions/windows/desktop/legacy/ms683594(v=vs.85)等api仍然被支持,尽管它们特定于已经停产的IA-64。

我找不到微软关于取消这一功能的任何官方声明。

官方支持声明现在在文档中:

从Windows 11开始,不支持用户模式调度。所有呼叫失败,报错ERROR_NOT_SUPPORTED.

这是Raymond Chen在提请他们注意后于2022年3月15日添加的,该文档不再反映现实。

不幸的是,看起来UMS已经正式停产了。这是由一个可以访问Windows内核的微软员工向我证实的。

此代码目前在Windows 11中发布:

WINBASEAPI BOOL WINAPI
EnterUmsSchedulingMode(
__in PUMS_SCHEDULER_STARTUP_INFO SchedulerStartupInfo
)
{
UNREFERENCED_PARAMETER(SchedulerStartupInfo);
SetLastError(ERROR_NOT_SUPPORTED);
return FALSE;
}

虽然从技术上讲这可能只是一个临时的"热修复";根据参与该功能的员工的说法,更有可能的解释是,由于缺乏使用,该功能被删除了。

来源:https://twitter.com/itanium_guy/status/1512127881740181509

最新更新