Блокировка загрузчика - это блокировка всего процесса, используемая системой для синхронизации доступа к загрузке DLL в адресное пространство процесса. Функции, которые загружают DLL, бесплатные DLL, запрашивают информацию DLL и т. Д., Все получают блокировку загрузчика. Что больше всего влияет на разработчиков, так это то, что блокировка загрузчика удерживается во время работы DllMain - это означает, что блокировка ОС, о которой вы обычно не знаете, может удерживаться во время выполнения вашего кода.
Блокировку загрузчика можно рассматривать как находящуюся на очень низком уровне в иерархии блокировок. Код, работающий под блокировкой загрузчика во время DllMain, может быть причиной тупиков. Например, CLR имеет свой собственный набор внутренних блокировок, которые он может удерживать при загрузке DLL. Если вы вызываете управляемый код из вашего DllMain, вы можете заставить CLR вашего потока получить одну из этих блокировок, удерживая блокировку загрузчика. Если CLR в другом потоке получит эту блокировку (в результате чего поток источника в DllMain заблокируется), а затем попытается загрузить DLL, которая получит блокировку загрузчика, ваш процесс заблокируется.
Похоже, что CLR пытается превентивно обнаружить запуск управляемого кода под блокировкой загрузчика. Когда вы видите стек от этого сбоя в отладчике, определите причину выполнения управляемого кода из DllMain и удалите его.