Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@mgeeky
Created June 14, 2022 18:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mgeeky/656c189605c579ff0c395439baf2bf50 to your computer and use it in GitHub Desktop.
Save mgeeky/656c189605c579ff0c395439baf2bf50 to your computer and use it in GitHub Desktop.
TLS Callbacks demo in Windows GUI application, to be compiled with MSVC++. Originally authored by Elias Bachaalany, source: http://lallouslab.net/2017/05/30/using-cc-tls-callbacks-in-visual-studio-with-your-32-or-64bits-programs/
#define WIN32_LEAN_AND_MEAN
#include <iostream>
#include <windows.h>
VOID WINAPI TlsCallback1(PVOID DllHandle, DWORD Reason, PVOID Reserved)
{
if (Reason == DLL_PROCESS_ATTACH)
{
MessageBoxA(NULL, "Hello from TlsCallback1", "TlsCallback1", 0);
}
}
VOID WINAPI TlsCallback2(PVOID DllHandle, DWORD Reason, PVOID Reserved)
{
if (Reason == DLL_PROCESS_ATTACH)
{
MessageBoxA(NULL, "Hello from TlsCallback2", "TlsCallback2", 0);
}
}
#ifdef _M_AMD64
#pragma comment (linker, "/INCLUDE:_tls_used")
#pragma comment (linker, "/INCLUDE:p_TlsCallback1")
#pragma const_seg(push)
#pragma const_seg(".CRT$XLAAA")
EXTERN_C const PIMAGE_TLS_CALLBACK p_TlsCallback1 = TlsCallback1;
#pragma const_seg(".CRT$XLAAB")
EXTERN_C const PIMAGE_TLS_CALLBACK p_TlsCallback2 = TlsCallback2;
#pragma const_seg(pop)
#endif
#ifdef _M_IX86
#pragma comment (linker, "/INCLUDE:__tls_used")
#pragma comment (linker, "/INCLUDE:p_TlsCallback1")
#pragma data_seg(push)
#pragma data_seg(".CRT$XLAAA")
EXTERN_C PIMAGE_TLS_CALLBACK p_TlsCallback1 = TlsCallback1;
#pragma data_seg(".CRT$XLAAB")
EXTERN_C PIMAGE_TLS_CALLBACK p_TlsCallback2 = TlsCallback2;
#pragma data_seg(pop)
#endif
int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow)
{
return MessageBoxA(NULL, "Hello from WinMain", "WinMain", 0);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment