- •ПРЕРЫВАНИЯ
- •ПРЕРЫВАНИЕ
- •МЕХАНИЗМ ОБРАБОТКИ ПРЕРЫВАНИЙ:
- •ФУНКЦИИ МЕХАНИЗМА ПРЕРЫВАНИЯ:
- •РЕАКЦИЯ НА ПОЯВЛЕНИЕ СИГНАЛА ЗАПРОСА ПРЕРЫВАНИЯ
- •РЕАКЦИЯ НА ПОЯВЛЕНИЕ СИГНАЛА ЗАПРОСА ПРЕРЫВАНИЯ
- •ВРЕМЯ РЕАКЦИИ
- •КЛАССЫ ПРЕРЫВАНИЙ
- •КЛАССЫ ПРЕРЫВАНИЙ
- •ВНЕШНИЕ
- •ТИПЫ ВНЕШНИХ ПРЕРЫВАНИЙ
- •ВНЕШНИЕ
- •АППАРАТНЫЕ (ВНЕШНИЕ) ПРЕРЫВАНИЯ
- •АППАРАТНЫЕ (ВНЕШНИЕ) ПРЕРЫВАНИЯ
- •ПРОГРАММНЫЕ (ВНУТРЕННИЕ) ПРЕРЫВАНИЯ
- •ИСКЛЮЧЕНИЯ (ВНУТРЕННИЕ ПРЕРЫВАНИЯ)
- •АППАРАТНЫЕ И ПРОГРАММНЫЕ СРЕДСТВА СИСТЕМЫ ПРЕРЫВАНИЙ
- •ПРОГРАММНЫЕ СРЕДСТВА СИСТЕМЫ ПРЕРЫВАНИЙ
- •ТАБЛИЦА ВЕКТОРОВ
- •ТАБЛИЦА ВЕКТОРОВ
- •ОБРАБОТКА ПРЕРЫВАНИЙ В ОДНОЗАДАЧНОМ РЕЖИМЕ
- •РАБОТА СИСТЕМЫ ПРЕРЫВАНИЙ В МНОГОЗАДАЧНОМ РЕЖИМЕ
- •КЛАССИФИКАЦИЯ ПРЕРЫВАНИЙ В МНОГОЗАДАЧНОМ (ЗАЩИЩЕННОМ) РЕЖИМЕ
- •СБОЙ (ОШИБКА)
- •АВАРИЙНОЕ
- •ЛОВУШКА (HOOK)
- •ЛОВУШКИ (HOOK)
- •ФУНКЦИЯ ЛОВУШКИ
- •ФУНКЦИЯ ЛОВУШКИ
- •ФУНКЦИЯ ЛОВУШКИ
- •ФУНКЦИЯ ЛОВУШКИ
- •ФУНКЦИЯ ЛОВУШКИ
- •ХУКИ WH_CALLWNDPROC И WH_CALLWNDPROCRET
- •ПАРАМЕТР NCODE МОЖЕТ ПРИНИМАТЬ СЛЕДУЮЩИЕ ЗНАЧЕНИЯ:
- •ХУК WH_DEBUG
- •ХУК WH_FOREGROUNDIDLE
- •ХУК WH_GETMESSAGE
- •ХУК WH_JOURNALPLAYBACK
- •ХУК WH_JOURNALRECORD
- •ХУК WH_KEYBOARD
- •ХУК WH_MOUSE
- •ХУКИ WH_MSGFILTER И WH_SYSMSGFILTER
- •ХУК WH_SHELL
ОБРАБОТКА ПРЕРЫВАНИЙ В ОДНОЗАДАЧНОМ РЕЖИМЕ
производится в три этапа:
1.Прекращение выполнения текущей программы; Сохранение содержимого регистров.
2.Переход к выполнению и выполнение программы обработки прерывания; Здесь определяется источник прерывания и вызывается соответствующий обработчик прерывания. Допускается 256 источников - по кол-ву элементов таблицы векторов прерываний.
3.Возврат управления прерванной программе.
РАБОТА СИСТЕМЫ ПРЕРЫВАНИЙ В МНОГОЗАДАЧНОМ РЕЖИМЕ
Отличия от обработки в однозадачном режиме:
1.Немного изменено распределение номеров векторов прерываний.
2.Принципиально иным является механизм обработки прерываний.
КЛАССИФИКАЦИЯ ПРЕРЫВАНИЙ В МНОГОЗАДАЧНОМ (ЗАЩИЩЕННОМ) РЕЖИМЕ
Прерывания и исключения можно разделить на несколько групп:
•сбой;
•ловушка;
•аварийное завершение.
Микропроцессор жестко определяет, какие прерывания являются ошибками, ловушками и авариями.
Это деление производится в соответствии со следующими признаками:
•какая информация сохраняется о месте возникновения прерывания (исключения)?
•возможно ли возобновление прерванной программы?
Соответствующие программы-обработчики ошибок, ловушек и аварий будут отличаться алгоритмами работы.
СБОЙ (ОШИБКА)
— прерывание или исключение, при возникновении которого в стек (в память) записываются значения регистров, указывающие на команду, вызвавшую данное прерывание.
Это позволяет, получив доступ к сегменту кода, исправить ошибочную команду в обработчике прерывания и, вернув управление программе, фактически осуществить ее рестарт.
АВАРИЙНОЕ
ЗАВЕРШЕНИЕ
— прерывание, при котором информация о месте его возникновения недоступна или неполна и поэтому рестарт практически невозможен, если только данная ситуация не была запланирована заранее.
ЛОВУШКА (HOOK)
— прерывание или исключение, при возникновении которого в стек записываются значения регистров, указывающие на команду, следующую за командой, вызвавшей данное прерывание. Т
Так же, как и в случае ошибок возможен рестарт программы.
ЛОВУШКИ (HOOK)
ОС Windows содержит много различных типов хуков; они обеспечивают доступ к различным аспектам механизма, обрабатывающего сообщения. Например, хук WH_MOUSE позволяет контролировать передачу сообщений от мыши.Windows позволяет строить цепочки из однотипных хуков.
Цепочка хуков (hook chain) - это список указателей на определенные приложением функции обратного вызова, которые вызывают функции хука (hook procedures). Когда появляется сообщение, связанное с типом установленного хука, Windows передает это сообщение по очереди каждой функции хука, упомянутой в цепочке.
Действие, которое может совершить функция хука, зависит от типа данного хука. Функции для некоторых типов хуков могут только просматривать сообщения; другие функции могут изменять сообщения или останавливать их продвижение по цепочке, не позволяя им достигнуть следующей функции хука или окна- адресата.
ФУНКЦИЯ ЛОВУШКИ
Для того, чтобы использовать определенный тип хука, программист создает функцию хука.
Затем с помощью функции SetWindowsHookEx() устанавливает созданную функцию хука в цепочку, связанную с данным хуком.
ФУНКЦИЯ ЛОВУШКИ
Функция хука должна иметь следующий синтаксис:
LRESULT CALLBACK HookProc(int nCode,WPARAM wParam,LPARAM lParam)
Вместо HookProc следует подставить имя функции хука, определенное приложением.
Параметр nCode - код хука. Функция хука использует его, чтобы определить действие, которое необходимо исполнить. Значение кода хука зависит от типа хука; каждый тип имеет свой набор кодов хука.
Значения параметров wParam и lParam зависят от кода хука, но обычно они содержат информацию об отправленном сообщении.
ФУНКЦИЯ ЛОВУШКИ
Функция SetWindowsHookEx() всегда устанавливает функцию хука в начало цепочки хуков. Когда происходит событие, которое отслеживается данным типом хука, Windows вызывает функцию, которая находится в начале цепочки, связанной с этим хуком.
Каждая функция хука в цепочке решает, передавать ли событие следующей функции. Функция хука может передать событие следующей функции, используя функцию CallNextHookEx().