Особенности аппаратных сообщение клавиатуры

Обновлено: 02.07.2024

Клавиатура – клавишное устройство управления персональным компьютером. Служит для ввода алфавитно-цифровых (знаковых) данных, а также команд управления. Комбинация монитора и клавиатуры обеспечивает простейший интерфейс пользователя. С помощью клавиатуры управляют компьютерной системой, а с помощью монитора получают от нее отклик.

Существует три основных типа механизма клавиш: мембранный, полумеханический и механический. Мембранные клавиатуры обычно дешевле механических в несколько раз.

Мембранные клавиатуры

Так как мембраны находятся на внутренних сторонах пленок, то конструкция хорошо защищена, например, от пролитого кофе.

В более защищенной реализации все выглядит как единый резиновый коврик с выступающими куполами, расположенными под клавишами.

Плюсами мембранного типа клавиш являются защищенность, низкий шумицена.

Минус данного типа — недолговечность.

Полумеханические клавиатуры

В этих клавиатурах используются более долговечные и не протирающиеся металлические контакты. Все это размещается на печатной плате. Клавиша возвращается резиновым куполом.

Механические клавиатуры

В механических клавиатурах клавиша возвращается пружиной.

Минусы такого механизма: отсутствие герметичности, стоимость.

Плюсом является долговечность и надежность, особенно когда контакты позолочены.

Долговечность (число нажатий, при котором обеспечивается надежный контакт):

для мембранных клавиатур: 10—30 млн;

для механических (полумеханических): 50 млн и даже 100 млн для позолоченных контактов.

Для обычного пользователя 20 млн при обычной работе хватит на 10 лет и более. За это время сменится минимум 2 поколения клавиатур.

Принцип действия.

Основные функции клавиатуры не нуждаются в поддержке драйверов.

Необходимое программное обеспечение для начала работы с компьютером уже имеется в микросхеме ПЗУ (Постоянное Запоминающие Устройство) в составе базовой системы ввода-вывода (BIOS), и потому компьютер реагирует на нажатия клавиш сразу после включения.

Контролер процессора сканирует переключатели клавиш и при нажатии на любую клавишу, передается уникальный скан-код размером один байт. Когда скан-код попадает в процессор инициализируется аппаратное прерывание. Скан-код анализируется процессором и преобразуется в код символа. Далее полученный код символа помещается в небольшую область памяти, известную как буфер клавиатуры. Введенный символ хранится в буфере клавиатуры до тех пор, пока его не заберет оттуда та программа, для которой он и предназначался, например текстовый редактор или текстовый процессор. Если символы поступают в буфер чаще, чем забираются оттуда, наступает эффект переполнения буфера. В этом случае ввод новых символов на некоторое время прекращается. На практике в этот момент при нажатии на клавишу мы слышим предупреждающий звуковой сигнал и не наблюдаем ввода данных.

Каждой клавише присвоен уникальный цифровой код и существуют специальные таблицы кодировки клавиатуры, как правило, они записана в специальную микросхему – знакогенератор процессора. Для смены кодировки клавиатуры применяются специальные программы – клавиатурные драйверы. Современные клавиатуры способны не только передавать данные в процессор, но и воспринимать команды от него.

Состав клавиатуры.

Функциональные клавиши Дополнительная панель


Алфавитно-цифровые клавиши Клавиши управления курсором

АЛФАВИТНО - ЦИФРОВЫХ КЛАВИШИ

Предназначены для ввода знаковой информации и команд, набираемых по буквам. Каждая клавиша может работать в нескольких режимах (регистрах) и, соответственно, может использоваться для ввода нескольких символов.

ФУНКЦИОНАЛЬНЫЕ КЛАВИШИ (F1- F12)

Функции, закрепленные за данными клавишами, зависят от свойств конкретной работающей в данный момент программы, а в некоторых случаях и от свойств операционной системы. F1 вызывает справочную систему, в которой можно найти справку о действии прочих клавиш.

