Загрузка DLL при создании процесса через CreateProcess()

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Hawk, Romeo, Eugie

Ответить
TamerLAN
Сообщения: 7
Зарегистрирован: 31 янв 2006, 13:59
Откуда: из Орды

08 фев 2006, 15:29

В программе запускаю функцию CreateProcess с флагом CREATE_SUSPENDED. Никак не могу выяснить, подгружаются ли dll-ки к программе сразу при создании процесса или уже после, когда я "оживляю" его через ResumeThread :? В MSDN по этому поводу информации не нашёл. Может, кто знает... :wink:
Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

09 фев 2006, 15:31

Все implicitly linked DLL подгружаются к моменту возврата из CreateProcess(). Есть одно исключение - DLL, в которых размещены hook procedures для глобальных хуков. Они подгружаются при 1-й выборке сообщения соотв.типа из message queue процесса.
TamerLAN
Сообщения: 7
Зарегистрирован: 31 янв 2006, 13:59
Откуда: из Орды

10 фев 2006, 08:26

Спасибо за инфу! :)
TamerLAN
Сообщения: 7
Зарегистрирован: 31 янв 2006, 13:59
Откуда: из Орды

11 фев 2006, 00:05

Прошу прощения за назойливость, но появился еще один вопрос, на который не могу никак найти полноценный ответ в мануалах: как можно добиться того, чтобы запуск программы через CreateProcess() НИКАК не зависел от родительского процесса? :?:
Дело в том, что я выпоняю следующий код:
STARTUPINFO si;
PROCESS_INFORMATION pi;

ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );

CreateProcess("program.exe" ,
NULL,
NULL,
NULL,
FALSE,
CREATE_SUSPENDED,
GetEnvironmentStrings(),
NULL,
&si,
&pi )
)
Однако после запуска программы program.exe в ней не работают диалоговые окна. При обычном запуске через Explorer всё работает нормально... :shock:
Ответить