Я не уверен, существует ли хотя бы конечный набор исключений (независимо от версий CLR, но в целом).
По крайней мере нативный код (или сам CLR) может вызвать любое исключение, обозначаяэто как состояние повреждения, если вы посмотрите на эту функцию CLR.
// Signature simplified for purposes of that answer, check link above for actual signature.
void RealCOMPlusThrow(OBJECTREF throwable, CorruptionSeverity severity = NotCorrupting);
Эта функция (то есть макрос COMPlusThrow
, который ее оборачивает) вызывается в нескольких местах (Core) CLR.
Функция IsProcessCorruptedStateException
, кажется, в конечном счете используется для определения, считается ли исключение повреждением состояния.Эта функция имеет две «перегрузки».
Один довольно полезен, потому что в нем перечислены следующие коды исключений:
STATUS_ACCESS_VIOLATION
STATUS_STACK_OVERFLOW
EXCEPTION_ILLEGAL_INSTRUCTION
EXCEPTION_IN_PAGE_ERROR
EXCEPTION_INVALID_DISPOSITION
EXCEPTION_NONCONTINUABLE_EXCEPTION
EXCEPTION_PRIV_INSTRUCTION
STATUS_UNWIND_CONSOLIDATE
По крайней мере, они в частичном порядке сопоставляются с .NETобъекты исключений.
Однако, другой"просто" проверяет , был ли отмечен объект исключения (собственный, не управляемый), приводящий к повреждению состояния.
Теперь я очень далек от того, чтобы быть экспертом по коду CLR, поэтому YMMV.
Можно, конечно, потратить часы на код CLR, чтобы выяснить, как работает обработка поврежденных состояний и какие последствияэто для обработки тех, кто в C # коде.Но в зависимости от того, что вы действительно пытаетесь достичь по вашему вопросу, это может привести к серьезному бритью.; -)