СЛУЖЕБНЫЕ КЛАВИШИ

SHIFT; ENTER; ALT; CTRL; TAB; ESC; BACKSPACE;

PRINT SCREEN – печать текущего состояния экрана на принтере (для MS-DOS) или сохранение его в специальной области оперативной памяти, называемой буфером обмена (для Windows).

SCROLL LOCK – переключение режима работы в некоторых (как правило, устаревших) программах.

PAUSE/BREAK – приостановка/прерывание текущего процесса.

УПРАВЛЕНИЕ КУРСОРОМ

Курсор - экранный элемент, указывающий место ввода знаковой информации, используется при работе с программами, выполняющими ввод данных и команд с клавиатуры. Клавиши управления курсором позволяют управлять позицией ввода.

UP / DOWN / LEFT / RIGHT

HOME и END переводят курсор в начало или конец текущей строки, соответственно. Их действие также модифицируется регистровыми клавишами.

INSERT переключает режим ввода данных (переключение между режимами вставки и замены). Если текстовый курсор находится внутри существующего текста, то в режиме вставки происходит ввод новых знаков без замены существующих символов (текст как бы раздвигается). В режиме замены новые знаки заменяют текст, имевшийся ранее в позиции ввода.

DELETEпредназначена для удаления знаков, находящихся справа от текущего положения курсора. При этом положение позиции ввода остается неизменным.

ДОПОЛНИТЕЛЬНАЯ ПАНЕЛЬ

дублирует действие цифровых и некоторых знаковых клавиш основной панели.

Настройка клавиатуры.

Клавиатуры персональных компьютеров обладают свойством повтора знаков, которое используется для автоматизации процесса ввода. Оно состоит в том, что при длительном удержании клавиши начинается автоматический ввод связанного с ней кода.

case WM_SYSKEYDOWN; case WM_SYSKEYUP; case WM_SYSCHAR;

Переменная lParam

Extended Key Flag

Previos Key State

Скан-код OEM является кодом клавиатуры, генерируемым аппаратурой компьютера. (Если вы хорошо знакомы с программированием на языке ассемблера, то скан-код — это код, передаваемый программе в регистре AH при вызове прерывания 16H BIOS.) Приложения Windows обычно игнорируют скан-код OEM, поскольку имеют более совершенные способы расшифровки информации от клавиатуры.

Флаг расширенной клавиатуры

Флаг предыдущего состояния клавиши

Флаг состояния клавиши

Виртуальные коды клавиш

Основные характеристики клавиатуры

Комфортная работа за компьютером напрямую зависит от удобной и практичной клавиатуры. Для выбора подходящего устройства ввода, нужно иметь представление об основных характеристиках клавиатуры, таких как: тип устройства, особенность конструкции, интерфейс подключения, число основных и вспомогательных клавиш.

Тип клавиатуры

По типу, устройства ввода подразделяются на: мембранные, механические и полумеханические.

Мембранная клавиатура
Мембранная клавиатура

Принцип работы мембранной клавиатуры заключается в следующем: при нажатии клавиши происходит замыкание контактной группы — расположенной на пластиковой основе, а возврат кнопки, в исходное положение, осуществляется резиновым куполом. Клавиатуры мембранного типа широко распространены и имеют низкий уровень шума, и рассчитаны, в среднем, на 20 млн. нажатий.

Механическая клавиатура
Механическая клавиатура

Клавиши механической клавиатуры функционируют аналогично мембранной, за одним исключением – возврат в исходное положение осуществляется за счет пружин. Такие клавиатуры надежны и долговечны — рассчитаны на 50 — 100 млн. нажатий. Недостатком же является наличие шума, при активном использовании клавиатуры, и отсутствие герметичности.

Полумеханическая клавиатура

Конструкция клавиатуры

Исходя из конструктивного типа, клавиатуры делят на: классические, эргономические, раздельные и ромбические.

Классическая клавиатура

Классическая

