Программирование ядра Windows, 2е изд.
Copyright © 2020-2022 Pavel Yosifovich
Опубликовано leanpub,
Ruboss Technology Corporation
1321 Blanshard Street
Suite 301
Victoria, British Columbia, Canada
V8W 0B6
|
Данный документ предоставляется по лицензии Creative Commons Attribution 3.0 License, за исключением разделов со специальными оговорками. |
Первая публикация на английском языке: 10 декабря 2020
Второе (не законченное) издание на английском языке: 22 января 2022
Library of Congress Control Number: n/a
ISBN-13 9783221226022
ISBN-10 3221226029
ASIN: B086551JHY
2022-02-20
Многие рассматривают программирование ядра Windows тёмным искусством, доступным лишь тем немногим, которым удаётся каким- то образом раскрыть тайны самого ядра Windows. Однако разработка ядра Windows ничем не отличается от разработки режима пользователя, по крайней мере в общих чертах. В обоих случаях для создания высококачественного кода требуется хорошее понимание самой платформы.
Данная книга представляет собой руководство по программированию в рамках самого ядра Windows с применением известной интегрированной среды разработки (IDE, integrated development environment) Visual Studio. Данная среда знакома многим разработчикам в пространстве Microsoft, поэтому наша кривая обучения ограничивается знакомством с ядром, кодированием и отладкой, причём с меньшей относящейся к инструментам разработки силой сцепления.
Эта книга ориентирована на программные драйверы устройств - термин, который я применяю для обозначения не связанных с оборудованием драйверов. Программные драйверы ядра обладают полным доступом к своему ядру, что позволяет им выполнять любые операции, допускаемые самим ядром. Некоторые программные драйверы более конкретны, например, мини- фильтры файловой системы, также описываемые в данной книге.
Данная книга предназначена для разработчиков программного обеспечения, ориентированных на само ядро Windows, и нуждающихся в своих целях в написании драйверов ядра. Распространённые ситуации, в которых применяются драйверы ядра, относятся к области кибербезопасности, когда драйверы ядра выступают основным механизмом для получения уведомлений о важных событиях с возможностью перехвата определённых операций. В качестве примеров кода в книге применяются C и C++, тогда как API ядра это целиком C. C++ применяется там, где это имеет смысл, когда его преимущества очевидны с точки зрения сопровождения, ясности, управления ресурсами или любого их сочетания. В книге не применяются сложные конструкции C++, такие как метапрограммирование шаблонов. Данная книга не о C++, а о драйверах ядра Windows.
Читатели обязаны быть весьма знакомы с языком программирования C, в особенности с указателями, структурами и его стандартной библиотекой, так как они часто встречаются при работе с API ядра. Настоятельно рекомендуется базовое знакомство с C++, хотя прочесть книгу можно и только с опытом C.
Вот краткое изложение глав книги:
-
Глава 1 (Обзор внутреннего устройства Windows) предоставляет основополагающие знания внутренней работы самой ОС Windows на неком верхнем уровне, достаточные для фундамента без погружения во множество подробностей.
-
Глава 2 (Приступаем к разработке ядра) описывает те инструменты и процедуры, которые требуются для настройки среды разработки для создания драйверов ядра. Чтобы убедиться что все инструменты и процедуры работают должным образом, создаётся очень простой драйвер.
-
Глава 3 (Основы программирования ядра) рассматривает основы написания драйверов, включая основы API ядра, обработку общих задач программирования, включающих строки, связанные списки, динамическое выделение памяти и многое другое.
-
Глава 4 (Драйвер от начала до конца) показывает как собрать полноценный драйвер, который выполняет некую полезную функциональность, а также клиентское приложение для управления им.
Если вы новичок в разработке ядра Windows, вам следует читать главы с 1 по 7 по порядку. Глава 8 содержит дополнительный материал, к которому вы, возможно, захотите вернуться после создания нескольких простых драйверов. Главы 9 и далее описывают специализированные методы, и, по крайней мере теоретически, их можно читать в любом порядке.
Все образцы кода из этой книги доступны бесплатно из репозитория Github данной книги. В этот репозиторий будут помещаться обновления для образцов кода. Читателю рекомендуется клонировать это репозиторий в его локальную машину для более простых экспериментов с этим кодом напрямую.
Все примеры кода были скомпилированы с применением Visual Studio 2019. Если есть такое желание, имеется возможность компиляции большинства примеров кода и более ранними версиями Visual Studio. В самых последних версиях стандартов C++ могут иметься несколько функциональных возможностей, которые могут не поддерживаться в более ранних версиях, однако их должно быть не сложно подправить.
Приятного чтения!
Павел Йосифович
Июнь 2022
- Введение
- Глава 1. Обзор внутреннего устройства Windows
- Глава 2. Приступаем к разработке ядра
- Глава 3. Основы программирования ядра
- Глава 4. Драйвер от начала до конца
- Глава 5. Отладка и тестирование
- Глава 6. Механизмы ядра
- Уровень запроса на прерывание (IRQL)
- Повышение и понижение IRQL
- Сопоставление приоритетов потоков и IRQL
- Отложенные вызовы процедур (DPC)
- Асинхронные вызовы процедур
- Структурированная обработка исключительных ситуаций
- Крушение системы
- Синхронизация потоков
- Синхронизация верхних IRQL
- Рабочие элементы
- Выводы
- Глава 7. Пакет запроса на ввод/ вывод (IRP)
- Глава 8. Современные технологии программирования (Часть I)
- Глава 9. Извещения процесса и потока
- Глава 10. Извещения объектов и реестра