Windows Structured Exception Handling (SEH) has a two-phase structure. When an exception occurs, Windows first looks for a handler for the exception, following the registered chain of exception handlers (the head of which is stored in fs: [0] on x86, that is, the first dword in the segment pointed to by the FS register segment - all this ugly 16-bit logic segment offsets did not disappear in 32-bit, this has become less relevant).
The search is performed by calling a function with a specific flag, a pointer to which is stored in each exception frame on the stack. fs: [0] indicates the top frame. Each frame indicates a previous frame. Ultimately, the last frame in the list is the one that was provided by the OS (this handler will open the crash application dialog box if it receives an unhandled exception).
These functions usually check the type of exception and return code indicating what to do. One of the codes that can be returned is basically "ignores this exception and continues." If Windows sees this, it will reset the instruction pointer to the exception point and resume execution. Another code indicates that this exception frame should handle this exception. Third code: "I will not catch this exception, continue the search." Windows continues to call these exception filter functions until it finds one that handles the exception anyway.
If Windows finds one that handles the exception, catching it, it will continue to unwind the stack back to this handler, which is to call all functions again, only passing another flag. At this point, the functions execute the finally logic, right down to the handler that runs the except logic.
However, excluding page protection on the stack, the process is different. None of the language exception handlers will decide to handle this exception, because otherwise the stack growth mechanism will break. Instead, the filter filter filters all the way to the base exception handler provided by the OS, which increases the allocation of the stack by assigning the appropriate memory, and then returns the appropriate return code to indicate that the OS should continue where it was stopped, and not spin the stack .
The tool and debugging infrastructure is designed to ensure that these specific exceptions are reproduced correctly, so you don't need to worry about handling them.
You can learn more about SEH at Matt Pietrek, an excellent article on MSJ over a decade ago .