2009-09-13 16 views
8

Jak mogę uzyskać tryb pracy dzwonka 0 dla mojego procesu w systemie Windows 7 (lub Vista)?Uzyskiwanie trybu dzwonka 0 w C++ (Windows)

+3

zadaj sobie pytanie: czy naprawdę powinienem napisać proces 0 kernal? –

+0

Właściwie powiedz nam, dlaczego chcesz uruchomić dzwonek 0, a my powiemy ci, czy to dobre rozwiązanie, czy nie. – Artelius

+0

@Mitch: Wyszukaj KERNAL w Wikipedii. To błąd w pisowni. – Artelius

Odpowiedz

16

Umożliwienie uruchomienia dowolnego kodu w pierścieniu 0 narusza podstawowe zasady bezpieczeństwa systemu operacyjnego.

Tylko jądro systemu operacyjnego i sterowniki urządzeń działają w pierścieniu 0. Jeśli chcesz napisać kod 0, napisz sterownik urządzenia Windows. This może być pomocne.

Pewne luki w zabezpieczeniach może umożliwić uruchomienie kodu w pierścieniu 0 też, ale to nie jest przenośny, ponieważ dziura może być ustalona w plastrze: P

+0

Jak mogę napisać sterownik urządzenia Windows? –

+0

Zmieniono moją odpowiedź. – Artelius

+0

Dzięki, to jest bardzo dobre i pomocne! –

2

nie można ustawić trybu jądra z procesu trybu użytkownika. Tak działa bezpieczeństwo.

7

Technicznie rzecz biorąc, wszystkie procesy mają pewne wątki spędzające część swojego czasu w trybie jądra (ring 0). Za każdym razem, gdy proces trybu użytkownika wprowadza system operacyjny do systemu operacyjnego, następuje przejście, w którym wątek dostaje się do pierścienia 0 przez "bramę". Ilekroć proces musi rozmawiać z urządzeniem, przydzielać więcej pamięci w całym procesie lub odradzać nowe wątki, syscall jest używany do proszenia systemu operacyjnego o dostarczenie tej usługi.

Dlatego jeśli chcesz, aby proces uruchomił jakiś kod w pierścieniu 0, będziesz musiał napisać sterownik, a następnie komunikować się z tym sterownikiem przez kilka systemów. Najczęściej spotykaną w tym przypadku syscall nazywa się ioctl (oznacza sterowanie we/wy).

Kolejną rzeczą, na którą warto zwrócić uwagę na platformie Windows, jest UMDF (User-Mode Driver Framework). Pozwala to na pisanie, debugowanie i testowanie sterownika w trybie użytkownika (uruchamianie w ringu 3), ale nadal jest dostępne dla innych sterowników lub innych procesów w systemie.

Powiązane problemy