在创建进程通知例程中从内核驱动程序分配进程TLS索引是否安全

时间:2017-11-05 14:20:43

标签: windows multithreading windows-kernel

是否安全,如果在CREATE_PROCESS_NOTIFY_ROUTINE我将使用TLS分配RtlFindClearBitsAndSet(线程本地存储)索引? 我看到,TlsAlloc()例程正是这样做的:

  1. RtlAcquirePebLock

  2. RtlFindClearBitsAndSet - TIB->TEB->PEB->TLSBitmap

  3. RtlReleasePebLock

  4. 我已经在用户模式下对此进行了测试,目前正计划将此过程提升到我的内核驱动程序(没有步骤1和3)以进行特定操作。

    所以,基本上,我的问题 - 是否安全?

1 个答案:

答案 0 :(得分:1)

创建进程时,在新进程中的初始线程开始执行之前,process-notify例程在创建新进程的线程的上下文中运行。此时新进程PEB尚未完全初始化。此时PEB.TlsBitmap的{​​{1}}成员为0。新进程中的 ntdll.dll 稍后将其标记为未导出的全局变量 - PEB。所以问题事件不安全/不安全。根本不可能 enter image description here