在Windows 7及更高版本的操作系统中,未添加的Windows Kernel API - KeSetAffinity



void KeSetAffinityThread(PKTHREAD pKThread, KAFFINITY cpuAffinityMask)例程在Windows内核中可用,其文档可以在OS/2内核文档中找到。Windows仍然在其内核中保留此API。此 API 可用于设置任何线程的关联掩码。当我们系统中有超过 64 个处理器时,我正在寻找执行此操作的方法。

小背景——随着 Windows 7 中处理器组功能的引入,我们不能再安全地依赖 KAFFINITY,因此我无法使用上述 API,因为在具有 64 个以上处理器的系统上运行时,代码将不可靠。我无法在 MSDN 中找到合适的替代品,MSDN 提供的 API 包括 KeSetSystemAffinityThreadKeSetSystemGroupAffinityThread但它不符合我的目的,因为这些调用仅用于设置调用线程的亲和力。

我还看到一个函数 - SetThreadAffinityMask()设置任意线程的亲和力,但这是一个用户级别的例程。我正在寻找内核模式下类似的东西。

只需使用 KeSetSystemAffinityThreadEx

User mode SetThreadAffinityMask API 调用NtSetInformationThread
您可以在内核模式下执行相同的操作:

ULONGLONG affinity = <affinity mask>;
ZwSetInformationThread(hThread, ThreadAffinityMask, &affinity, sizeof(affinity));

相关内容

  • 没有找到相关文章

最新更新