воскресенье, 14 февраля 2010 г.

CreateProcess не ждёт, пока процесс запустится

Это перевод CreateProcess does not wait for the process to start. Автор: Реймонд Чен.

Функция CreateProcess создаёт новый процесс, но она не ждёт, пока процесс "раскрутится" до возврата управления. Она просто создаёт объект ядра процесс и возвращает управление, позволяя процессу заниматься своими делами.

Модель процессов Win32 такова, что каждый процесс инициализирует себя сам в своём же контексте. Когда создаётся объект процесса, он практически пуст и хранит информацию, достаточную только для того, чтобы начать выполнять код процесса. Когда поток процесса получает управление, он начинает выполнять работу по загрузке DLL, инициализации их в правильном порядке (это всё делает загрузчик ОС - т.е. системный код), после чего вызывает точку входа программы (а это уже - ваш код).

Если, в процессе этой работы, один из шагов по запуску процесса закончится неудачей, то процесс убивается, а код завершения процесса (exit code) сообщит вам о причине, почему процесс не смог запуститься (заметьте: код выхода, а не результат вызова CreateProcess, т.к. к этому моменту CreateProcess уже завершила выполнение и отрапортовала об успешном запуске процесса). Например, если проблема в том, что в DLL не найдена импортируемая функция, то код завершения будет равен STATUS_ENTRYPOINT_NOT_FOUND.

(и не забудьте, что вы можете вызвать функцию SetErrorMode для отключения диалога об ошибке).

[Добавлено 05.0.3.2014]: больше материала по CreateProcess.

Комментариев нет:

Отправить комментарий

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.