Есть много чего, кроме уже указанных этапов (загрузка PE, перечисление dll, от которых он зависит, вызов их точек входа и вызов точки входа exe).
Вероятно, самое раннее действие - это ОС ипроцессор сотрудничает, чтобы создать новую инфраструктуру адресного пространства (я думаю, по существу выделенный TLB ).ОС инициализирует Блок среды процесса с данными всего процесса (например, идентификатор процесса и переменные среды).Он инициализирует блок окружения потока со специфичными для потока данными (идентификатор потока, корневые обработчики SEH и т. Д.).Как только соответствующий адрес выбран для каждой dll и загружен туда, переадресация экспортируемых функций происходит загрузчиком Windows.( очень кратко - во время компиляции, dll не может знать адрес, по которому она будет загружена каждым пользователем exe. Фактические адреса вызовов его функций, таким образом, определяются только во время загрузки).Есть инициализации страниц памяти, разделяемых между процессами - например, для сообщений Windows - и я думаю, что некоторая инициализация структур дискового разбиения на страницы. PLENTY еще продолжается.Основным компонентом Windows действительно является загрузчик Windows, но задействованы ядро и руководитель. Наконец, , вызывается точка входа в exe - по умолчанию BaseProcessStart.
Обычно после этого происходит большая подготовка, выше уровня ОС, в зависимости от используемых платформ (каноническихCRT для собственного кода и CLR для управляемого): платформа должна инициализировать свои собственные внутренние структуры, чтобы иметь возможность предоставлять сервисы приложению - управление памятью, обработка исключений, ввод-вывод, вы называете это.
Aотличное место для таких углубленных обсуждений - Windows Internals .Вы также можете копнуть немного глубже на форумах, таких как SO, но у вас есть , чтобы можно было разбить его на более сфокусированные биты.Как сформулировано, это действительно слишком много для SO сообщения.