2013-03-18 8 views
6

Ostatnio zapytano mnie, jak/jeśli to możliwe, że można to zrobić. Nie jestem pewien, czy to nawet możliwe, i od pewnego czasu szukam go.Jak sprawić, by program C++ nasłuchiwał poleceń systemowych?

Zasadniczo pobierzmy Windows na przykład polecenie systemowe do wyłączenia komputera. Powiedzmy: shutdown -s -t 30 -c "Shutdown"

Czy istnieje sposób napisania programu, który będzie nasłuchiwać polecenia shutdown, a następnie uruchomić shutdown -a w odpowiedzi na przerwanie tego polecenia?

Krótko mówiąc, czy można go wysłuchać pewnych poleceń systemowych na komputerze i wykonać polecenia systemowe w odpowiedzi?

+0

System Windows zawiera wszystkie rodzaje wiadomości, które przesyła. Jednym z nich jest "WM_QUERYENDSESSION". Kiedy już to zrobisz, możesz aktywnie wywołać 'shutdown -a'. Sprawdź tę stronę, aby uzyskać więcej szczegółów na temat zaszywania API http://www.codeproject.com/Articles/2082/API-hooking-realed. – RedX

+0

Pamiętaj, że nie ma żadnego polecenia "shutdown" ** na poziomie Windows. Istnieje program Windows 'Shutdown.EXE', który wie, do którego podstawowego interfejsu API systemu Windows należy się odwoływać. Ale nie jest to jedyny program, który o tym wie. Na przykład. Explorer.EXE (odpowiedzialny za menu startowe) również to zna. Zatem wykrycie "shutdown.EXE" nie wpłynęłoby na zamknięcie programu Explorer.EXE. – MSalters

Odpowiedz

1

Jest to rzeczywiście możliwe. Twój przykład nie jest prawdopodobnie najlepszy do opisania ogólnego problemu. Istnieją zdarzenia sesji w systemie Windows, których aplikacje mogą słuchać, i shutdown is one of them. I w końcu shutdown.exe nie jest jedyną aplikacją, która może poprosić Windows o wyłączenie.

Ogólnie rzecz biorąc, aplikacje "nasłuchujące" wykonywanych poleceń będą musiały ściśle zintegrować się z systemem operacyjnym. Można sobie wyobrazić, że oprogramowanie antywirusowe robi dokładnie to i wiele więcej, aby uniemożliwić wykonanie "złych" programów. Nie jestem zaznajomiony z technologią Windows, ale wyobrażam sobie, że mogę zaatakować wywołanie systemowe systemu Windows, które pozwala na wykonanie plików binarnych. Na pewno będzie to wymagało uprawnień "administracyjnych", a nawet może wymagać napisania modułu jądra.

1

Można pójść w ten sposób:

  1. Sprawdź, czy program jest wychodzącego.
  2. Jeśli tak, anuluj wywołanie programu i wykonaj system("shutdown -a);
  3. Inaczej, rób, co chcesz.

Cóż, prawdopodobnie istnieje wiele bardziej wyrafinowanych sposobów, aby to zrobić. I zgadzam się z odpowiedzią @ VladLazarenko; programy takie jak programy antywirusowe nadal słuchają poleceń systemowych. Ale myślę, że to wymagałoby dogłębnej znajomości API. To prosty sposób na zrobienie tego. Jeśli nie jesteś nowicjuszem, musisz odwiedzić ten link, http://www.codeproject.com/Articles/2082/API-hooking-revealed (z komentarza @ RedX). Powodzenia! :)

Powiązane problemy