Not an answer but i don't have CodeSite installed, so i changed these calls to OutputDebugString.
My observation on Delphi XE8
1) It is working in the Debugger and no
IDE crash.
2) There is a problem when it is running with the debugger, BUT the output is stopping after the first hook report, then nothing being captured in
IDE EventLog.
with DebugView and the application running without a debugger the output is correct and there is no failure, so my deduction is the debugger is faulty or CodeSite is not prepared for MultiThreading inside the debugger with external Threads.
Also i remember a thing from the past, these hooks use
OS threads, meaning they are external for the debugger and these are privileged threads, also TThread is faulty when it comes to ExternalThread in its implementation, as ThreadID will not give you the real thread ID if it is called from the thread itself, it will return DWORD(-2) always, so if the debugger is depending on TThread to external threads like the hook one in this case, then there is a big chance it is messing with its own threads causing the catastrophic failure.
Same about threadID can go with codesite.
Just guessing and hope it help.