Okay, ich versuche es nochmal.
Ein Treiber ist kein Programm, sondern eher mit einer
DLL vergleichbar. Es gibt nur einen Pseudo-Prozeß und das ist der Kernel ("System"), der Rest sind Usermode-Prozesse - und jetzt rate mal warum.
Und ja, es geht durchaus Prozesse auch aus dem Kernelmode zu starten, aber nicht mit NtCreateProcess. Und nein, weder im Native-Mode noch im
Win32-Subsystem reicht NtCreateProcess aus - hast du schon sehr gut verstanden.
Gary Nebbett hat dazu ein gutes Beispiel in seinem Buch. Allerdings möchte ich dich warnen. Willst du einen
Win32-Prozeß starten, mußt du diesen auch beim CSRSS anmelden - das ist komplett undokumentiert und auch nicht so einfach per Reverse Engineering rauszubekommen, zumal es sich mit jeder Betriebssystemversion unterscheidet (und zwar im Gegensatz zur Native
API, wo es bis auf Ausnahmen stabil bleibt, komplett!).
Wenn man über den entsprechenden LPC-Mechanismus mal eine falsche "Nachricht" schickt, kann einem auch schonmal irgendwelche Hardware durchschmoren. Es gab hier bis vor einiger Zeit jemanden im Forum, der diese Erfahrung aktiv gemacht hat.
Vielleicht solltest du dich doch erstmal auf die Grundlagen - sowohl die von C/C++ als auch die der Systemprogrammierung - konzentrieren, bevor du dich in dieses Terrain vorwagst. Es benötigt nämlich Jahre Erfahrung und/oder mehrere Kurse von noch erfahreneren Leuten um Code zu schreiben, der den PC des Anwenders nicht bei jedem zweiten Tastenanschlag zum Stillstand (sprich BSOD) bringt.