Исполняемый файл службы Windows случайно застрял в «Ожидание запуска» после перезагрузки в Windows 10 - PullRequest
0 голосов
/ 06 октября 2018

У меня есть ситуация, когда мое приложение-служба автозапуска Windows явно загружается и вызывает процедуру запуска в «родительской» DLL1.DLL (используя LoadLibrary / GetProcAddress - нет библиотек импорта).Процедура запуска в «родительской» DLL, в свою очередь, явно загружает несколько «дочерних» DLL: DLL2, DLL3 и DLL4.В любых подпрограммах DLLMain нет вызовов LoadLibrary.Исполняемый файл службы и все библиотеки DLL разработаны на языке C.

. В Windows 7 все это работает нормально, но в Windows 10 служба случайно зависает в состоянии отложенного запуска после перезагрузки.Отладочный вывод показывает, что он не возвращается из LoadLibrary, где родительская DLL1 загружает одну из дочерних DLL.Вывод отладки также показывает, что подпрограмма DLLMain дочерней DLL даже не вызывается.

Все подпрограммы DLLMain очень просты.Все, что они делают, это InitializeCriticalSection, если ul_reason_for_call == 0. Они ничего не делают, как вызов LoadLibrary внутри DLLMain.

Я прочитал несколько статей / тем о пуле потоков Windows 10, таких как this и это .

Насколько я понимаю, в Windows 10 многопоточность загружает неявную LoadLibrary (т. Е. Через Import Library).Но это также многопоточность загрузки явной LoadLibrary?Например, может ли дочерняя DLL2 все еще загружаться, когда дочерняя DLL3 начинает загружаться?

Поскольку это случайная вещь, это, очевидно, должно быть проблемой синхронизации и / или потока.Любые предложения будут ценны.Я потратил пару недель на это, и я в замешательстве.

...