2009-07-16 4 views
5

Existe-t-il un moyen de créer un processus en mode utilisateur à partir du mode noyau sur la plate-forme Windows NT (XP-W7)?Créer un processus à partir d'un pilote

EDIT: Je dois installer uniquement le pilote. C'est un spécifique du projet.

+0

Je pense à injecter un thread avec mon propre code en mode utilisateur à certains processus utilisateur du pilote ... –

+0

Regardez http://www.codeproject.com/KB/system/KernelExec.aspx. Intéressant ... –

Répondre

5

Pour créer un processus win32 valide, le pilote doit communiquer avec CSRSS (ce qui est complètement non documenté). J'ai donc fini par mettre en file d'attente un APC en mode utilisateur et allouer de la mémoire virtuelle pour le code APC dans le contexte du processus win32 existant (ce code appelle CreateProcess et fait le travail).

C'est une manière délicate mais cela fonctionne.

2

Je ne connais pas un moyen plus simple d'y parvenir. Mais qu'en est-il de l'exécution d'un service Windows qui fait que DeviceIoControl se chevauche dans votre pilote? Au retour, le service pourrait examiner les données qu'il a reçues du pilote et lancer l'application correspondante.

+1

Je dirais que c'est la bonne solution. Émettez un IRP inverse à partir d'un service, laissez le pilote terminer quand il a besoin du processus en mode utilisateur pour commencer. –

+0

Merci pour suggestion, mais je ne peux pas avoir mon service en cours d'exécution (Si seulement le service sera installé et démarré à partir du mode noyau). –

+0

@Sergius: Vous devez quand même installer le pilote. Vous pouvez installer le service en utilisant le même fichier INF. –

0

Cela ne peut pas être effectué directement - La création d'un processus win32 nécessite une configuration par la partie mode utilisateur de CreateProcess, et pas seulement la création de l'objet processus en mode noyau.

Vous avez besoin d'un code de mode utilisateur ici - soit un service, une application de bureau, etc. pour lancer l'application en mode utilisateur.

Questions connexes