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