РуЛиб - онлайн библиотека > Йосифович Павел > Windows > Работа с ядром Windows

Читаем онлайн «Работа с ядром Windows»

ПАВЕЛ ЙОСИФОВИЧ
РАБОТА
С ЯДРОМ
Windows
2021
ББК 32.973.2-018.2
УДК 004.451
И75
Йосифович Павел
Ио75 Работа с ядром Windows. — СПб.: Питер, 2021. — 400 с.: ил. — (Серия «Для профессионалов»).
ISBN 978-5-4461-1680-5
Ядро Windows таит в себе большую силу. Но как заставить ее работать? Павел Йосифович поможет
вам справиться с этой сложной задачей: пояснения и примеры кода превратят концепции и сложные
сценарии в пошаговые инструкции, доступные даже начинающим.
В книге рассказывается о создании драйверов Windows. Однако речь идет не о работе с конкретным
«железом», а о работе на уровне операционной системы (процессы, потоки, модули, реестр и многое
другое).
Вы начнете с базовой информации о ядре и среде разработки драйверов, затем перейдете к API,
узнаете, как создавать драйвера и клиентские приложения, освоите отладку, обработку запросов, прерываний и управление уведомлениями.
16+ (В соответствии с Федеральным законом от 29 декабря 2010 г. № 436-ФЗ.)
ББК 32.973.2-018.2
УДК 004.451
Права на издание получены по соглашению с Pavel Yosifovich. Все права защищены. Никакая часть данной книги
не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских
прав.
Информация, содержащаяся в данной книге, получена из источников, рассматриваемых издательством как надежные. Тем не менее, имея в виду возможные человеческие или технические ошибки, издательство не может
гарантировать абсолютную точность и полноту приводимых сведений и не несет ответственности за возможные
ошибки, связанные с использованием книги.
Издательство не несет ответственности за доступность материалов, ссылки на которые вы можете найти в этой
книге. На момент подготовки книги к изданию все ссылки на интернет-ресурсы были действующими.
ISBN 978-1977593375 англ.
© 2019 by Pavel Yosifovich
ISBN 978-5-4461-1680-5
©П
 еревод на русский язык ООО Издательство
«Питер», 2021
©И
 здание на русском языке, оформление
ООО Издательство «Питер», 2021
© Серия «Для профессионалов», 2021
Оглавление
Глава 1. Обзор внутреннего устройства Windows . . . . . . . . . . . . . . . . . . . . 11
Процессы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Виртуальная память . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Состояние страниц . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Системная память . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Потоки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Стеки потоков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Системные сервисные функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Общая архитектура системы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Дескрипторы и объекты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Имена объектов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Обращение к существующим объектам . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Глава 2. Первые шаги в программировании для режима ядра . . . . . . . . . . 33
Установка инструментов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Создание проекта драйвера . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Функция DriverEntry и функция выгрузки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Установка и загрузка драйвера . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Простая трассировка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Глава 3. Основы программирования ядра . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Общие рекомендации программирования ядра . . . . . . . . . . . . . . . . . . . . . . . . . 45
Необработанные исключения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Завершение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Возвращаемые значения функций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
IRQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Использование C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
6   Оглавление
Тестирование и отладка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Отладочные и конечные сборки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
API режима ядра . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .