Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Слайд_ОС_ПМ / OS-Lection-7.ppt
Скачиваний:
35
Добавлен:
05.06.2014
Размер:
863.23 Кб
Скачать

ЛЕКЦІЯ 7

Розробка пасток в ОС Windows

Операційні системи доц. Сінельнікова Т.Ф.

ПАСТКИ В ОС WINDOWS

Пастка (hook) - це механізм, який дозволяє проводити моніторинг повідомлень системи і обробляти їх до того, як вони досягнуть цільової віконної процедури. Пастка може отримувати до себе всі повідомлення, які виникають в системі, обробляти їх і передавати далі в ту програму, якою ці повідомлення адресовані.

2

Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.ua

ПАСТКИ В ОС WINDOWS

Пастки можуть використовуватися додатками в наступних цілях:

Обробляти або змінювати всі повідомлення, призначені для всіх діалогових вікон (dialog box), інформаційних вікон (message box), смуг прокрутки (scroll bar), або меню однієї програми (WH_MSGFILTER).

Обробляти або змінювати всі повідомлення, призначені для всіх діалогових вікон, інформаційних вікон, смуг прокрутки, або меню всієї системи (WH_SYSMSGFILTER).

Обробляти або змінювати всі повідомлення в системі (всі види повідомлень), одержувані функціями GetMessage або PeekMessage (WH_GETMESSAGE).

Обробляти або змінювати всі повідомлення (будь-якого типу), що посилаються викликом функції SendMessage (WH_CALLWNDPROC).

3

Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.ua

ПАСТКИ В ОС WINDOWS

Записувати або програвати подіїї клавіатури та миші (WH_JOURNALRECORD, WH_JOURNALPLAYBACK).

Обробляти, змінювати або видаляти події клавіатури(WH_KEYBOARD).

Обробляти, змінювати або скасовувати події миші (WH_MOUSE).

Реагувати на певні дії системи, роблячи можливим розробку додатків комп'ютерного навчання - computer-based training (WH_CBT).

Запобігти виклику іншої функції-фільтра (WH_DEBUG).

4

Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.ua

ТИПИ ПАСТОК В ОС WINDOWS

Тип пастки

 

 

 

Опис

 

 

Область видимості

WH_CALLWNDPROC

Цей

тип

пасток

викликається

при кожному

Потік або вся

 

виклику

функції

SendMessage. Фільтруючій

система

 

функції передається код пастки, що показує, чи

 

 

була проведена посилка повідомлення з

 

 

поточного потоку, а також покажчик на структуру з

 

 

інформацією про повідомлення. Фільтри можуть

 

 

тільки обробити повідомлення, не змінюючи його.

 

WH_CBT

Використовується

при

розробці

додатків

для

Потік або вся

 

інтерактивного навчання в тих випадках, коли

система

 

необхідно координувати його роботу з роботою

 

 

програми, для якого розробляється навчальна

 

 

система. Windows передає фільтруючій функції

 

 

код пастки, що показує, яка сталася подія, і

 

 

відповідні цій події дані. Існує 10 різних кодів, які

 

 

може

отримувати

пастка

даного

типу:

 

 

HCBT_ACTIVATE,

 

HCBT_CREATEWND,

 

 

HCBT_DESTROYWND,

HCBT_MINMAX,

 

 

HCBT_MOVESIZE,

 

HCBT_SYSCOMMAND,

 

 

HCBT_CLICKSKIPPED,

HCBT_KEYSKIPPED,

 

HCBT_SETFOCUS, HCBT_QS

5

Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.ua

ТИПИ ПАСТОК В ОС WINDOWS

Тип пастки

Опис

WH_DEBUG

Цей тип пасток викликається Windows перед

 

викликом фільтруючих функцій. Фільтри не можуть

 

змінювати значення, передані цій пастці, але можуть

 

запобігти виклику фільтруючої функції, повернувши

 

ненульове значення. У параметрі wParam

 

передається ідентифікатор викликаємої пастки, а

 

параметр lParam містить покажчик на структуру

 

DEBUGHOOKINFO.

Область

видимості

Потік або вся система

WH_GETMESSAGE Цей тип пастки викликається Windows перед виходом з функцій GetMessage і PeekMessage. Фільтруючі

функції отримують покажчик на структуру з повідомленням, яке потім разом з усіма можливими змінами надсилається додатком, який викликав функції GetMessage або PeekMessage. У параметрі lParam знаходиться покажчик на структуру MSG (повідомлення).

Потік або вся система

6

Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.ua

ТИПИ ПАСТОК В ОС WINDOWS

Тип пастки

WH_JOURNALRECORD

 

 

Опис

 

Область

 

 

 

 

 

видимості

Фільтри

пастки

цього

типу

Тільки

викликаються для всіх подій миші і

система

клавіатури, крім тих, які програються

 

реєстраційної

 

пасткою

при

 

відтворенні.

Фільтруючі

функції

 

можуть

обробити

повідомлення -

 

записати подію в пам'яті або на

 

диску, але не можуть змінювати або

 

скасовувати його. Фільтруючі функції

 

цих пасток можуть реалізовуватися у

 

динамічній бібліотеці або в. EXE-

 

файлі. Для пасток даного типу в

 

Windows

 

реалізований

код

 

HC_ACTION.

 

 

 

 

7

Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.ua

ТИПИ ПАСТОК В ОС WINDOWS

Тип пастки

WH_JOURNALPLAY BACK

 

Опис

 

 

Область

 

 

 

 

видимості

Пастки цього типу використовуються для посилки

Тільки

повідомлень клавіатури і миші таким чином,

система

начебто вони проходять через системну чергу

 

Windows. Основне призначення пасток цього типу

 

це програвання подій, записаних за допомогою

 

пасток типу WH_JOURNALRECORD. Також пастки

 

цього типу можна використовувати для посилки

 

повідомлень іншим додаткам. Windows ігнорує рух

 

миші до тих пір, поки в системі встановлена пастка

 

цього типу. Всі інші події від клавіатури і миші

 

зберігаються до тих пір, поки не залишиться

 

фільтруючих

функцій

для

пастки

 

WH_JOURNALPLAYBACK. Фільтруючі функції цих пасток можуть реалізовуватися у динамічній бібліотеці або в. EXE-файлі і ці функції повинні використовувати коди HC_GETNEXT і HC_SKIP.

8

Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.ua

ТИПИ ПАСТОК В ОС WINDOWS

Тип пастки

WH_FOREGROU

NDIDLE

Опис

Цей тип пастки викликається Windows в тому випадку, коли до поточного потоку не надходить інформація, введена користувачем для обробки. Дана пастка має повідомний характер і параметри wParam і lParam рівні 0.

Область

видимості

Потік або вся система

WH_SHELL

Цей тип пасток використовується при діях з вікнами, що не мають власника. Коли пастка встановлена локально, то вона викликається тільки для вікон, що належать потоку, який її встановив. Цей тип пасток є інформаційним, і тому фільтруючі функції не можуть змінювати або скасовувати подію. У параметрі wParam передається покажчик вікна, а параметр lParam не використовується. Для пасток даного типу визначені коди: SHELL_WINDOWCREATED, HSHELL_WINDOWDESTROYED, HSHELL_ACTIVATESHELLWINDOW.

Потік або вся система

9

Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.ua

ТИПИ ПАСТОК В ОС WINDOWS

Тип пастки

Опис

 

 

WH_KEYBOARD Пастки даного

типу викликаються, коли

функції

GetMessage або PeekMessage збираються повернути

повідомлення

WM_KEYUP,

WM_KEYDOWN,

WM_SYSKEYUP,

WM_SYSKEYDOWN,

або

WM_CHAR. Якщо пастка цього типу встановлена як локальна, то ці повідомлення мають надходити з вхідної черги потоку, до якого вона прикріплена. В фільтруючу функцію надходить віртуальний код клавіші, і стан клавіатури на момент виклику пастки. В фільтруючій функції допускається скасування повідомлень. Для пасток даного типу визначені коди: HC_ACTION і HC_NOREMOVE. Перший код використовується при видаленні події від клавіатури з системної черги, а другий коли повідомлення не видаляється з черги, через виклик функції PeekMessage з параметром PM_NOREMOVE. При виклику пастки з цим кодом може не передаватися дійсний стан клавіатури і це необхідно передбачати в додатку.

Область видимості

Потік або вся система

10

Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.ua

Соседние файлы в папке Слайд_ОС_ПМ