Sie können eine MFC-Anwendung nicht ausführen, bevor Windows gestartet wird, da per Definition MFC von Windows-DLLs ausgeführt wird, die nicht geladen werden, bis Windows selbst ist. Ganz zu schweigen davon, dass Windows dafür verantwortlich ist, eine PE zu laden, so dass Sie nicht einmal in der Lage sind, eine kompilierte EXE oder DLL ohne einen benutzerdefinierten Bootstrapper zu laden.
Um zu tun, was Sie tun möchten, haben Sie ein paar Optionen. Es gibt (einfache) Möglichkeiten, Windows so zu setzen, dass eine Anwendung beim Start geladen wird. Wenn es das ist, was Sie wollen, dann ist das durchaus möglich.
Wenn Sie jedoch Code vor und während Fenster ausführen möchten anläuft, dann müssen Sie zunächst das Bootstrap-Programm überschreiben (mit so etwas wie GRUB), Code auszuführen (auch hier werden Sie keinen Zugang zu Standard haben Bibliothek - Sie müssen direkt mit den Puffern arbeiten, die Ihnen von der CPU zur Verfügung gestellt werden, wenn Sie irgendeine Art von I/O durchführen wollen. Dann starten Sie Windows, indem Sie den Bootstrapper starten. Ich habe keine Ahnung, wie ich das machen soll; aber das ist der allgemeine Überblick darüber, was passieren muss.
Sie erwähnten DLL-Injektion, die eine andere Möglichkeit ist. Ich bin nicht vertraut mit welchen DLLs und in welcher Reihenfolge beim Start von Windows geladen werden. Das wird eine Übung für dich sein. Was Sie beachten müssen, ist, dass die höhere Ebene, auf der Sie existieren möchten (dh welche Bibliotheken Ihnen für die Datei-/Konsolen-I/O zur Verfügung stehen), höher ist, um Ihren Code im Windows-Startprozess auszuführen .
Mein Vorschlag an Sie ist einfach ein Programm schreiben, das als ein Dienst ausgeführt wird, der während der Windows-Initialisierung gestartet wird. Es ist leicht zu machen, und Sie werden die gesamte HAL geladen haben und bereit sein, tatsächlich Aufgaben auszuführen - anstatt dass Sie gerätespezifische Treiber schreiben müssen, um die Hardware zu manipulieren, bevor das Fenster die HAL lädt.
Ich verstehe eine Sache nicht, wie werden Sie eine MFC-Anwendung ohne eine laufende Betriebsplattform ausführen? DLL-Injektion - Sie müssen eine DLL in einen Prozess injizieren, der Prozess, wenn kein Betriebssystem geladen ist? –
Dies würde viel mehr Sinn machen, wenn Sie "Shell" am Ende der "2)" Kugel hinzufügen. Die TSR-Referenz ist verwirrt und irrelevant. – darron
@Josn hat einen Punkt, ich bewundere die Erklärung des Autors der Ausführung der MFC-Anwendung (erster Punkt in Anforderungen). –