Конструктивная особенность классической клавиатуры: клавиши имеют прямоугольную форму, расположены горизонтальными рядами параллельно друг другу. Плюс такой клавиатуры в том, что она занимает мало места на рабочем столе, минусом же является то, что руки при работе располагаются под неестественным углом.

Эргономическая клавиатура

Эргономическая

В эргономической клавиатуре, основной блок клавиш разделен на две части, которые располагаются под углом 120 градусов друг относительно друга, профиль алфавитной части имеет форму выпуклой дуги. Плюс — нет необходимости держать руки параллельно плоскости стола. Минус — занимает больше места.

Раздельная клавиатура

Раздельная

Раздельная клавиатура состоит из двух независимых блоков, которые можно расположить под любым удобным углом. Плюс – можно выбрать удобную позицию для кистей рук. Минус — такая клавиатура может располагаться только на ровной поверхности.

Ромбическая клавиатура
Ромбическая

Клавиши имеют форму ромба и расположены под углом к вертикали. Плюс — комфорт при длительной работе.

Количество клавиш клавиатуры

Системные клавиши клавиатуры

Дополнительные клавиши

Дополнительные клавиши используются для управления мультимедиа программами, для навигации в интернет-браузерах, запуска приложений и так далее. Наличие дополнительных клавиш делает работу более комфортной, так как позволяет уменьшить количество переходов с клавиатуры на мышь и обратно. Однако, чем больше дополнительных клавиш имеет клавиатура, тем внушительнее ее размеры и, как правило, выше стоимость.

Дополнительные клавиши клавиатуры

Интерфейс подключения

PS/2. Используется в системных платах с питанием ATX. Минус такого интерфейса заключается в том, что после подключения оборудования требуется перезагрузка компьютера.

USB. Интерфейс поддерживается всеми современными материнскими платами. Плюс такого способа в возможности подключения к работающему компьютеру.

Беспроводной. Используется специальный адаптер, встроенный или подключенный через USB-порт. Плюс — отсутствие соединительных кабелей. Минус — частая замена элементов питания.

  • Для учеников 1-11 классов и дошкольников
  • Бесплатные сертификаты учителям и участникам

Клавиатура: периферийное устройство ввода информации

Виды клавиатур:

Простые клавиатуры со стандартным набором клавиш (буквенные, цифровые, функциональные и т.д.)

В мультимедийных клавиатурах кроме стандартных клавиш добавлены мультимедийные. Такие клавиатуры упрощают работу с мультимедиа

Игровые клавиатуры рассчитаны для применения в играх.

Так же при выборе клавиатуры можно обратить внимание на ее технические параметры. Среди таких параметров механизм клавиш клавиатуры.

Есть три основных типа: мембранный, механический и полумеханический.

В 1980-х годах мембранные клавиатуры использовались в некоторых домашних компьютерах нижнего ценового диапазона. В настоящее время они продолжают использоваться в бытовой технике (например в микроволновых печах), специализированном и промышленном оборудовании. Современные компьютерные клавиатуры используют комбинированную технологию мембранной, резиновой и механической клавиатур, где нажатие на пластиковую клавишу продавливает резиновый колпачок, обеспечивая тактильную обратную связь, и нажимает на мембрану. Принцип работы.

Мембранная клавиатура обычно состоит из трёх слоёв. На двух из них нанесены проводящие дорожки. Третий, изолирующий слой является разделяющим. В местах, где располагаются клавиши, он имеет вырезы, позволяющие дорожкам верхнего и нижнего слоёв соприкасаться при нажатии. Толщина слоёв клавиатуры обычно не больше толщины бумаги или картона.

hello_html_m223ab0b5.jpg

В механических клавиатурах для возврата клавиш используются металлические пружины. Схемы клавиатур такого типа не очень защищены от пыли и влаги. Долговечность работы является основным преимуществом механических клавиатур.

hello_html_6f2a8085.jpg

