Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W przypadku wystąpienia wyjątku sprzętowego lub oprogramowania procesor zatrzymuje wykonywanie w momencie wystąpienia wyjątku i przekazuje kontrolę do systemu. Najpierw system zapisuje zarówno stan maszyny bieżącego wątku, jak i informacje opisujące wyjątek. Następnie system próbuje znaleźć procedurę obsługi wyjątków w celu obsługi wyjątku.
Stan komputera wątku, w którym wystąpił wyjątek, jest zapisywany w strukturze CONTEXT. Te informacje (nazywane rekordem kontekstu ) umożliwiają systemowi kontynuowanie wykonywania w punkcie wyjątku, jeśli wyjątek został pomyślnie obsłużony. Opis wyjątku (nazywanego rekordem wyjątku ) jest zapisywany w strukturze EXCEPTION_RECORD. Ponieważ przechowuje informacje zależne od komputera rekord kontekstu niezależnie od informacji niezależnych od maszyny rekordu wyjątku, mechanizm obsługi wyjątków jest przenośny na różnych platformach.
Informacje w rekordach kontekstu i wyjątków są dostępne za pomocą funkcji GetExceptionInformation i mogą być dostępne dla wszystkich procedur obsługi wyjątków wykonywanych w wyniku wyjątku. Rekord wyjątku zawiera następujące informacje.
- Kod wyjątku identyfikujący typ wyjątku.
- Flagi wskazujące, czy wyjątek jest ciągły. Każda próba kontynuowania wykonywania po wystąpieniu wyjątku niekontynuowalnego generuje inny wyjątek.
- Wskaźnik do innego rekordu wyjątku. Ułatwia to tworzenie połączonej listy wyjątków, jeśli wystąpią wyjątki zagnieżdżone.
- Adres, pod którym wystąpił wyjątek.
- Tablica argumentów, które zawierają dodatkowe informacje o wyjątku.
W przypadku wystąpienia wyjątku w kodzie trybu użytkownika system używa następującej kolejności wyszukiwania, aby znaleźć procedurę obsługi wyjątków:
- Jeśli proces jest debugowany, system powiadamia debugera. Aby uzyskać więcej informacji, zobacz Debugger Exception Handling.
- Jeśli proces nie jest debugowany lub skojarzony debuger nie obsługuje wyjątku, system próbuje zlokalizować program obsługi wyjątków oparty na ramce, przeszukując ramki wątku, w którym wystąpił wyjątek. System najpierw przeszukuje bieżącą ramkę stosu, a następnie przeszukuje poprzednie ramki stosu w odwrotnej kolejności.
- Jeśli nie można odnaleźć programu obsługi opartego na ramce lub żaden program obsługi oparty na ramce nie obsługuje wyjątku, ale proces jest debugowany, system powiadamia debugera po raz drugi.
- Jeśli proces nie jest debugowany lub skojarzony debuger nie obsługuje wyjątku, system zapewnia domyślną obsługę na podstawie typu wyjątku. W przypadku większości wyjątków domyślną akcją jest wywołanie funkcjiExitProcess.
W przypadku wystąpienia wyjątku w kodzie trybu jądra system przeszukuje ramki stosu jądra w celu zlokalizowania procedury obsługi wyjątków. Jeśli program obsługi nie może znajdować się lub żaden program obsługi nie obsługuje wyjątku, system zostanie zamknięty tak, jakby wywołano funkcję ExitWindows.