Я в настоящее время изучает особенности надежности и обработки исключений C#/.NETНадежность испорченного состояния обработки исключений
Это особенно HandleProcessCorruptedStateExceptions
атрибутов и CER s с PrepareConstrainedRegions
.
Теперь я читал ссылки исходного кода SecureString
класса, так как это место, где высоко безопасность важно сохранить данные зашифрованы даже в исключительных ситуациях, и нашел места подобных, как это:
[HandleProcessCorruptedStateExceptions]
//...
RuntimeHelpers.PrepareConstrainedRegions();
try
{
Unprotect();
// ...
}
catch(Exception)
{
Protect();
throw;
}
finally
{
Protect();
// ...
}
В чем причина блока catch
? Не является ли блок finally
достаточным для защиты данных?
Или могут ли эти поврежденные исключения состояния влиять только на catch
и прекратить применение после этого?
Без блока 'finally', если исключение не выбрано,' Protect() 'никогда не вызывается. (Если это не вызвано в конце блока 'try', но вы опустили строку.) – millimoose
Правильно, но как насчет без' catch', в чем вопрос. –
В случае исключения, я полагаю, что 'Protect' на самом деле называется дважды (catch и, наконец) - интересно, если это имеет какое-то значение. – Blorgbeard