2013-04-08 4 views
7

Sto per scrivere il seguente interazione:Interazione a due vie tra l'app in modalità utente e il driver in modalità kernel?

  • Quando c'è un processo per iniziare, autista notificherà app utente e quindi si attende la risposta dalla app.

  • L'app deciderà se consentire o meno il processo di essere creato normalmente o terminato immediatamente e inviare la decisione al driver.

  • Base sulla decisione dall'app utente. Il driver consentirà o bloccherà l'esecuzione del processo.

La mia domanda è: ciò che è raccomandato modo per comunicare in modalità utente app da guidatore e poi fare l'autista di attesa per la risposta?

+2

Si prega di non inserire tag nel titolo della domanda. A parte questo, un'ottima domanda. –

+0

Quale metodo stai usando per rilevare i processi che stanno per iniziare? –

+0

-Scott Chamberlain: Ci scusiamo per questo. -Harry Johnston: utilizzo psSetCreateProcessNotifyRoutineEx per rilevare la nuova creazione del processo. E poi uso il suo callback PCREATE_PROCESS_NOTIFY_ROUTINE_EX per fare qualcosa con quel nuovo processo. –

risposta

5

Per la notifica dell'evento, è possibile utilizzare un evento di notifica. Cioè il kernel chiama IoCreateNotificationEvent e KeSetEvent. L'utente chiama KeWaitForSingleObject. Per la comunicazione dei messaggi del kernel utente, è possibile utilizzare IOCTL.

In alternativa, è possibile utilizzare solo una named pipe per entrambi gli scopi.

P.S. Non è possibile utilizzare PsSetCreateProcessNotifyRoutine() per il proprio scopo perché è solo per il controllo, ma non per la prevenzione/cancellazione.

+4

Se è su Vista e versioni successive, può utilizzare ['PsSetCreateProcessNotifyRoutineEx'] (http://msdn.microsoft.com/en-us/library/windows/hardware/ff559953 (v = vs.85) .aspx) per impedire processo di creazione. Questa tecnica funzionerà, ma dovrà assicurarsi che il suo callback sia rientranti e probabilmente creare un evento * per processo * su cui il callback andrà in stop mentre lo userspace prende una decisione. Altri avvertimenti: assicurarsi di non bloccare la creazione del processo prima che lo spazio utente sia pronto per prendere decisioni. –

+0

Hai ragione Nik. –