It's because Microsoft treats DLLs as what amount to separate processes. An EXE and a DLL only differ from one another by the first character in the file - one byte is all that separates a DLL and an EXE. The program rundll.exe is what loads and runs these DLLs but they are not that much different than exes other than they are loaded dynamically. Because of this they also have a separate CRT which causes all sorts of trouble b/c of the way DLLs were designed to be used.