Полумеханические клавиатуры это нечто среднее между мембранными и механическими, где вместо нижней мембраны используют печатную плату. Такая конструкция считается более долговечной. Клавиша возвращается в исходное положение также резиновым куполом. Иногда маленькой пружинкой. В этом случае обеспечивается более плавный ход на протяжении всего нажатия. Но у пружинной технологии присутствует один специфический эффект: срабатывание клавишы происходит даже при неполном нажатии, в то время как мембранная концепция позволяет вам передумать в процессе нажатия. Это важно при скоростной печати. Цена на такие устройства выше чем на мембранные, но кроме того, что они имеют некоторую защиту от загрязнения, эти клавиатуры прослужат вам дольше.

Лазерные клавиатуры

Состоит из маленького ящичка-проектора, который позволяет вывести изображение клавиатуры на любую ровную поверхность. Передача данных идёт по воздуху(беспроводная). Можно настроить яркость, звук печатания клавиш, чувствительность. Правда это не гарантирует стопроценнтную распознаваемость ваших движений и к тому же от яркого света болят глаза. Есть и еще один минус: клавиатуру не видно при ярком освещении. ну и стоимость этого гаджета отнюдь не маленькая.

hello_html_70da0c0a.jpg

В беспроводных клавиатурах используются три основных вида соединения, а именно соединение Bluetooth, инфракрасное соединение и радиочастотное соединение.

Клавиатуры, имеющие радиочастотное соединение, получают питание от аккумулятора или через кабель USB, который используется для подзарядки клавиатуры. Клавиатуры с инфракрасным соединением должны находиться в радиусе действия устройства принимающего сигнал. Клавиатуры с радиочастотным соединением имеют больший радиус действия, чем клавиатуры с инфракрасным соединением. В клавиатурах с соединением Bluetooth используется технология Bluetooth, обеспечивающая больший радиус действия, чем у клавиатур с радиочастотным и инфракрасным соединением. Клавиатуры с радиочастотным соединением обеспечивают большую мобильность, чем клавиатуры с соединением Bluetooth и с инфракрасным соединением.

Проводные клавиатуры

PS/2 и USB – две разновидности проводного соединения, соединяющие клавиатуры с компьютерами.

