__fastfail
Specyficzne dla firmy Microsoft
Natychmiast przerywa proces wywoływania z minimalnym obciążeniem.
Składnia
__declspec(noreturn) void __fastfail(unsigned int code);
Parametry
kod
[in] Stała symboliczna FAST_FAIL_<description>
z winnt.h lub wdm.h wskazująca przyczynę zakończenia procesu.
Wartość zwracana
Funkcja wewnętrzna __fastfail
nie zwraca.
Uwagi
Funkcja wewnętrzna __fastfail
zapewnia mechanizm szybkiego żądania niepowodzenia — sposób na potencjalnie uszkodzony proces żądania natychmiastowego zakończenia procesu. Krytyczne błędy, które mogą mieć uszkodzony stan programu i stos poza odzyskiwaniem, nie mogą być obsługiwane przez zwykłą obsługę wyjątków. Użyj polecenia __fastfail
, aby zakończyć proces przy użyciu minimalnego obciążenia.
__fastfail
Wewnętrznie jest implementowany przy użyciu kilku mechanizmów specyficznych dla architektury:
Architektura | Instrukcja | Lokalizacja argumentu kodu |
---|---|---|
x86 | 0x29 int | ecx |
x64 | 0x29 int | rcx |
ARM | 0xDEFB opcode | r0 |
ARM64 | 0xF003 opcode | x0 |
Szybkie żądanie niepowodzenia jest samodzielne i zwykle wymaga dwóch instrukcji do wykonania. Po wykonaniu szybkiego żądania niepowodzenia jądro podejmuje odpowiednią akcję. W kodzie trybu użytkownika nie ma zależności pamięci poza samym wskaźnikiem instrukcji, gdy zostanie zgłoszone szybkie zdarzenie niepowodzenia. To maksymalizuje jego niezawodność, nawet w przypadkach poważnego uszkodzenia pamięci.
Argument code
, jedna z FAST_FAIL_<description>
symbolicznych stałych z winnt.h lub wdm.h, opisuje typ warunku błędu. Jest on dołączany do raportów o awariach w sposób specyficzny dla środowiska.
Żądania szybkiego trybu użytkownika w trybie fail są wyświetlane jako drugi prawdopodobieństwo, że nie jest to ciągły wyjątek z kodem wyjątku 0xC0000409 i z co najmniej jednym parametrem wyjątku. Pierwszy parametr wyjątku jest wartością code
. Ten kod wyjątku wskazuje Raportowanie błędów systemu Windows (WER) i infrastrukturę debugowania, którą proces jest uszkodzony, i że należy wykonać minimalne akcje w procesie w odpowiedzi na awarię. Żądania szybkiego trybu jądra są implementowane przy użyciu dedykowanego kodu KERNEL_SECURITY_CHECK_FAILURE
kontroli usterek (0x139). W obu przypadkach nie są wywoływane żadne programy obsługi wyjątków, ponieważ program ma być w stanie uszkodzonym. Jeśli debuger jest obecny, daje możliwość zbadania stanu programu przed zakończeniem.
Obsługa natywnego szybkiego mechanizmu awarii rozpoczęła się w systemie Windows 8. Systemy operacyjne Windows, które nie obsługują szybkiej instrukcji awaryjnej natywnie, zwykle traktują szybkie żądanie niepowodzenia jako naruszenie dostępu lub jako usterkę UNEXPECTED_KERNEL_MODE_TRAP
. W takich przypadkach program jest nadal przerywany, ale niekoniecznie tak szybko.
__fastfail
jest dostępny tylko jako element wewnętrzny.
Wymagania
Nieodłączny | Architektura |
---|---|
__fastfail |
x86, x64, ARM, ARM64 |
Plik<nagłówka intrin.h>
END Microsoft Specific