![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
AppInit_Dll - механизм работы.
Riply © (2008-07-04 23:41:00)Здравствуйте !
Подскажите, пожалуйста, каким образом подгружаются библиотеки из AppInit_Dll ?
Интересует не как подгрузить с помощью ключа, а сам механизм.
Например, один из вариантов:
Создается Suspended процесс.
В нем создается нить, загружающая Dll-ку.
Процесс будится.
Но это домыслы, а как все реализовано "на самом деле" ?
Riply (2008-07-05 14:54:00) [21]> [1] Игорь Шевченко © (05.07.08 13:38)
Спасибо.
Игорь Шевченко (2008-07-05 13:38:00) [22]
> а сам механизм.
Сам механизм прост - LoadLibrary.
Каждый процесс, загружающий какие-либо DLL, вызывает при этом DllEntryPoint от этих DLL, надеюсь, этот механизм не надо пояснять ?
В процессе выполнения DllEntryPoint выполняются какие-либо действия. В частности, одним из действий в DllEntryPoint у user32.dll является сканирование ключа реестра AppInit_Dll и загрузка всех перечисленных в нем Dll в память процесса (и вызов их инициализации).
Если приложение не использует user32.dll, то никакие AppInit_Dll в его адресное пространство не загрузятся (например, в SMSS.EXE ничего не загружается, а вот в WinLogon.EXE - загружается)
На самом деле все немного хитрее происходит, но суть примерно такая.