DllMain函數不可作的幾件事兒

詳情請見看雪論壇上 bookworm 大牛的講解:http://bbs.pediy.com/showthread.php?threadid=30058php

 

一、DllMain中不能夠作的事情:api

  •     CreateProcess / CreateThread
  •     GUI API (載入gdi32.dll或user32.dll)
  •     Registry API (advapi32.dll)
  •     CoInitiaklize(Ex), CoUnInitialize (ole32.dll)
  •     malloc / calloc / free (msvcrt.dll)
  •     GetModuleFileName, GetModuleHandle, 等等:儘管它們不載入DLL,但會引發系統產生一個Lock,所以有可能產生死鎖(deadlock)。
  •     ExitThread:若是你在DllMain裏調用它,則會再次進入DllMain,你固然明白這意味着什麼。
  •     I/O(輸入輸出)函數,可能會引發等待。

二、能夠作的事情:數據結構

  •     初始化全局變量和全局數據結構
  •     初始化CriticalSection
  •     TLS API: alloc/set/get/free
  •     Win32 內存管理API:Virtualxxx / Heapxxx,僅僅限於使用進程的堆(heap)
  •     CreateFile / ReadFile / WriteFile等等
相關文章
相關標籤/搜索