
- •Операционные системы и их интерфейсы.
- •Графические ос
- •Речевые ос
- •Динамически подключаемые библиотеки.
- •Потоки и процессы.
- •Локальная память потока
- •Потоки в Windows.
- •Сервисы в Windows
- •7. Процессы в виндовс
- •8.Работа с сервисами виндовс
- •Синхронизация.
- •Система информационной безопасности
- •Синхронизация потоков в Windows
- •Управление безопасностью в Windows
- •3. Управляемый доступ к сети
- •13. Взаимоисключающий доступ к переменным
- •Управление пользователями
- •Управление группами
- •Структура консольного приложения
- •Работа с идентификаторами безопасности
- •19, Работа с консолью
- •20. Работа с дескрипторами безопасности
- •21. Работа с окном консоли
- •Часть III. Программирование консольных приложений
- •22. Работа со списками управления доступом на высоком уровне
- •23. Работа с буфером экрана
- •24. Работа с привилегиями
- •Ввод-вывод на консоль
- •Работа с маркерами доступа
- •Первичный маркер доступа
- •Имперсонализирующие маркер доступа
- •Передача данных
- •Работа со списками управления доступом на низком уровне
- •Работа с анонимными каналами в Windows
- •Управление безопасностью объектов на низком уровне
- •Глава 45. Управление безопасностью объектов на низком уровне 993
- •31) Работа с именованными каналами в Windows
- •32) Win32 и Win64. Программирование в среде Win64.
- •33) Работа с почтовыми ящиками в Windows
- •34) Использование файловой системы и функций символьного ввода/вывода Windows
- •35) Фреймовая обработка исключений
- •36) Усовершенствованные средства для работы с файлами и каталогами и знакомство с реестром
- •37. Финальная обработка исключений
- •38. Обработка исключений
- •39. Виртуальная память
- •40 . Управление памятью, отображение файлов и библиотеки dll
- •41. Работа с виртуальной памятью в windows
- •42.Управление процессами
- •43. Работа с кучей в Windows
- •44. Потоки и планирование выполнения
- •45. Общие концепции управления файлами
- •46. Синхронизация потоков
- •47. Работа с файлами в Windows
- •48. Влияние синхронизации на производительность и рекомендации по ее повышению
- •49) Работа с каталогами (папками) в Windows
- •50) Усовершенствованные методы синхронизации потоков
- •51) Асинхронный вызов процедур
- •52) Взаимодействие между процессами
- •53) Асинхронный доступ к данным.
- •54) Сетевое программирование с помощью сокетов Windows
- •55)Порты завершения
- •57)Работа с ожидающим таймером
- •58)Асинхронный ввод/вывод и порты завершения
- •Порты завершения ввода-вывода
- •59)Отображение файлов в память.
- •Достоинства метода. Альтернативой отображению может служить прямое чтение файла или запись в файл. Такой способ работы менее удобен по следующим причинам:
- •60)Безопасность объектов Windows
- •Операционные системы и их интерфейсы.
37. Финальная обработка исключений
В операционных системах Windows существует еще один способ обработки исключений, суть которого заключается в следующем. Код, при исполнении которого возможен выброс исключения, как и в случае с фреймовой обработкой исключений, заключается в блок try. Но только теперь за блоком try следует код, который заключается в блок finally. Система гарантирует, что при любой передаче управления из блока try, независимо от того, произошло или нет исключение внутри этого блока, предварительно управление будет передано блоку finally. Такой способ обработки исключений называется финальная обработка исключений. Структурно финальная обработка исключений выглядит следующим образом:
_try
{ // охраняемый код
}
finally
{ // финальный код
}
Финальная обработка исключений используется для того, чтобы при любом исходе исполнения блока try освободить ресурсы, которые были захвачены внутри этого блока. Такими ресурсами могут быть память, файлы, критические секции и т. д.
Блок finally выполняется при любом исходе выполнения блока try. Недостатком такой работы блока finally является то, что инструкция delete будет выполняться в любом случае, независимо от того, произошло исключение в блоке try или нет. Чтобы избежать такой ситуации, нужно проверить, как завершился блок try — нормально или нет.
Управление из блока try может быть передано одним из следующих способов:
нормальное завершение блока;
выход из блока при помощи управляющей инструкции leave;
выход из блока при помощи одной из управляющих инструкций return, break, continue или goto языка программирования C++;
передача управления обработчику исключения.
В первых двух случаях считается, что блок try завершился нормально, а в последних двух случаях — ненормально. Для того чтобы определить, как завершился блок try, используется
функция AbnormaiTermination, которая имеет следующий прототип:
BOOL AbnormaiTermination (VOID) ;
В случае если блок try завершился ненормально, эта функция возвращает ненулевое значение, а в противном случае — значение false.
Используя функцию AbnormaiTermination, ресурсы, захваченные в блоке try, можно освобождать только в том случае, если блок try завершился ненормально.
38. Обработка исключений
Исключения и их обработчики
Исключением называется событие, которое произошло во время выполнения программы, в результате совершения которого дальнейшее нормальное выполнение программы становится невозможным. Как правило, такие события являются ошибками в программе. Поэтому для дальнейшей работы приложения требуется или восстановление программы в рабочее состояние, или ее аварийное завершение с освобождением всех захваченных программой
ресурсов.
В операционных системах Windows для этой цели предназначен механизм
структурной обработки исключений (structured exception handling, SEH). Смысл механизма структурной обработки исключений заключается в следующем. В программе выделяется блок программного кода, в котором может произойти исключение. Такой блок кода называется фреймом, а сам код называется охраняемым кодом. Затем, после фрейма вставляется программный блок, который обрабатывает происшедшее исключение. Этот блок называется
обработчиком исключения. После обработки исключения управление передается первой инструкции, следующей за обработчиком исключения. Очевидно, что для того чтобы использовать этот механизм в программе, в язык программирования C++ нужно ввести новые ключевые слова. Такими ключевыми словами являются try и except, которые расширяют
список стандартных ключевых слов языка программирования C++ и различаются только компилятором фирмы Microsoft. Ключевое слово try отмечает фрейм, а ключевое слово except отмечает обработчик исключения. В результате фрагмент программы, который использует механизм структурной обработки исключений, выглядит следующим образом:
_try
{
// охраняемый код
}
except (выражение-филь тр)
{
// код обработки исключения
}
Здесь выражение-фильтр является выражением языка программирования
C++ и указывает на то, как должна выполняться программа после
обработки исключения. Вычисление этого выражения выполняется сразу после
возникновения исключения и должно давать в результате одно из следующих
значений:
□ exception_execute_handler — управление передается обработчику
исключений;
□ exception_continue_search — система продолжает поиск обработчика
исключения;
□ exception_continue_execution — система передает управление в точку
прерывания программы.
Сделаем два важных замечания относительно механизма структурной обработки исключений. Во-первых, не допускается использование оператора goto для передачи управления внутрь фрейма или обработчика исключения. Во-вторых, в выражении фильтра допускается использование функций GetExceptionCode И GetExceptionlnformation, которые предоставляют Информацию о происшедшем исключении. Отметим также, что переменные, объявленные внутри фрейма или блока обработки исключения, являются локальными и видны только внутри соответствующего блока, как это и принято в языке программирования C++.