2013-04-08 15 views
7

mam zamiar napisać następujące interakcje:Dwukierunkowa interakcja między aplikacją trybu użytkownika i sterownikiem trybu jądra?

  • Gdy nie ma się rozpocząć proces, kierowca powiadomi aplikację użytkownika, a następnie będzie czekać na odpowiedź z aplikacji.

  • Aplikacja podejmie decyzję, czy zezwolić na utworzenie tego procesu normalnie, czy też zostanie rozwiązana natychmiast, a następnie wysłać operatorowi swoją decyzję.

  • Podstawa decyzji z aplikacji użytkownika. Sterownik następnie zezwoli lub zablokuje wykonanie procesu.

Moje pytanie brzmi: Jaki jest zalecany sposób powiadamiania trybu użytkownika aplikacji z kierowcą, a następnie dokonać czekać kierowcy na odpowiedź?

+2

Proszę nie umieszczać tagów w tytule pytania. Poza tym bardzo dobre pytanie. –

+0

Jakiej metody używasz do wykrywania procesów, które wkrótce się rozpoczną? –

+0

-Scott Chamberlain: Przepraszam za to. -Harry Johnston: Używam psSetCreateProcessNotifyRoutineEx do wykrywania nowego procesu tworzenia. A potem używam jej wywołania zwrotnego PCREATE_PROCESS_NOTIFY_ROUTINE_EX, aby zrobić coś z tym nowym procesem. –

Odpowiedz

5

Aby otrzymywać powiadomienia o wydarzeniach, można użyć zdarzenia powiadomienia. To znaczy. jądro wywołuje IoCreateNotificationEvent i KeSetEvent. Użytkownik wywołuje KeWaitForSingleObject. W przypadku komunikacji między użytkownikami jądra można użyć IOCTL.

Alternatywnie możesz użyć potoku nazwanego do obu celów.

P.S. Nie możesz użyć PsSetCreateProcessNotifyRoutine() do swojego celu, ponieważ służy on tylko do kontroli, ale nie do zapobiegania/anulowania.

+4

Jeśli jest w Vista i później, może użyć ['PsSetCreateProcessNotifyRoutineEx'] (http://msdn.microsoft.com/en-us/library/windows/hardware/ff559953 (v = vs.85) .aspx), aby zapobiec tworzenie procesu. Ta technika zadziała, ale będzie musiał upewnić się, że jego oddzwanianie jest stałe i prawdopodobnie utworzy zdarzenie * na proces *, na którym wywołanie będzie spać, podczas gdy userspace podejmie decyzję. Inne zastrzeżenia: upewnij się, że nie blokujesz tworzenia procesów, zanim przestrzeń użytkownika będzie gotowa do podejmowania decyzji. –

+0

Masz rację Nik. –

Powiązane problemy