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

Is it safe to allocate process TLS index from kernel driver in create process notify routine

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

  1. RtlAcquirePebLock

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

  3. RtlReleasePebLock

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

所以,基本上,我的问题 - 它安全吗?

创建进程时,进程通知例程在创建新进程的线程的上下文中运行,然后新进程中的初始线程开始执行。此时新进程 PEB 尚未完全初始化。来自 PEBPEB.TlsBitmap 成员此时为 0。 ntdll.dll 在新进程中稍后将其分配给未导出的全局变量 - ntdll.TlsBitmap。所以问题事件不是 safe/unsafe。根本不可能