void KeSetAffinityThread(PKTHREAD pKThread, KAFFINITY cpuAffinityMask)
例程,其文档可以在OS / 2内核文档中找到。 Windows仍然在其内核中保留此API。此API可用于设置任何线程的关联掩码。当我们在系统中有超过64个处理器时,我正在寻找方法。
小背景 -
随着Windows 7中处理器组功能的引入,我们再也无法安全地依赖KAFFINITY,因此我无法使用上述API,因为在具有64个以上处理器的系统上运行时代码将不可靠。我无法在MSDN中找到合适的替代品,MSDN提供的API包括KeSetSystemAffinityThread
,KeSetSystemGroupAffinityThread
,但它不能满足我的目的,因为这些调用仅用于设置调用线程的亲和性。
我还看到一个函数 - SetThreadAffinityMask()
来设置任意线程的亲和力,但这是一个用户级例程。我在内核模式中寻找类似的东西。
答案 0 :(得分:0)
答案 1 :(得分:0)
用户模式SetThreadAffinityMask
API调用NtSetInformationThread
你可以在内核模式下做同样的事情:
ULONGLONG affinity = <affinity mask>;
ZwSetInformationThread(hThread, ThreadAffinityMask, &affinity, sizeof(affinity));