¿Por qué SetUnhandledExceptionFilter no puede capturar alguna excepción pero AddVectoredExceptionHandler puede hacer

He experimentado un problema que la función que pasé a laSetUnhandledExceptionFilter no fue llamado cuando el código de excepción c0000374 está aumentando. Pero funciona bien con el código de excepción c0000005. Entonces intenté usar elAddVectoredExceptionHandler en su lugar, y no tenía el problema, la función del controlador se llama correctamente.

¿Es el error de API? ¿Puedo usar AddVectoredExceptionHandler en lugar de SetUnhandledExceptionFilter en todas partes?

Las dos funciones funcionan correctamente con

// Exception code c0000005
int* p1 = NULL;
*p1 = 99;

Solo AddVectoredExceptionHandler puede capturar esta excepción. (Para demostrar que no depende de la biblioteca de tiempo de ejecución, levanto la excepción manualmente y el resultado es el mismo).

// Exception code c0000374
RaiseException(0xc0000374, 0, 0, NULL);

Programa de prueba.

#include <tchar.h>
#include <fstream>
#include <Windows.h>

LONG WINAPI VectoredExceptionHandler(PEXCEPTION_POINTERS pExceptionInfo)
{
    std::ofstream f;
    f.open("VectoredExceptionHandler.txt", std::ios::out | std::ios::trunc);
    f << std::hex << pExceptionInfo->ExceptionRecord->ExceptionCode << std::endl;
    f.close();

    return EXCEPTION_CONTINUE_SEARCH;
}

LONG WINAPI TopLevelExceptionHandler(PEXCEPTION_POINTERS pExceptionInfo)
{
    std::ofstream f;
    f.open("TopLevelExceptionHandler.txt", std::ios::out | std::ios::trunc);
    f << std::hex << pExceptionInfo->ExceptionRecord->ExceptionCode << std::endl;
    f.close();

    return EXCEPTION_CONTINUE_SEARCH;
}


int _tmain(int argc, _TCHAR* argv[])
{
    AddVectoredExceptionHandler(1, VectoredExceptionHandler);
    SetUnhandledExceptionFilter(TopLevelExceptionHandler);

    // Exception code c0000374
    RaiseException(0xc0000374, 0, 0, NULL);     

    // Exception code c0000005
    // int* p1 = NULL;
    // *p1 = 99;        


    return 0;
}