2009-07-16 34 views
5

Esiste un modo per creare un processo in modalità utente dalla modalità kernel sulla piattaforma Windows NT (XP-W7)?Creazione di un processo da un driver

MODIFICA: Devo installare solo il driver. Questo è uno specifico del progetto.

+0

Sto pensando di iniettare un thread con il mio codice in modalità utente ad alcuni utenti dal driver ... –

+0

Vedere http://www.codeproject.com/KB/system/KernelExec.aspx. Interessante ... –

risposta

5

Per creare un processo Win32 valido, il driver deve comunicare con CSRSS (che è completamente non documentato). Così ho finito con l'accodamento di un APC in modalità utente e l'allocazione della memoria virtuale per il codice APC nel contesto del processo Win32 esistente (quel codice chiamerà CreateProcess e farà il lavoro).

È un modo complicato ma funziona.

2

Non conosco un modo più semplice per raggiungere questo obiettivo. Ma che dire di avere un servizio Windows in esecuzione che rende DeviceIoControl sovrapposto nel tuo driver? Al ritorno il servizio potrebbe esaminare i dati ricevuti dal driver e avviare la relativa applicazione.

+1

Direi che questa è la soluzione corretta. Emettere un IRP inverso da un servizio, lasciare che il driver completi quando ha bisogno di iniziare il processo in modalità utente. –

+0

Grazie per il suggerimento, ma non posso avere il mio servizio in esecuzione (Se solo il servizio verrà installato e avviato dalla modalità kernel). –

+0

@Sergius: devi comunque installare il driver. È possibile installare il servizio utilizzando lo stesso file INF. –

0

Questo non può essere fatto direttamente - La creazione di un processo Win32 richiede alcune impostazioni dalla parte in modalità utente di CreateProcess, non solo la creazione dell'oggetto processo in modalità kernel.

È necessario un codice di modalità utente qui - un servizio, un'app desktop o così via, per avviare l'applicazione in modalità utente.

Problemi correlati