Порт PS/2 впервые появился в 1987 году на компьютерах IBM PS/2 (до этого для подключения клавиатуры использовался DIN-5 . Скорость передачи данных — от 80 до 300 Кб/с и зависит от производительности подключенного устройства и программного драйвера .

Из шести контактов в разъёме используется четыре: частота, данные, питание, общий. При этом для клавиатуры используемые контакты шины данных и частоты могут отличаться от контактов для подключения мыши. Это позволяет использовать оба устройства сразу, но через разветвитель.

В зависимости от типа корпуса клавиатуры делятся на:

Традиционные (стандартные) – обычные AT-клавиатуры;

Эргономичные. Конструкции клавиатур данного типа учитывают естественное положение рук во время набора (в таких конструкциях клавиатура преломлялась в центре, клавиши находились под прямым углом к естественному положению кистей рук при наборе). Эргономичная клавиатура дает возможность повысить производительность и избежать опасности некоторых хронических заболеваний.

Гибкие. — Клавиатура выполненная из нетоксичной высокоэластичной силиконовой резины и похожа на своеобразный коврик с выступами различной формы. Буквы и символы не стираются со временем так как нанесены на обратную сторону внешней плёнки. Внешняя плёнка может быть как матовой так и глянцевой. Главный плюс таких клавиатур в удобстве транспортировки — весят они всего около 350 грамм и легко сворачиваются в компактный рулон. Они хорошо защищены от загрязнений(водонепроницаема), легко чистятся и сравнительно легко переносят удары. Бесшумны и в некоторых реализациях имеют подсветку клавиш.

Но есть и минусы: для того чтобы нажать клавишу, нужно приложить несколько большее усилие, чем на обычной клавиатуре. Нажатие должно приходиться строго в центр.

Программа может использовать клавиатуру по-разному. Она может задержать свое выполнение до тех пор, пока оператор не введет какое-нибудь число или пока не нажмет какую-нибудь клавишу. Выполняя некоторую работу, программа может периодически проверять, не нажал ли оператор на клавишу, изменяющую режим работы программы. Резидентные программы могут контролировать все нажатия на клавиши, активизируясь при нажатии определенной заранее комбинации. Можно использовать прерывание, вырабатываемое клавиатурой, например, для завершения работы программы.

Принципы работы клавиатуры

Что же находится внутри клавиатуры? Оказывается, там есть компьютер! Только этот компьютер состоит из одной микросхемы и выполняет специализированные функции. Он отслеживает нажатия на клавиши и посылает номер нажатой клавиши в центральный компьютер.

Клавиатура представляет собой совокупность датчиков, воспринимающих давление на клавиши и замыкающих определенную электрическую цепь. Длительное время выпускались клавиатуры с механическими датчиками. Современные клавиатуры — мембранного типа. Переключатель представляет собой набор мембран: активная – верхняя, пассивная – нижняя, разделяющая.

Внутри корпуса клавиатуры помимо датчиков расположены электронные платы дешифрации сигнала.

Обмен данными между клавиатурой и системной платой осуществляется 11-битовыми блоками (8 разрядов плюс служебная информация) по 2-проводному кабелю (сигнал и земля).

Принцип работы клавиатуры заключается в сканировании переключателей клавиш. Замыканию и размыканию любого из переключателей соответствует уникальный цифровой код (scan code) размеров 1 байт.

Подключение клавиатуры к системной плате производится с помощью разъема DIN или mini-DIN.

На системной плате прием и обработку сигналов от клавиатуры выполняет специальная микросхема — контроллер клавиатуры.

Если рассмотреть сильно упрощенную принципиальную схему клавиатуры, можно заметить, что все клавиши находятся в узлах матрицы:

Устанавливая по очереди на каждой из вертикальных линий уровень напряжения, соответствующий логическому 0, клавиатурный компьютер опрашивает состояние горизонтальных линий. Если ни одна клавиша не нажата, уровень напряжения на всех горизонтальных линиях соответствует логической 1 (т.к. все эти линии подключены к источнику питания +5 В через резисторы).

Если оператор нажмет на какую-либо клавишу, то соответствующая вертикальная и горизонтальная линии окажутся замкнутыми. Когда на этой вертикальной линии процессор установит значение логического 0, то уровень напряжения на горизонтальной линии также будет соответствовать логическому 0.

Как только на одной из горизонтальных линий появится уровень логического 0, клавиатурный процессор фиксирует нажатие на клавишу. Он посылает в центральный компьютер запрос на прерывание и номер клавиши в матрице. Аналогичные действия выполняются и тогда, когда оператор отпускает нажатую ранее клавишу.

Номер клавиши, посылаемый клавиатурным процессором, однозначно связан с распайкой клавиатурной матрицы и не зависит напрямую от обозначений, нанесенных на поверхность клавиш. Этот номер называется скан-кодом (Scan Code).

Слово scan ("сканирование"), подчеркивает тот факт, что клавиатурный компьютер сканирует клавиатуру для поиска нажатой клавиши.

Но программе нужен не порядковый номер нажатой клавиши, а соответствующий обозначению на этой клавише ASCII-код. Этот код не зависит однозначно от скан-кода, т.к. одной и той же клавише могут соответствовать несколько значений ASCII-кода. Это зависит от состояния других клавиш. Например, клавиша с обозначением '1' используется еще и для ввода символа '!' (если она нажата вместе с клавишей SHIFT).

Поэтому все преобразования скан-кода в ASCII-код выполняются программным обеспечением. Как правило, эти преобразования выполняют модули BIOS. Для использования символов кириллицы эти модули расширяются клавиатурными драйверами.

Если нажать на клавишу и не отпускать ее, клавиатура перейдет в режим автоповтора. В этом режиме в центральный компьютер автоматически через некоторый период времени, называемый периодом автоповтора, посылается код нажатой клавиши. Режим автоповтора облегчает ввод с клавиатуры большого количества одинаковых символов.

Следует отметить, что клавиатура содержит внутренний 16-байтовый буфер, через который она осуществляет обмен данными с компьютером.

Стек драйверов для системных устройств ввода

Драйвера клавиатуры, независимо от схем физического подключения, используют системные драйвера класса клавиатуры для обработки не зависимых от аппаратной части операций. Данные драйвера называются драйверами класса , так как обеспечивают требуемые системой, но не зависимые от аппаратной реализации требования к конкретному классу устройств.

Соответствующий функциональный драйвер (драйвер порта) реализует зависимую от конкретного устройства поддержку выполнения операций ввода-вывода. В ОС Windows для x86-платформ реализован единый драйвер системной клавиатуры (i8042) и мыши.

Стек драйверов для Plug and Play PS/2-клавиатуры

Стек драйверов содержит (сверху вниз):

Kbdclass — верхнеуровневый фильтр-драйвер класса клавиатуры;

опциональный верхнеуровневый фильтр-драйвер класса клавиатуры;

i8042prt — функциональный драйвер клавиатуры;

корневой драйвер шины.

В ОС Windows 2000 и старше драйвером класса клавиатуры является драйвер Kbdclass , основными задачами которого являются:

обеспечение общих и аппаратно-независимых операций класса устройств;

поддержка Plug and Play, поддержка управления питанием и Windows Management Instrumentation (WMI);

поддержка операций для legacy-устройств;

одновременное выполнение операций более чем одного устройства;

реализация class service callback routine, которая вызывается функциональным драйвером для передачи данных из входного буфера устройства в буфер данных драйвера класса устройств.

В ОС Windows 2000 и старше функциональным драйвером для устройств ввода, использующих PS/2-порт (клавиатуры и мыши), является драйвер i8042prt , основные функции которого следующие:

обеспечение аппаратно-зависимых одновременных операций PS/2-устройств ввода (клавиатуры и мыши разделяют общие порты ввода вывода, но используют разные прерывания, процедуры обработки прерываний (ISR) и процедуры завершения обработки прерываний);

поддержка Plug and Play, поддержка управления питанием и Windows Management Instrumentation (WMI);

поддержка операций для legacy-устройств;

вызов class service callback routine для классов клавиатуры и мыши для передачи данных из входного буфера данных i8042prt в буфер данных драйвера класса;

вызов набора функций обратного вызова, которые могут реализовать драйвера-фильтры высокого уровня для гибкого управления устройством.

В целом стек устройств (правильнее говорить о стеке объектов устройств) PS/2-клавиатуры состоит из:

физического объекта устройства клавиатуры (PDO), созданного драйвером шины (в данном случае, шины PCI) – \Device\00000066;

функционального объекта устройства клавиатуры (FDO), созданного и присоединенного к PDO драйвером i8042prt — неименованный объект (unnamed);

опциональных фильтр-объектов устройства клавиатуры, создающихся фильтр-драйверами клавиатуры, разрабатываемыми сторонними разработчиками;

верхнеуровневого фильтр-объекта устройства класса клавиатуры, созданного драйвером класса Kbdclass – \Device\KeyboardClass0.

Обработка клавиатурного ввода приложениями

Подсистема Microsoft Win32 получает доступ к клавиатуре, используя поток необработанного ввода (Raw Input Thread, RIT), который является частью системного процесса csrss.exe. Операционная система при старте создает RIT и системную очередь аппаратного ввода (system hardware input queue, SHIQ).

С помощью утилиты IrpTracker, разработанной упоминавшейся ранее компанией Open Systems Resources, можно отследить последовательность вызовов, происходящих при обработке клавиатурного ввода.

Массивы состояния клавиш клавиатуры

Одной из задач при разработке модели аппаратного ввода Windows было обеспечение ее отказоустойчивости. Отказоустойчивость обеспечивается независимой обработкой ввода потоками, что предотвращает неблагоприятное воздействие одного потока на другой. Но этого недостаточно для надежной изоляции потоков друг от друга, поэтому система поддерживает дополнительную концепцию — локальное состояние ввода. Каждый поток обладает собственным состоянием ввода, сведения о котором хранятся в структуре THREADINFO. В информацию об этом состоянии включаются данные об очереди виртуального ввода потока, а также группа переменных. Последние содержат управляющую информацию о состоянии ввода. Относительно клавиатуры поддерживаются следующие сведения: какое окно находится в фокусе клавиатуры, какое окно активно в данный момент, какие клавиши нажаты, каково состояние курсора ввода.

Информация о том, какие клавиши нажаты, сохраняется в массиве синхронного состояния клавиш. Этот массив включается в переменные локального состояния ввода каждого потока. В то же время массив асинхронного состояния клавиш, в котором содержится аналогичная информация, — только один, и он разделяется всеми потоками. Массивы отражают состояние всех клавиш на данный момент, и функция GetAsyncKeyState позволяет определить, нажата ли сейчас заданная клавиша. GetAsyncKeyState всегда возвращает 0 (не нажата), если ее вызывает другой поток, а не тот, который создал окно, находящееся сейчас в фокусе ввода.

Клавиатурные ловушки

Функции, получающие уведомления о событиях, называются фильтрующими функциями и различаются по типам перехватываемых ими событий. Для того чтобы Windows смогла вызывать функцию-фильтр, эта функция должна быть прикреплена к хуку (например, к клавиатурному хуку). Прикрепление одной или нескольких фильтрующих функций к какому-нибудь хуку называется установкой хука. Для установки и удаления фильтрующих функций приложения используют функции Win32 API SetWindowsHookEx и UnhookWindowsHookEx. Некоторые хуки можно устанавливать как для всей системы, так и для одного конкретного потока.

Если к одному хуку прикреплено несколько фильтрующих функций, Windows реализует очередь функций, причем функция, прикрепленная последней, оказывается в начале очереди, а самая первая функция — в ее конце. Очередь функций-фильтров (см. рисунок 8) поддерживается самой Windows, что позволяет упростить написание фильтрующих функций и улучшить производительность операционной системы.

Когда к хуку прикреплена одна или более функций-фильтров и происходит событие, приводящее к срабатыванию хука, ОС Windows вызывает первую функцию из очереди функций-фильтров, и на этом ее ответственность заканчивается. Далее функция ответственна за то, чтобы вызвать следующую функцию в цепочке, для чего используется функция Win32 API CallNextHookEx.

Общая схема обработки

Обобщим все полученные выше знания о процедуре клавиатурного ввода в едином алгоритме. Итак, алгоритм прохождения сигнала от нажатия пользователем клавиш на клавиатуре до появления символов на экране можно представить следующим образом:

Операционная система при старте создает в системной процессе csrss.exe поток необработанного ввода и системную очередь аппаратного ввода.

Поток необработанного ввода в цикле посылает запросы чтения драйверу класса клавиатуры, которые остаются в состоянии ожидания до появления событий от клавиатуры.

Когда пользователь нажимает или отпускает клавишу на клавиатуре, микроконтроллер клавиатуры фиксирует нажатие/отпускание клавиши и посылает в центральный компьютер скан-код нажатой клавиши и запрос на прерывание.

Системный контроллер клавиатуры получает скан-код, производит преобразование скан-кода, делает его доступным на порту ввода-вывода 60h и генерирует аппаратное прерывание центрального процессора.

Процедура ISR считывает из внутренней очереди контроллера клавиатуры появившиеся данные, переводит скан-коды в коды виртуальных клавиш (независимые значения, определенные системой) и ставит в очередь вызов отложенной процедуры I8042KeyboardIsrDpc.

Процедура KeyboardClassServiceCallback извлекает из своей очереди ожидающий завершения запрос от потока необработанного ввода и возвращает в нем информацию о нажатой клавише.

Читайте также: