До Windows 8.1 операции приостановки и возобновления нити контролировались одной маской доступа, что отражает статья Thread Security and Access Rights:
И это подтверждалось телом функции NtResumeThread (6.2.9200.16384):
mov edx,2 mov rcx,r10 call ObReferenceObjectByHandleWithTag
Но в ядре Windows 8.1 маска доступа сменилась (6.3.9600.16384):
mov edx,000001000 mov rcx,r10 call ObReferenceObjectByHandleWithTag test eax,eax js .00000001`403B2F3C ... ; .00000001`403B2F3C: add rsp,040 pop rbx retn
Что характерно, новое ядро полностью потеряло совместимость со старой маской доступа. Новую константу 0x1000 можно найти в wdm.h от WDK 8.1:
#define THREAD_RESUME (0x1000)
MSDN про новый флаг ничего не рассказывает, но есть косвенное упоминание у Alex Ionescu в статье The Evolution of Protected Processes Part 2: Exploit/Jailbreak Mitigations, Unkillable Processes and Protected Services:
Остается только порадоваться, что теперь операции приостановки и возобновления нити являются разными с точки зрения безопасности.
ΞρεΤΙκ