在创建进程通知例程中从内核驱动程序分配进程 TLS 索引是否安全
Is it safe to allocate process TLS index from kernel driver in create process notify routine
如果在 CREATE_PROCESS_NOTIFY_ROUTINE
中我将使用 RtlFindClearBitsAndSet
分配 TLS
(线程本地存储)索引安全吗?
我看到,TlsAlloc()
例程是这样做的:
RtlAcquirePebLock
RtlFindClearBitsAndSet
- TIB->TEB->PEB->TLSBitmap
RtlReleasePebLock
我已经在用户模式下对此进行了测试,目前正计划将此过程提升到我的内核驱动程序中(没有步骤 1 和 3)以用于我的特定操作。
所以,基本上,我的问题 - 它安全吗?
创建进程时,进程通知例程在创建新进程的线程的上下文中运行,然后新进程中的初始线程开始执行。此时新进程 PEB
尚未完全初始化。来自 PEB
的 PEB.TlsBitmap
成员此时为 0。 ntdll.dll 在新进程中稍后将其分配给未导出的全局变量 - ntdll.TlsBitmap
。所以问题事件不是 safe/unsafe。根本不可能
如果在 CREATE_PROCESS_NOTIFY_ROUTINE
中我将使用 RtlFindClearBitsAndSet
分配 TLS
(线程本地存储)索引安全吗?
我看到,TlsAlloc()
例程是这样做的:
RtlAcquirePebLock
RtlFindClearBitsAndSet
-TIB->TEB->PEB->TLSBitmap
RtlReleasePebLock
我已经在用户模式下对此进行了测试,目前正计划将此过程提升到我的内核驱动程序中(没有步骤 1 和 3)以用于我的特定操作。
所以,基本上,我的问题 - 它安全吗?
创建进程时,进程通知例程在创建新进程的线程的上下文中运行,然后新进程中的初始线程开始执行。此时新进程 PEB
尚未完全初始化。来自 PEB
的 PEB.TlsBitmap
成员此时为 0。 ntdll.dll 在新进程中稍后将其分配给未导出的全局变量 - ntdll.TlsBitmap
。所以问题事件不是 safe/unsafe。根本不可能