- •Модель программного интерфейса ос windows. Понятие объекта ядра и описателя объекта ядра операционной системы Windows. Нотация программного интерфейса.
- •Понятие пользовательского режима и режима ядра операционной системы Windows. Модель виртуальной памяти процесса в пользовательском режиме и в режиме ядра операционной системы Windows.
- •Обзор архитектуры и основных модулей операционной системы Windows.
- •Системный реестр операционной системы Windows.
- •5. Основные элементы программ с оконным пользовательским интерфейсом. Минимальная программа для ос Windows с окном на экране. Создание и отображение окна.
- •Понятие оконного сообщения. Источники сообщений. Очередь сообщений. Цикл приема и обработки сообщений. Процедура обработки сообщений.
- •8. Вывод информации в окно. Механизм перерисовки окна.
- •9. Принципы построения графической подсистемы ос Windows. Понятие контекста устройства. Вывод графической информации на физическое устройство.
- •10. Рисование геометрических фигур. Графические инструменты. Управление цветом. Палитры цветов.
- •11. Растровые изображения. Вывод растровых изображений. Значки и курсоры. Вывод растровых изображений с эффектом прозрачного фона.
- •12. Вывод текста. Логические и физические шрифты.
- •13. Системы координат. Трансформации. Режимы масштабирования.
- •14. Понятие ресурсов программ. Виды ресурсов. Работа с ресурсами. Меню. Окна диалога.
- •15. Понятие динамически подключаемой библиотеки. Структура dll-библиотеки. Создание dll-библиотеки. Использование dll-библиотеки в программе. Статический и динамический импорт.
- •16. Отображение файлов в память.
- •17. Организация многозадачности в операционной системе Windows. Понятие процесса и потока. Контекст потока. Создание и завершение процессов и потоков.
- •18. Механизм приоритетов в операционной системе Windows. Класс приоритета процесса. Относительный приоритет потока. Базовый и динамический приоритеты потока.
- •19. Синхронизация потоков в пределах одного процесса. Критические секции. Спин-блокировки. Interlocked-функции.
- •20. Синхронизация потоков разных процессов. Объекты синхронизации: флаги, семафоры, события, ожидаемые таймеры, именованные и неименованные «трубы» (каналы).
- •21. Синхронизация потоков при создании общих данных с помощью двойных проверок (double-checked locking).
- •22. Синхронизация потоков с помощью мониторов Хоара.
- •24. Структуры данных общего назначения в режиме ядра. Представление строк стандарта Unicode. Представление двусвязных списков.
- •25. Понятие прерывания, исключения и системного вызова.
- •26. Аппаратные и программные прерывания. Таблица обработчиков прерываний. Понятие процедуры обработки прерываний (isr).
- •27. Программируемый контролер прерываний. Уровни прерываний. Механизм вызова прерываний. Функция KeBugCheckEx.
- •28. Исключения. Механизм обработки исключения.
- •29. Системные вызовы. Выполнение системного вызова.
- •30. Понятие отложенной процедуры (dpc). Назначение отложенных процедур.
- •31. Понятие асинхронной процедуры (apc). Назначение асинхронных процедур. Асинхронные процедуры режима ядра и пользовательского режима.
- •32. Понятие рабочего элемента ядра (Work Item). Назначение рабочих элементов.
- •33. Пулы памяти. Пул подкачиваемой памяти, пул неподкачиваемой памяти, пул сессии, особый пул. Тегирование пулов. Структура данных пула.
- •34. Оптимизация использования оперативной памяти с помощью списков предыстории (look-aside lists).
- •35. Блокирование страниц в памяти. Списки описателей памяти (mdl) и их использование
- •36. Представление объекта ядра в памяти. Менеджер объектов.
- •37. Структура драйвера операционной системы Windows. Точки входа в драйвер.
- •38. Объект, описывающий драйвер. Объект, описывающий устройство. Объект, описывающий файл. Взаимосвязь объектов.
- •39. Запрос ввода-вывода (irp). Схема выполнения ввода-вывода в стеке драйверов.
- •40. Структура api ядра ос Windows: Kernel api, Windowing api, Messaging api. Функции ZwXxx/NtXxx в пользовательском режиме и в режиме ядра.
- •42. Перехват функций ос Windows api в пользовательском режиме. Интерфейсный модуль ntdll.Dll.
- •43. Перехват вызова функций ос Windows в режиме ядра. Встроенная защита от перехвата в новейших версиях ос Windows.
30. Понятие отложенной процедуры (dpc). Назначение отложенных процедур.
DPC (англ. Deferred procedure call — отложенный вызов процедуры) — специфический механизм вызова процедур в архитектуре Windows.
Суть DPC: При возникновении прерывания, управление передаётся обработчику прерывания. Существует ряд факторов, ограничивающих возможности кода обработчика прерывания:
Общей практикой является требование минимизации времени работы обработчика прерывания. Поэтому необходимо воздержаться от выполнения ресурсоёмких и долгих действий непосредственно внутри обработчика прерывания.
В Windows код обработчика прерывания выполняется на высоком IRQL, что сильно ограничивает набор доступных обработчику ядерных функций: многие функции требуют гораздо более низкого IRQL для своего вызова.
Решением этой проблемы является подход, при котором непосредственно в обработчике выполняются лишь самые критические операции, а остальные действия откладываются до тех пор, пока не появится относительно свободное процессорное время, а IRQL не опустится до допустимого значения (DISPATCH_LEVEL). Тогда эти действия будут выполнены в рамках вызова отложенной (её выполнение было отложено до этого момента) процедуры.
В отличие от обычного вызова процедуры, при котором, фактически, управление сразу же передаётся коду вызываемой процедуры, при DPC-вызове передача управления вызываемой процедуре не происходит — вместо этого адрес вызываемой процедуры и параметры помещаются в специальную очередь, называемую DPC Queue. Когда наступает «благоприятное» время, отложенная процедура вызывается «по-настоящему».
Таким образом, обработчик прерывания выполняет только самые необходимые действия и осуществляет отложенный вызов процедуры, которая выполнит все остальные действия, нужные в рамках обработки прерывания, но не требующие повышенной срочности.
Управление DPC: Для того, чтобы осуществлять отложенные вызовы, необходимо сперва создать объект DPC при помощи ядерной функции KeInitializeDpc.
Созданному объекту DPC можно изменить приоритет при помощи функци KeSetImportanceDpc, а также переназначить процессор, в очередь которого будет помещён отложенный вызов, с помощью KeSetTargetProcessorDpc.
Постановка DPC в очередь осуществляется вызовом ядерной функции KeInsertQueueDpc.
Помещённый в очередь DPC можно убрать из очереди вызовом функции KeRemoveQueueDpc.
Поскольку механизм DPC используется главным образом в рамках обработки запросов ввода/вывода, существуют специальные функции-обёртки с префиксом Io для управления отложенными вызовами. В частности, обработчики прерываний, согласно документации, должны использовать именно эти функции.
31. Понятие асинхронной процедуры (apc). Назначение асинхронных процедур. Асинхронные процедуры режима ядра и пользовательского режима.
Прерывания APC(asynchronous procedure call) позволяет выполнять пользовательские программы и системный код в контексте конкретного пользовательского потока (а значит, и в адресном пространстве конкретного процесса). Поскольку для выполнения в контексте конкретного потока APC ставятся в очередь и выполняются при IRQL ниже «DPC/dispatch», на их работу не налагаются ограничения, свойственные DPC. APC‑процедура может обращаться к ресурсам (объектам), ждать освобождения описателей объектов, генерировать ошибки страниц и вызывать системные сервисы.
APC описывается управляющим объектом ядра — APC объектом. APC, ждущие выполнения, находятся в очереди APC (APC queue), управляемой ядром. Очереди APC — в отличие от общесистемной очереди DPC — специфичны для конкретного потока, так как у каждого потока своя очередь APC.
APC бывают двух видов: режима ядра и пользовательского режима. APC режима ядра для выполнения в контексте целевого потока не нужно «разрешение» со стороны этого потока, тогда как для APC пользовательского режима это обязательно. APC режима ядра прерывает поток и выполняет процедуру без вмешательства или согласия потока.
APC режима ядра тоже бывают двух типов: обычные (normal) и специальные (special). Поток может отключить все APC режима ядра, повысив IRQL до уровня APC_LEVEL или вызвав KeEnterGuardedRegion, которая впервые появилась в Windows Server2003.
Исполнительная система использует APC режима ядра для тех задач операционной системы, которые нужно выполнить в адресном пространстве (контексте) конкретного потока. Так, через специальные APC режима ядра она может указать потоку прекратить выполнение системного сервиса, допускающего прерывание, или записать результаты операции асинхронного ввода‑вывода в адресное пространство этого потока. Подсистемы окружения используют такие APC, чтобы приостановить поток или завершить себя, а также чтобы получить или установить контекст пользовательского потока. Драйверы устройств также применяют APC режима ядра.
Некоторые Windows‑функции вроде ReadFileEx, WriteFileEx и QueueUser APC вызывают APC пользовательского режима. Так, функции ReadFileEx и WriteFileEx позволяют вызывающей программе указать процедуру завершения ввода-вывода (completion procedure), которая будет вызвана по окончании операции ввода-вывода. Процедура завершения ввода-вывода реализуется помещением APC в очередь потока, выдавшего запрос на ввод-вывод.
Однако обратный вызов процедуры завершения не обязательно происходит в момент постановки APC в очередь, поскольку APC пользовательского режима передаются потоку, только если он находится в состоянии тревожного ожидания (alertable wait state). Поток может перейти в такое состояние, вызвав одну из Windows‑функций: либо WaitForMultipleObjectsEx, либо SleepEx. В обоих случаях, как только в очереди появится APC пользовательского режима, ядро прервет поток, передаст управление APC‑процедуре и возобновит его выполнение лишь после завершения APC‑процедуры.
В отличие от APC режима ядра, которые выполняются на уровне «APC», APC пользовательского режима выполняются на уровне «passive». Появление APC может переупорядочить очереди ожидания — списки, определяющие, какие потоки ждут, в каком порядке и на каких объектах. Если в момент появления APC поток находится в состоянии ожидания, то после обработки APC‑процедуры поток возвращается в состояние ожидания, но перемещается в конец списка потоков, ждущих те же объекты.