Re[6]: Причины ERROR_DLL_INIT_FAILED
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 04.12.17 18:07
Оценка:
Здравствуйте, Aniskin, Вы писали:

O>>А какие нибудь глобальные объекты с конструкторами есть, которые конструируются _до_ dllmain (а по сути — внутри него)? Я с делфями давно дел не имел, не помню как у него с этим.


A>Не понятно, что подразумевается под термином "до dllmain". Как мой код может получить управление до вызова dllmain? В любом случае в dllmain происходит только выделение небольшого количества памяти под список и его заполнение.


На самом деле при загрузке dll-ки производится вызов кода "DllMainImpl", из конторого вызываются конструкторы глобальных объектов и тп. И только потом управление из него передается в DllMain.
Эта DllMainImpl предоставляется рантайм библиотекой твоей среды разработки
Маньяк Робокряк колесит по городу
Re[7]: Причины ERROR_DLL_INIT_FAILED
От: Aniskin  
Дата: 04.12.17 18:11
Оценка:
Здравствуйте, Marty, Вы писали:

M>На самом деле при загрузке dll-ки производится вызов кода "DllMainImpl"


Это специфика сишного рантайма? Гугл по запросу "DllMainImpl" не дает ничего.
Re[8]: Причины ERROR_DLL_INIT_FAILED
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 04.12.17 18:21
Оценка:
Здравствуйте, Aniskin, Вы писали:

M>>На самом деле при загрузке dll-ки производится вызов кода "DllMainImpl"


A>Это специфика сишного рантайма? Гугл по запросу "DllMainImpl" не дает ничего.


Это специфика практически любого рантайма, которому нужно инициализировать глобальные объекты и производить прочие подобные действия. Имя "DllMainImpl" я от балды придумал
Маньяк Робокряк колесит по городу
Re[2]: Причины ERROR_DLL_INIT_FAILED
От: Alexander G Украина  
Дата: 04.12.17 18:26
Оценка:
Здравствуйте, ononim, Вы писали:

O>Хочу заметить что AV внутри DllMain будет словлено SEH фильром загрузчика и наверх вылезет тот же самый ERROR_DLL_INIT_FAILED


Оно вроде пропагейтит код исключения, то есть будет STATUS_ACCESS_VIOLATION == EXCEPTION_ACCESS_VIOLATION == 0xC000'0005

(так, можно интересный результат получить, бросив SEH-нуль оттуда)
Русский военный корабль идёт ко дну!
Re[8]: Причины ERROR_DLL_INIT_FAILED
От: EreTIk EreTIk's Box
Дата: 04.12.17 19:03
Оценка:
A>Спасибо за информацию. А битность систем какая? У меня x64.

Тоже 64-х битная.
Re[6]: Причины ERROR_DLL_INIT_FAILED
От: ononim  
Дата: 04.12.17 21:26
Оценка:
O>>А какие нибудь глобальные объекты с конструкторами есть, которые конструируются _до_ dllmain (а по сути — внутри него)? Я с делфями давно дел не имел, не помню как у него с этим.
A>Не понятно, что подразумевается под термином "до dllmain". Как мой код может получить управление до вызова dllmain? В любом случае в dllmain происходит только выделение небольшого количества памяти под список и его заполнение.
Это может быть и не ваш код. Поскрипев мозгами, я вспомнил про unit initialization — так xnj например, все что в секции initialization подключенных модулей в вашем проекте (включая сторонные bpl или как они там нынче зовуться) — будет исполнено внутри dllmain.
Как много веселых ребят, и все делают велосипед...
Re[6]: Причины ERROR_DLL_INIT_FAILED
От: ononim  
Дата: 04.12.17 21:43
Оценка:
M>>выложите, желательно так, чтобы ее можно было запустить без танцев.
A>Ссылка. В архиве две dll: good.eDecoder.32.dll — в этой dll обе функции из wininet.dll

Ссылка уже не работает. Потому вопрос: а нету ли там в зависимостях какой либо еще длл, которая сама зависит на тот же самый вининет?
Как много веселых ребят, и все делают велосипед...
Отредактировано 04.12.2017 21:48 ononim . Предыдущая версия .
Re[7]: Причины ERROR_DLL_INIT_FAILED
От: Aniskin  
Дата: 04.12.17 22:02
Оценка:
Здравствуйте, ononim, Вы писали:

O>я вспомнил про unit initialization


Это я понимаю. Именно про unit initialization я говорил, когда имел в виду инициализацию своих структур в dllmain. А сама Delphi в реальной dllmain также ничего особенного не делает.
Re[7]: Причины ERROR_DLL_INIT_FAILED
От: Aniskin  
Дата: 04.12.17 22:11
Оценка:
Здравствуйте, ononim, Вы писали:

M>>>выложите, желательно так, чтобы ее можно было запустить без танцев.

A>>Ссылка. В архиве две dll: good.eDecoder.32.dll — в этой dll обе функции из wininet.dll

O>Ссылка уже не работает.


Думал, что уже никому не нужно. Перезалил.

Потому вопрос: а нету ли там в зависимостях какой либо еще длл, которая сама зависит на тот же самый вининет?

Я пытался посмотреть на зависимости в DepWalker, но с этими новомодными api-ms-win-*.dll нихрена не понятно.
Re[8]: Причины ERROR_DLL_INIT_FAILED
От: ononim  
Дата: 04.12.17 22:56
Оценка:
M>>>>выложите, желательно так, чтобы ее можно было запустить без танцев.
A>>>Ссылка. В архиве две dll: good.eDecoder.32.dll — в этой dll обе функции из wininet.dll
O>>Ссылка уже не работает.
A>Думал, что уже никому не нужно. Перезалил.
Сходу потенциальных проблем найти не удалось.
Как много веселых ребят, и все делают велосипед...
Re[6]: Причины ERROR_DLL_INIT_FAILED
От: Aniskin  
Дата: 06.12.17 00:18
Оценка: 6 (1)
Здравствуйте, EreTIk, Вы писали:

ETI>Если выбор падет на WinDbg


Воспользовался вашим советом и стал ковырять WinDbg. В нем увидел, что падение происходило на загрузке wininet.dll. Но в случае удачных загрузок сразу после загрузки wininet.dll происходила загрузка библиотеки криптопровайдера ViPNet CSP. Я деинсталлировал этот криптопровайдер и проблема исчезла. Честь загрузчика Windows восстановлена. Проблема решена, спасибо всем откликнувшимся.
Re[7]: Причины ERROR_DLL_INIT_FAILED
От: ononim  
Дата: 08.12.17 10:22
Оценка:
A>Я деинсталлировал этот криптопровайдер и проблема исчезла. Честь загрузчика Windows восстановлена. Проблема решена, спасибо всем откликнувшимся.
Я тоже както сталкивался с глюками изза какогото криптопровайдера, который зачемто инжектил и хукал все что под руку попадало
Как много веселых ребят, и все делают велосипед...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.