Вы не сможете запустить приложение MFC до запуска Windows, потому что по определению MFC запускает библиотеки DLL Windows, которые не загружаются до тех пор, пока сама Windows не будет. Не говоря уже о том, что Windows - это то, что в первую очередь отвечает за загрузку PE, так что вы даже не сможете загрузить скомпилированный EXE или DLL без специального загрузчика.
Чтобы сделать то, что вы хотите, у вас есть несколько вариантов. Существуют (простые) способы установки окон для загрузки приложения при запуске. Если это то, что вы хотите, то это вполне возможно.
Однако, если вы хотите выполнить код до и во время запуска windows, тогда вы должны сначала перезаписать загрузчик (с чем-то вроде GRUB), выполнить ваш код (опять же, у вас не будет доступа в любую стандартную библиотеку - вам придется работать напрямую с буферами, доступными вам ЦП, если вы хотите выполнить какой-либо ввод-вывод), а затем запустить окна, запустив его загрузчик. Я понятия не имею, как это сделать; но это общий обзор того, что должно произойти.
Вы упомянули внедрение DLL, что является еще одной возможностью. Я не знаю, какие библиотеки DLL и в каком порядке загружаются при запуске Windows. Это будет упражнение для вас. Что вы должны будете принять во внимание, это то, что чем выше уровень, на котором вы хотите существовать (то есть, какие библиотеки доступны для выполнения файлового / консольного ввода / вывода), тем выше вам нужно выполнять свой код в процессе запуска Windows. ,
Я предлагаю вам просто написать программу, которая выполняется как служба, которая запускается во время инициализации Windows. Это легко сделать, и у вас будет весь HAL загружен и готов к фактическому выполнению задач, а не вам придется писать драйверы для конкретного устройства, чтобы манипулировать оборудованием до того, как окно загрузит HAL.