zoukankan      html  css  js  c++  java
  • tls callback例子

     1 #include <windows.h>
    2 #include <winnt.h>
    3 //下面这行告诉链接器在PE文件中要创建TLS目录
    4 #pragma comment(linker, "/INCLUDE:__tls_used")
    5 //这是PIMAGE_TLS_CALLBACK()函数的原型
    6 //其中第一个和第三个参数保留,第二个参数决定函数在那种情况下
    7 void NTAPI my_tls_callback(PVOID h, DWORD reason, PVOID pv)
    8 {
    9 ///共有四个选项DLL_PROCESS_ATTACH、DLL_THREAD_ATTACH、DLL_THREAD_DETACH和DLL_PROCESS_DETACH
    10 //仅在进程初始化创建主线程时执行的代码
    11 if( reason == DLL_PROCESS_ATTACH )
    12 {
    13 MessageBox(NULL,L"hi,this is tls callback",L"title",MB_OK);
    14 }
    15 return;
    16 }
    17 //下面这段是创建一个tls段
    18 //".CRT$XLB"的含义是:
    19 //.CRT表明是使用C RunTime机制
    20 //$后面的XLB中
    21 //X表示随机的标识
    22 //L表示是TLS callback section
    23 //B可以被换成B到Y的任意一个字母,但是不能使用".CRT$XLA"和".CRT$XLZ"
    24 //因为".CRT$XLA"和".CRT$XLZ"是用于tlssup.obj的
    25
    26 #pragma data_seg(".CRT$XLB")
    27 //如果要定义多个TLS_CallBack函数,可以把下面这句写成:
    28 //PIMAGE_TLS_CALLBACK p_thread_callback [] = {tls_callback_A, tls_callback_B, tls_callback_C,0};
    29 //其中tls_callback_B和tls_callback_C应该是你定义好的其他TLS_callBack函数
    30
    31 PIMAGE_TLS_CALLBACK p_thread_callback = my_tls_callback;
    32 #pragma data_seg()
    33
    34 int main(void)
    35 {
    36 MessageBox(NULL,L"hi,this is main()",L"title",MB_OK);
    37 return 0;
    38 }
  • 相关阅读:
    三维形体的表面积
    访问所有点的最小时间
    链式队列
    顺序队列
    链栈
    顺序栈
    双向链表
    pyrhon 开始 基础类型
    GDI+_VB6_ARGB
    WindowsPhone自定义控件详解(一)
  • 原文地址:https://www.cnblogs.com/dsky/p/2355212.html
Copyright © 2011-2022 走看看