DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
switch (fdwReason) {
/*
- * The DLL is loading due to process
- * initialization or a call to LoadLibrary.
+ * The DLL is loading due to process initialization or a call to
+ * LoadLibrary.
*/
case DLL_PROCESS_ATTACH:
- break;
-
- /* The attached process creates a new thread. */
- case DLL_THREAD_ATTACH:
- break;
-
- /* The thread of the attached process terminates. */
- case DLL_THREAD_DETACH:
+ /*
+ * Disable DllMain() invocation on Thread creation/destruction
+ */
+ DisableThreadLibraryCalls(hinstDLL);
break;
/*
- * The DLL is unloading from a process due to
- * process termination or a call to FreeLibrary.
+ * The DLL is unloading from a process due to process
+ * termination or a call to FreeLibrary.
*/
case DLL_PROCESS_DETACH:
break;
+ case DLL_THREAD_ATTACH:
+ case DLL_THREAD_DETACH:
+ /*
+ * Calling DllMain when attaching/detaching process has been
+ * disabled.
+ */
+ INSIST(0);
+ break;
+
default:
break;
}