Я не знаю, считаете ли вы это законной целью или нет, но я использую их для внедрения кода в процессы, которые я запускаю.
Сначала процесс запускается с основным потоком, приостановленным с помощью CreateProcess. Затем параметры для LoadLibrary записываются в память этого процесса, а CreateRemoteThread используется для создания нового потока, вызывающего LoadLibrary.
Теперь вы загрузили свой собственный dll в процесс, который вы запустили, и вы можете возобновить его основной поток.
Это полезно, например, для анализ или изменение поведения программы.