C语言注册TLS回调函数
#include <windows.h>
#include <iostream>
#ifdef _WIN64
#pragma comment (linker, "/INCLUDE:_tls_used")
#else
#pragma comment (linker, "/INCLUDE:__tls_used")
#endif
//#pragma comment (linker, "/INCLUDE:pTLS_CALLBACKs")
_declspec(thread) DWORD dw = 0x12345678;
_declspec(thread) DWORD dw1 = 0xCCCCCCCC;
void NTAPI TLS_CALLBACK(PVOID DllHandle, DWORD Reason, PVOID Reserved) //TLS callback function
{
std::cout << "TLS_CALLBACK" << std::endl;
}
void NTAPI TLS_CALLBACK1(PVOID DllHandle, DWORD Reason, PVOID Reserved) //TLS callback function
{
std::cout << "TLS_CALLBACK1" << std::endl;
}
#ifdef _WIN64
#pragma const_seg(".CRT$XLB")
EXTERN_C const
#else
#pragma data_seg(".CRT$XLX")
#endif
PIMAGE_TLS_CALLBACK pTLS_CALLBACKs[] = { TLS_CALLBACK, TLS_CALLBACK1,0 };
#ifdef _WIN64
#pragma const_seg()
#else
#pragma data_seg()
#endif
int main(void)
{
return 0;
}
TLS回调具有如下特性:
1.回调函数会在进程启动时,进程结束时,线程启动前,线程结束后,依次触发,并且TLS回调函数结束后,才会运行导致它被触发的主线程或线程
2.回调函数只能阻塞触发它调用的线程,如线程一的TLS回调函数被触发,不会影响主线程。
3.多个回调函数是依次调用的,只有上一个回调函数结束才会开始下一个回调函数

浙公网安备 33010602011771号