用户模式调度程序 (UMS) returns ERROR_NOT_SUPPORTED

User Mode Scheduler (UMS) returns ERROR_NOT_SUPPORTED

我想使用 Windows 用户模式调度程序 API 但是我在互联网上找到的每个示例 C 或 C++ 都失败了。我总是得到 ERROR_NOT_SUPPORTED.

我的电脑是 运行 Windows 10 Pro 64 位 x64 处理器。我正在使用 VS2015,应用程序是 x64 控制台应用程序。

值得注意的是,在我测试过的 4 个样本中,并非每次调用都失败

  1. 进入UmsSchedulingMode
  2. CreateRemoteThreadEx

失败ERROR_NOT_SUPPORTED。这些是让事情顺利进行所必需的,但例如 CreateUmsCompletionList 或 GetUmsCompletionListEvent 则不需要。

API 使用起来并不简单,但我很难相信它们都是错误的。

我调试了一些 EnterUmsSchedulingMode 内部发生的事情,在 RtlpAttachThreadToUmsCompletionList 内部调用 NtSetInformationThread 时似乎出现了问题,尽管对此我不太确定。

这是我试过的 one and here is another 个示例。

如果您使用的是 Ivy Bridge 之前的处理器,由于在 x64 上创建 LDT 时存在潜在的安全问题,UMS 将无法工作。 Ivy Bridge 可以避免这个问题,如果处理器无法访问 Ivy Bridge 功能,Windows 10(表面上是 Server 2016)更新只会禁用 UMS 功能。

更多信息在这里:http://www.alex-ionescu.com/?p=340