Информация о книге

978-5-9775-0185-9, 978-5-7502-0364-2, 978-0-7356-2374-3

Главная  » Научно-техническая литература » Информационные технологии. Компьютеры » Аппаратное обеспечение » Аппаратное обеспечение в целом » Windows Driver Foundation. Разработка драйверов

Орвик П., Смит Г., Windows Driver Foundation. Разработка драйверов

БХВ-Петербург, Русская Редакция, 2008 г., 880 стр., 978-5-9775-0185-9, 978-5-7502-0364-2, 978-0-7356-2374-3 , 233*165*37 мм., тираж: 1500


Наличие в интернет-магазинах

Магазинов: 1, Цена: от 1173 руб. посмотреть все

Описание книги

Книга содержит описания принципов и методик, примеры программирования и подсказки для эффективной разработки драйверов. Представлены инструменты и ресурсы, основные понятия драйверов и Операционной системы Windows, обзор Модели Windows Driver Foundation (WDF), информация об архитектуре Windows, модели ввода/вывода. Приводятся три основные составляющие модели WDF: инфраструктура драйвера пользовательского режима, инфраструктура драйвера режима ядра и набор инструментов тестирования и верификации, а также шаблоны и рекомендации по выбору. Подробно рассматриваются различия между пользовательским режимом и режимом ядра.

Купить эту книгу можно в интернет-магазинах

  Лабиринт - 1173 руб.
  Страница товара выбранного интернет-магазина откроется в новом табе

Ключевые слова

Поделиться ссылкой на книгу



Содержание книги

Оглавление Об авторах
Предисловие
Благодарности
Часть I. Начало работы с моделью WDF
Глава 1. Введение в WDF
Об этой книге
Кому адресована эта книга
Часть I. Начало работы с моделью WDF
Часть II. Изучение инфраструктур
Часть III. Применение основ WDF
Часть IV. Смотрим глубже - больше о драйверах
WDF
Часть V. Создание, установка и тестирование
драйверов WDF
Словарь
Условные обозначения
Приступая к разработке драйверов
Системные требования для разработки драйверов
Как приобрести и установить набор WDK
Библиотеки WDK
Документация WDK
Инструменты WDK
Образцы WDK
Образцы UMDF
Образцы KMDF
Как приобрести проверочные версии Windows
Как приобрести отладочные инструменты
Как приобрести устройства обучения OSR
Основные источники информации
Основные ссылки
Глава 2. Основы драйверов под Windows
Что такое драйвер?
Базовая архитектура Windows
Архитектура драйвера
Объекты устройств и стек устройства
Дерево устройств
Объекты и структуры данных ядра
Модель ввода/вывода Windows
Запросы ввода/вывода
Обработка прерываний стеком устройства
Буферы данных и типы передачи ввода/вывода
Передача и получение данных от устройства
Plug and Play и управление энергопотреблением
Основы программирования в режиме ядра
Прерывания и уровни IRQL
Параллелизм и синхронизация
Потоки
Синхронизация
Состояние гонок и взаимоблокировки
Память
Управление памятью
Пулы памяти
Стек ядра
Списки MDL
Советы по программированию в режиме ядра
Выделение памяти
Использование спин-блокировок
Управление ошибками страниц
Обращение к памяти пользовательского режима
Блокирование потоков
Верификация драйверов
Использование макросов
Основные термины
Глава 3. Основы WDF
WDF и WDM
Что такое WDF?
Объектная модель WDF
Программный интерфейс
Иерархия объектов
Параллелизм и синхронизация
Модель ввода/вывода
Отмена запросов ввода/вывода
Исполнители ввода/вывода
Обработка некритических ошибок
Извещение об ошибках UMDF
Извещение об ошибках KMDF
Plug and Play и управление энергопотреблением
Критерии конструкции WDF для Plug and Play и
управления энергопотреблением
Безопасность
Стандартные безопасные установки
Проверка достоверности параметров
Поддержка верификации, трассировки и отладки
Обслуживаемость и управление версиями
Часть II. Изучение инфраструктур
Глава 4. Обзор драйверных инфраструктур
Обзор драйверных инфраструктур
Обзор инфраструктуры UMDF
Объекты инфраструктуры UMDF
Объекты обратного вызова инфраструктуры UMDF
Обзор инфраструктуры KMDF
Объекты KMDF
Функции обратного вызова инфраструктуры KMDF
Архитектура WDF
Инфраструктура UMDF
Компоненты инфраструктуры UMDF
Критические ошибки в драйверах UMDF
Типичный запрос ввода/вывода UMDF
Инфраструктура KMDF
Компоненты инфраструктуры KMDF
Критические ошибки в драйверах KMDF
Типичный запрос ввода/вывода KMDF
Поддержка устройств и драйверов в WDF
Устройства, поддерживаемые UMDF
Достоинства драйверов UMDF
Недостатки драйверов UMDF
Устройства, поддерживаемые KMDF
Как выбрать правильную инфраструктуру
Глава 5. Объектная модель WDF
Обзор объектной модели
Методы, свойства и события
Обратные вызовы по событию
Атрибуты объектов
Иерархия и время жизни объектов
Контекст объекта
Реализация объектной модели UMDF
Соглашение об именах UMDF
Объекты и интерфейсы инфраструктуры UMDF
Объекты обратного вызова и интерфейсы
драйвера UMDF
Пример UMDF: объекты и интерфейсы обратных
вызовов
Реализация объектной модели KMDF
Типы объектов KMDF
Соглашение об именах KMDF
Создание объектов
Создание объектов UMDF
Создание объектов KMDF
Структура конфигурации объекта KMDF
Структура атрибутов объекта KMDF
Методы создания объектов KMDF
Иерархия и время жизни объектов
Удаление, ликвидация, очистка и уничтожение
Иерархия объектов UMDF
Иерархия объектов KMDF
Удаление объектов
Обратные вызовы очистки ресурсов
Обратные вызовы деструкции
Удаление объектов UMDF
Удаление объектов KMDF
Исключение: завершенные запросы ввода/вывода
Область контекста объекта
Данные контекста объекта UMDF
Информация контекста UMDF в членах данных
объекта обратного вызова
Область контекста UMDF для объекта
инфраструктуры
Область контекста объекта KMDF
Объявления типа области контекста KMDF
Инициализация полей контекста в структуре
атрибутов объекта
Назначение области контекста KMDF объекту
Глава 6. Структура драйвера и его инициализация
Обязательные компоненты драйвера
Структура драйверов UMDF и требования к ним
Структура драйверов KMDF и требования к ним
Объект драйвера
Создание объекта обратного вызова для драйвера
UMDF
Создание объекта драйвера KMDF
Объекты устройств
Типы объектов устройств
Драйверы фильтра и объекты устройств фильтра
Функциональные драйверы и объекты
функциональных устройств
Драйверы шины и объекты физических устройств
(KMDF)
Драйверы унаследованных устройств и объекты
устройств управления (KMDF)
Драйверы WDF, типы драйверов и типы объектов
устройств
Свойства устройств
Инициализирование объекта устройства
Объекты очередей и другие вспомогательные
объекты
Интерфейсы устройств
Интерфейсы устройств и символьные ссылки
Создание и инициализирование объекта
устройства UMDF
Создание объекта обратного вызова устройства
Создание и инициализирование инфраструктурного
объекта устройства
Пример UMDF: интерфейс устройства
Создание и инициализирование объекта
устройства KMDF
Структура инициализации устройства KMDF
Инициализация KMDF объектов FDO
Инициализация KMDF объектов FiDO
Область контекста объекта устройства
Создание объектов устройств KMDF
Дополнительные задачи, выполняемые функцией
EvtDriverDeviceAdd
Пример KMDF: функция обратного вызова
EvtDriverDeviceAdd
Перечисление дочерних устройств (только
PDO-объекты KMDF)
Статическое и динамическое перечисление в
драйверах шины
Динамическое перечисление
Статическое перечисление
Инициализация объектов PDO
Способы именования устройства для драйверов
KMDF
Именованные объекты устройств
Дескрипторы безопасности
Часть III. Применение основ WDF
Глава 7. Plug and Play и управление
энергопотреблением
Введение в Plug and Play и управление
энергопотреблением
О механизме Plug and Play
О состояниях энергопотребления
Политика энергопотребления
Plug and Play и управление энергопотреблением в
WDF
Стандартные настройки Plug and Play и управления
энергопотреблением
Очереди ввода/вывода и управление
энергопотреблением
Обратные вызовы функций для событий Plug and
Play и управления энергопотреблением
Поддержка бездействия и пробуждения (только
для KMDF)
Энергостраничные и неэнергостраничные
драйверы
Порядок обратных вызовов функций для событий
Plug and Play и управление энергопотреблением
Перечисление и запуск устройств
Отключение питания и удаление устройства
Неожиданное извлечение
Последовательность действий при неожиданном
удалении для драйверов UMDF
Последовательность действий при неожиданном
удалении устройства для драйверов KMDF
Реализация Plug and Play и управления
энергопотреблением в драйверах WDF
Чисто программные драйверы Plug and Play и
управление энергопотреблением
Пример UMDF: чисто программный драйвер фильтра
для Plug and Play
Пример KMDF: чисто программный драйвер фильтра
для Plug and Play
Действия инфраструктуры для чисто программных
драйверов
Plug and Play и управление энергопотреблением в
простых аппаратных драйверах
Инициализация и деинициализация устройства при
включении и выключении
Управление энергопотреблением очередей в
аппаратных функциональных драйверах
Пример UMDF: код для Plug and Play и управления
энергопотреблением в протокольном
функциональном драйвере
Управляемая энергопотреблением очередь для
драйвера UMDF
Методы интерфейса IPnpCallbackHardware
Методы интерфейса IPnpCallback
Пример KMDF: код для Plug and Play и управления
энергопотреблением в простом аппаратном
функциональном драйвере
Пример KMDF: регистрация обратных вызовов и
организация управляемых энергопотреблением
очередей
Пример KMDF: обратные вызовы для входа и
выхода из состояния D0
Действия инфраструктуры для простого
аппаратного функционального драйвера
KMDF, устройства хранение и гибернация
Продвинутые возможности управления
энергопотреблением для драйверов KMDF
Поддержка бездействия устройства в режиме
низкого энергопотребления для драйверов KMDF
Настройки и управление бездействием в драйверах
KMDF
Выбор периода простоя и состояний пониженного
энергопотребления в драйверах KMDF
Поддержка пробуждения устройства для
драйверов KMDF
Реализация пробуждения из состояния Sx в
драйверах KMDF
Реализация пробуждения из состояния S0 в
драйверах KMDF
Пример KMDF: поддержка бездействия и
пробуждения устройств
Действия инфраструктуры для поддержки
бездействия устройства
Действия инфраструктуры, поддерживающие
пробуждение устройства
Глава 8. Поток и диспетчеризация ввода/вывода
Основные типы запросов ввода/вывода
Запросы на создание
Запросы на очистку и закрытие
Запросы на чтение и запись
Запросы управления вводом/выводом устройства
Обзор типов запросов ввода/вывода
Типы передач ввода/вывода
Буферизованный ввод/вывод
Прямой ввод/вывод
Ввод/вывод типа METHOD_NEITHER
Тип ввода/вывода METHOD_NEITHER в UMDF
Тип ввода/вывода METHOD_NEITHER в KMDF
Поток запросов ввода/вывода
Путь запроса ввода/вывода через стек устройств
UMDF
Путь запросов ввода/вывода сквозь драйвер KMDF
Обработка завершения запросов ввода/вывода
Обработка завершения запросов ввода/вывода
UMDF
Обработка завершения запросов ввода/вывода
KMDF
Обработка завершения запросов ввода/вывода в
Windows
Поток запросов ввода/вывода в инфраструктурах
Предварительная обработка пакетов IRP
Маршрутизация пакетов IRP к внутреннему
обработчику запросов
Ход операций в обработчике запросов
ввода/вывода
Проверка достоверности параметров
Обработка запросов в обработчике ввода/вывода
Объекты запросов ввода/вывода
Буферы ввода/вывода и объекты памяти
Извлечение буферов в драйверах UMDF
Извлечение буферов в драйверах KMDF
Время жизни запросов, памяти и указателей на
буферы
Очереди ввода/вывода
Конфигурация очереди и типы запросов
Указание типа запроса для очереди
Обратные вызовы для очереди
Стандартные очереди
Очереди и управление энергопотреблением
Управляемые энергопотреблением очереди
Неуправляемые энергопотреблением очереди
Тип диспетчеризации
Управление очередью
Пример UMDF: создание очередей ввода/вывода
Стандартная очередь UMDF
Нестандартные очереди UMDF
Очереди UMDF с ручной диспетчеризацией
Пример KMDF: создание очередей ввода/вывода
Стандартная очередь KMDF
Нестандартная очередь KMDF
Извлечение запросов из очереди с ручной
диспетчеризацией
Функции обратного вызова по событию
Объект файла для ввода/вывода
Автоматическая пересылка запросов на создание,
очистку и закрытие
Обратные вызовы по событиям ввода/вывода для
запросов на создание
Обработка запросов на создание в драйверах UMDF
Имперсонация в драйверах UMDF
Обработка запросов на создание в драйверах KMDF
Обратные вызовы по событиям ввода/вывода для
очистки и закрытия
Функции обратного вызова для запросов на
чтение, запись и IOCTL
Обратные вызовы для запросов на чтение и запись
Обратные вызовы для запросов IOCTL
Стандартные обратные вызовы для ввода/вывода
Завершение запросов ввода/вывода
Отмененные и приостановленные запросы
Отмена запросов ввода/вывода
Приостановка запроса ввода/вывода
Адаптивные тайм-ауты в UMDF
Самоуправляемый ввод/вывод
Самоуправляемый ввод/вывод при запуске и
перезапуске устройства
Самоуправляемый ввод/вывод при переходе
устройства в состояние пониженного
энергопотребления или при его удалении
Пример KMDF: реализация таймера WDT
Пример: регистрация функций обратного вызова
для самоуправляемого ввода/вывода
Пример: создание и инициализация таймера
Пример: запуск таймера
Пример: остановка таймера
Пример: перезапуск таймера
Пример: удаление таймера
Глава 9. Получатели ввода/вывода
О получателях ввода/вывода
Стандартные получатели ввода/вывода
Удаленные получатели ввода/вывода в драйверах
KMDF
Общие и специализированные получатели
ввода/вывода
Реализация получателя ввода/вывода в UMDF
Диспетчеры ввода/вывода UMDF
Внутристековые файлы для получателей
ввода/вывода в драйверах UMDF
Создание и управление получателями
ввода/вывода
Обращение к получателю ввода/вывода
Создание удаленных получателей ввода/вывода в
драйверах KMDF
Функции инициализации для структуры параметров
получателя ввода/вывода
Пример KMDF: создание и открытие удаленного
получателя ввода/вывода
Управление состояниями получателя ввода/вывода
Методы для управления состоянием получателя
ввода/вывода
Обратные вызовы получателей ввода/вывода для
драйверов KMDF
Пример KMDF: функция обратного вызова
EvtIoTargetQueryRemove
Создание запроса ввода/вывода
Пример UMDF: создание объекта запроса
ввода/вывода WDF
Пример KMDF: создание объекта запроса
ввода/вывода WDF
Объекты памяти и буферы для созданных
драйвером запросов ввода/вывода
Выделение объектов памяти и буферов для
запросов ввода/вывода
Родитель объекта памяти
Типы буферов
Одновременное создание объекта памяти и буфера
Создание объекта памяти, использующего уже
существующий буфер
Сопоставление объекта памяти объекту запроса
ввода/вывода
Пример UMDF: создание объекта памяти,
использующего уже существующий буфер
Пример KMDF: создание объекта памяти и нового
буфера
Форматирование запросов ввода/вывода
Когда нужно форматировать запрос
Форматирование запроса
Форматирование неизмененного запроса для
стандартного получателя ввода/вывода
Форматирование измененных или созданных
драйвером запросов
Методы форматирования UMDF для запросов
ввода/вывода
Методы форматирования KMDF для запросов
ввода/вывода
Параметры для методов форматирования
Пример UMDF: форматирование запроса на запись
Пример KMDF: форматирование запроса на чтение
Обратные вызовы для завершения ввода/вывода
Обработка в функции обратного вызова
завершения ввода/вывода
Извлечение статуса завершения и другой
информации
Отправление запросов ввода/вывода
Опция для отправки запросов
Значения тайм-аута для запросов ввода/вывода
Синхронные и асинхронные запросы ввода/вывода
Эффект, оказываемый состоянием получателя
ввода/вывода
Опция "отправил и забыл"
Пример UMDF: отправка запроса стандартному
получателю ввода/вывода
Пример KMDF: опция "отправил и забыл"
Пример KMDF: форматирование и отправление
запроса получателю ввода/вывода
Разбивка запросов ввода/вывода на подзапросы
Пример KMDF: повторное использование объекта
ввода/вывода
Отмена отправленного запроса
Пример UMDF: отмена всех запросов ввода/вывода
для файла
Пример KMDF: отмена запросов ввода/вывода
Получатели ввода/вывода FileHandle в драйверах
UMDF
Получатели ввода/вывода USB
Устройства USB
Конфигурационные дескрипторы и дескрипторы
устройств
Модели передачи данных USB
Специализированные получатели ввода/вывода
USB в WDF
Объекты устройств исполнителей USB
Объекты интерфейса USB
Объекты каналов исполнителей USB
Конфигурирование получателей ввода/вывода USB
Пример UMDF: конфигурирование получателя
ввода/вывода USB
Пример KMDF: конфигурирование получателя
ввода/вывода USB
Отправление запроса ввода/вывода получателю
USB
Пример UMDF: отправление синхронного запроса
получателю ввода/вывода USB
Пример KMDF: отправление асинхронного запроса
ввода/вывода получателю USB
Средство непрерывного считывания USB в KMDF
Рекомендация для отправления запросов
ввода/вывода
Глава 10. Синхронизация
Когда требуется применение синхронизации
Пример синхронизированного доступа к общим
данным
Требования синхронизации для драйверов WDF
Возможности синхронизации, предоставляемые
WDF
Подсчет ссылок и иерархическая объектная
модель
Сериализация обратных вызовов функций для
событий Plug and Play и энергопотребления
Управление потоком для очередей ввода/вывода
Блокировка представления объекта
Область синхронизации и сериализация функций
обратных вызовов ввода/вывода
Область синхронизации на уровне устройства и
методы диспетчеризации очереди
Область синхронизации в драйверах UMDF
Область синхронизации в драйверах KMDF
Стандартные настройки области синхронизации
Синхронизация на уровне устройства
Синхронизация на уровне очереди
Пример KMDF: область синхронизации
Автоматическая сериализация функций обратных
вызовов процедурами DPC, таймерами и рабочими
элементами
Уровни исполнения в драйверах KMDF
Спин-блокировки и wait-блокировки KMDF
Wait-блокировки
Спин-блокировки
Виды спин-блокировок
Пример KMDF: спин-блокировки
Синхронизация отмены запросов ввода/вывода в
драйверах KMDF
Синхронизация отмены через область
синхронизации
Синхронизация отмены с отслеживанием состояния
в области контекста
Отмена входящих запросов синхронно с
подзапросами
Сводка методов синхронизации и общие советы
Глава 11. Трассировка и диагностируемость
драйверов
Основы программной трассировки с применением
WPP
Преимущества программной трассировки WPP
Гибкое динамическое управление
Возможность просмотра сообщений в режиме
реального времени или запись их в файл
Обильная информация
Охрана интеллектуальной собственности
Легкость перехода от операторов печати
отладчика
Включение в поставляемые продукты
Минимальное воздействие на производительность
Компоненты программной трассировки WPP
Поставщик трассировки
Контроллер трассировки
Буфер трассировки
Сеанс трассировки
Потребитель трассировки
WPP и ETW
ETW в Windows Vista
Функции и макросы для работы с сообщениями
трассировки
Макрос DoTraceMessage
Преобразование операторов печати отладчика в
ETW
Условия для сообщений
Специальные функции сообщений трассировки
Поддержка программной трассировки в драйвере
Модифицирования файла Sources для исполнения
препроцессора WPP
Пример UMDF: директива RUN_WPP для образца
драйвера Fx2_Driver
Специальное сообщение трассировки драйвера
Fx2_Driver
Пример KMDF: директива RUN_WPP для образца
драйвера Osrusbfx2
Подключение TMH-файла
Пример UMDF: подключение TMH-файла
Пример KMDF: подключение TMH-файла
Определение контрольного GUID и флагов
Пример UMDF: определение контрольного GUID и
флагов
Пример KMDF: определение WPP_CONTROL_GUIDS и
флагов
Инициализация и очистка трассировки
Инициализация трассировки
Очистка после трассировки
Оснащение кода драйвера
Пример UMDF: добавление вызовов функций
сообщений трассировки в код драйвера
Пример KMDF: добавление вызовов функций
сообщений трассировки в код драйвера
Инструменты для программной трассировки
Проведение сеанса программной трассировки
Подготовка драйвера
Просмотр журнала трассировки драйвера утилитой
TraceView
Создание и просмотр файла журнала трассировки
Просмотр журнала трассировки в режиме реального
времени
Просмотр инфраструктурного журнала трассировки
с помощью базовых инструментов трассировки
Практические рекомендации: думайте о
диагностике
Глава 12. Вспомогательные объекты WDF
Выделение памяти
Локальное хранилище
Объекты памяти и буферы ввода/вывода
Объекты памяти UMDF и их интерфейсы
Объекты памяти KMDF и их методы
Обращение к реестру
Хранилище свойств устройства UMDF
Объекты реестра KMDF и их методы
Общие объекты
Пример UMDF: создание общего объекта
Пример KMDF: создание общего объекта
Объекты коллекции KMDF
Методы коллекции
Пример: создание и использование коллекции
Объекты таймера KMDF
Методы объекта таймера
Временные интервалы
Функция обратного вызова EvtTimerFunc
Пример: использование объекта таймера
Поддержка интерфейса WMI в драйвере KMDF
Работа с WMI
Требования для поддержки WMI
Инициализация поддержки WMI
Ресурс MOF
Объект поставщика WMI
Объекты экземпляра WMI
Функции обратного вызова для событий
экземпляра WMI
Пример: запрос данных у экземпляра WMI
Пример: организация экземпляра WMI
Пример: организация элемента данных WMI
Глава 13. Шаблон UMDF-драйвера
Описание образца драйвера Skeleton
Образец драйвера Skeleton
Файлы образца драйвера Skeleton
Исходные файлы
Файлы поддержки компоновки
Файлы для поддержки инсталляции
Модификация файлов образца драйвера Skeleton
под собственные требования
Инфраструктура DLL
Функция DllMain
Функция DllGetClassObject
Базовая поддержка технологии COM
Класс CUnknown
Класс CClassFactory
Объект обратного вызова для образца драйвера
Skeleton
Метод CreateInstance
Интерфейс IUnknown
Интерфейс IDriverEntry
Необязательные интерфейсы
Объект обратного вызова устройства в образце
драйвера Skeleton
Вспомогательные методы для объекта обратного
вызова устройства
Модификация вспомогательных файлов образца
драйвера Skeleton
Файл Sources
Файлы Make
Файл Exports
Файл версии ресурсов
Файл INX
Часть IV. Смотрим глубже - больше о драйверах
WDF
Глава 14. За пределами инфраструктур
Использование системных сервисов, не входящих в
состав инфраструктур
Использование функций Windows API в драйверах
UMDF
Для драйверов UMDF, исполняющихся на Windows
XP
Применение вспомогательных процедур режима
ядра в драйверах KMDF
Обработка запросов, не поддерживаемых
инфраструктурами
Обработка по умолчанию неподдерживаемых
запросов
Обработка неподдерживаемых запросов в
драйверах KMDF
Пример: организация функции обратного вызова
предварительной обработки EvtDriverDeviceAdd
Пример: обработка в функции обратного вызова
EvtDeviceWdmPreprocessIrp
Глава 15. Планирование, контекст потока и уровни
IRQL
Потоки
Планирование потоков
Определение контекста потока
Контекст потока драйверных функций KMDF
Уровни IRQL
Уровни IRQL, специфичные для процессора и
потока
Уровень IRQL PASSIVE_LEVEL
Уровень IRQL PASSIVE_LEVEL в критической
области
Уровень IRQL APC_LEVEL
Уровень IRQL DISPATCH_LEVEL
Уровень IRQL DIRQL
Уровень IRQL HIGH_LEVEL
Рекомендации по исполнению на уровне IRQL
DISPATCH_LEVEL или высшем
Вызовы функций, исполняющихся на низких
уровнях IRQL
Сценарии прерывания потоков
Прерывание потока на однопроцессорной системе
Прерывание потока на многопроцессорной системе
Тестирование на наличие проблем, связанных с
IRQL
Способы получения текущего уровня IRQL
Макросы PAGED_CODE и PAGED_CODE_LOCKED
Опции инструмента Driver Verifier
Рабочие элементы и драйверные потоки
Рабочие элементы
Пример KMDF: применение рабочего элемента
Оптимальные методики для управления
контекстом потока и IRQL в драйверах KMDF
Глава 16. Аппаратные ресурсы и прерывания
Аппаратные ресурсы
Идентификация и освобождение аппаратных
ресурсов
Идентификация ресурсов: подготовка аппаратного
обеспечения
Освобождение аппаратного обеспечения
Списки ресурсов
Анализ аппаратных ресурсов драйвером
Платформенная независимость и отображение
ресурсов драйвера
Пример: отображение ресурсов
Пример: отмена отображения ресурсов
Прерывания и их обработка
Объекты прерывания
Структура конфигурации объекта прерывания
Разрешение и запрещение прерываний
Обработка после разрешения и до запрещения
прерываний
Процедуры обслуживания прерываний
Отложенная обработка прерываний
Синхронизация обработки на уровне DIRQL
Глава 17. Прямой доступ к памяти
Базовые понятия и терминология DMA
Транзакции DMA и передачи DMA
Пакетный DMA и DMA с применением общего
буфера
Устройства DMA пакетной конструкции
Устройства DMA с применением общего буфера
Устройства DMA гибридной конструкции
Поддержка метода "разбиение/объединение"
Информация об устройстве, специфичная для DMA
Информация об устройстве и конструкция
драйверов DMA
Тип конструкции DMA
Возможности адресации устройства
Аппаратная поддержка метода
"разбиение/объединение"
Максимальный объем данных передачи
Требуемое выравнивание буфера
Факторы, не принимающиеся к рассмотрению
Абстракция DMA в Windows
Операции DMA и кэш процессора
Завершение передач DMA сбросом кэшей
Регистры отображения
Концепция
Реализация
Когда применять регистры отображения
Поддержка системного механизма
"разбиение/объединение"
Концепция
Реализация
Передача DMA по любому адресу физической
памяти
Концепция
Реализация
Реализация драйверов DMA
Инициализации драйвера DMA
Объект выключателя DMA
Объект общего буфера
Объект транзакции DMA
Пример: инициализации драйвера DMA
Инициирование транзакции
Инициализация транзакции
Исполнение транзакции
Пример: инициирование транзакции
Обработка запроса
Определение функции EvtProgramDma
Задачи, выполняемые функцией EvtProgramDma
Пример: обработка запроса
Обработка завершения DMA
Завершение передачи, транзакции и запроса
Пример: обработка завершения DMA
Тестирование драйверов DMA
Верификация, специфичная для DMA
Расширение отладчика !dma
Расширения отладчика KMDF для DMA
Рекомендации к разработке драйверов DMA
Глава 18. Введение в COM
Прежде чем приступить
Структура драйвера UMDF
Краткий обзор COM
Содержимое объекта COM
Объекты и интерфейсы
Интерфейс IUnknown
Подсчет ссылок
Рекомендации по использованию методов AddRef и
Release
Подсчет ссылок
Использование указателей интерфейса в качестве
параметров
Вызовы метода Release
Исправление ошибок со счетчиком ссылок
Идентификаторы GUID
Таблица VTables
HRESULT
Свойства и события
Библиотека ATL
Файлы IDL
Использование объектов COM UMDF
Использование объекта COM
Получение интерфейса через метод обратного
вызова
Получение интерфейса через создание объекта
UMDF
Получение интерфейса через вызов метода
QueryInterface
Управление временем жизни объекта COM
Реализация инфраструктуры DLL
Функция DllMain
Функция DllGetClassObject
Фабрика классов
Реализация фабрики классов
Объекты, не требующие фабрики классов
Реализация объектов обратного вызова UMDF
Реализация класса для объекта COM
Реализация интерфейса IUnknown
Методы AddRef и Release
Функция QueryInterface
Реализация объектов обратного вызова UMDF
Часть V. Создание, установка и тестирование
драйверов WDF
Глава 19. Сборка драйверов WDF
Общие положения по сборке драйверов
Драйверы UMDF: обстоятельства, учитывающиеся
при сборке
Драйверы KMDF: обстоятельства, учитывающиеся
при сборке
Введение в сборку драйверов
Среда сборки
Вспомогательные файлы утилиты Build
Обязательные файлы
Необязательные файлы
Ограничения на файлы проекта
Сборка проекта
Широко употребляемые флаги утилиты Build
Распространенные выходные файлы, создаваемые
утилитой Build
Полезные советы для UMDF
Пример UMDF: сборка образца драйвера Fx2_Driver
Файл Sources для драйвера Fx2_Driver
Макросы файла Sources для драйвера Fx2_Driver
Номера версии UMDF
Стандартные выходные файлы
Специальные выходные файлы
Исходные файлы, заголовки и библиотеки
Конфигурация сборки
Файлы Makefile и Makefile.inc для драйвера
Fx2_Driver
Сборка драйвера Fx2_Driver
Пример KMDF: сборка образца драйвера Osrusbfx2
Файл Sources для драйвера Osrusbfx2
Макросы файла Sources для драйвера Osrusbfx2
Номер версии KMDF
Стандартные выходные файлы
Специальные выходные файлы
Исходные файлы, заголовки и библиотеки
Конфигурация сборки
Файлы Makefile и Makefile.inc для драйвера
Osrusbfx2
Сборка драйвера Osrusbfx2
Глава 20. Установка драйверов WDF
Основы установки драйверов
Ключевые задачи по установке драйверов
Инструменты и методы установки
Аспекты, принимаемые во внимание при установке
драйверов WDF
Управление версиями WDF и установка драйверов
Обновления дополнительных версий
Обновления основных версий
Распространение инфраструктуры
Привязка драйверов к инфраструктуре
Драйверы KMDF
Драйверы UMDF
Пакеты соинсталляторов WDF
Пакет соинсталлятора UMDF
Пакет соинсталлятора KMDF
Компоненты драйверного пакета WDF
Создания INF-файла для драйверного пакета WDF
Широко применяемые разделы INF-файла
Инструменты для работы с INF-файлами
Файлы INF для разных процессорных архитектур
Файлы INF драйверов WDF: разделы
соинсталляторов
Примеры INF-файлов WDF
Пример UMDF: INF-файл драйвера Fx2_Driver
Пример KMDF: INF-файл драйвера Osrusbfx2
Подписывание и распространение драйверного
пакета
Подписанные файлы каталогов
Указание файла каталогов в INF-файле
Подписывание драйверов BSD
Распространение драйверного пакета
Установка драйверов
Факторы, принимаемые во внимание для тестовых
установок
Факторы, принимаемые во внимание для
эксплутационных установок
Установка драйверов с помощью менеджера PnP
Установка драйверов с помощью SPInst или
DIFxApp
Установка драйверов с помощью
специализированного установочного приложения
Установка и обновление драйверов с помощью
инструмента DevCon
Обновление драйверов с помощью Диспетчера
устройств
Удаление драйверов
Процесс установки драйверов
Этап 1. Установка требуемой инфраструктуры WDF
(если необходимо)
Этап 2. Создание узла devnode для устройства
Этап 3. Развертывание драйверного пакета в
хранилище драйверов
Этап 4. Установка драйвера
Действия по удалению драйвера
Удаление устройства
Удаление драйверного пакета из хранилища
драйверов
Удаление двоичных файлов драйвера
Инструменты для удаления устройств и драйверов
Поиск и удаление проблем с установкой драйверов
WDF
Поиск и исправление ошибок установки с помощью
отладчика WinDbg
Журналы регистрации ошибок установки
драйверов
Распространенные ошибки при установке
драйверов WDF
Фатальные ошибки при установке
Коды ошибок менеджера PnP
Глава 21. Инструменты для тестирования
драйверов WDF
Начало работы по тестированию драйверов
Выбор тестовой системы
Обзор инструментов для тестирования драйверов
WDF
Методы трассировки для тестирования драйверов
Инструменты PREfast и SDV
Другие инструменты для тестирования драйверов
Инструмент INF File Syntax Checker (ChkINF)
Инструмент Device Console
Инструмент Device Path Exerciser
Инструменты Kern Rate и Kern Rate Viewer
Инструмент Plug and Play Driver Test
Инструмент Plug and Play CPU Test
Инструмент Memory Pool Monitor
Инструмент Power Management Test Tool
Инфраструктура WDTF
Инструмент Driver Verifier
Когда использовать Driver Verifier
Как работает Driver Verifier
Как работать с Driver Verifier
Использование утилиты Verifier из командной
строки
Запуск Driver Verifier Manager
Примеры работы с Driver Verifier
Пример 1: активирование стандартных опций для
нескольких драйверов
Пример 2: активирование специальных опций для
всех драйверов
Пример 3: запуск и остановка проверки драйвера
без перезагрузки
Пример 4: активирование или деактивирование
опций без перезагрузки
Пример 5: деактивирование всех опций Driver
Verifier
Пример 6: деактивирование Driver Verifier
Пример 7: эмуляция недостаточных ресурсов
Пример 8: принудительная проверка уровня IRQL
(Force IRQL Checking)
Использование информации от Driver Verifier при
отладке
Пример 1: просмотр трассировок операций стека с
помощью !verifier
Пример 2: использование !verifier для вывода
счетчиков ошибок и выделений памяти из пула
Инструмент KMDF Verifier
Когда использовать KMDF Verifier
Как работает KMDF Verifier
Как активировать KMDF Verifier
Использование информации от KMDF Verifier при
отладке
Верификатор UMDF Verifier
Остановы bugcheck UMDF
Извещение об ошибках UMDF
Верификатор Application Verifier
Как работает Application Verifier
Использование Application Verifier для верификации
драйверов UMDF
Оптимальные методики для тестирования
драйверов WDF
Советы по сборке драйверов
Советы по использованию инструментов
наилучшим образом
Советы для тестирования драйвера на протяжении
его жизненного цикла
Глава 22. Отладка драйверов WDF
Обзор инструментов отладки для WDF
Отладчик WinDbg
Прочие инструменты
Трассировка WPP
Отладка макросов и процедур
Основы отладчика WinDbg
Проверочные и свободные версии сборок
Пользовательский интерфейс
Команды отладчика
Символы и исходный код
Расширения отладчика
Подготовка к отладке драйверов UMDF
Как разрешить отладку кода загрузки и запуска
драйвера
Как начать отладку кода загрузки и запуска
драйвера UMDF
Отладка исполняющегося драйвера UMDF
Отслеживание объектов UMDF и подсчет ссылок
Отладка фатального сбоя драйвера UMDF
Подготовка к отладке драйверов KMDF
Как активировать отладку режима ядра на
тестовом компьютере
Как активировать отладку режима ядра для
Windows Vista
Как активировать отладку режима ядра для более
ранних, чем Windows Vista, версий Windows
Подготовка тестового компьютера к отладке
драйверов KMDF
Как начать сеанс отладки KMDF
Как начать отладку фатального сбоя драйвера
KMDF
Пошаговый разбор отладки драйверов UMDF на
примере образца драйвера Fx2_Driver
Подготовка к сеансу отладки драйвера Fx2_Driver
Начало сеанса отладки для драйвера Fx2_Driver
Анализ процедуры обратного вызова OnDeviceAdd
для драйвера Fx2_Driver
Исследование с помощью расширений отладчика
UMDF объекта обратного вызова устройства
Исследование с помощью расширений отладчика
UMDF запроса ввода/вывода
Пошаговый разбор отладки драйверов KMDF на
примере образца драйвера Osrusbfx2
Подготовка к сеансу отладки драйвера Osrusbfx2
Начало сеанса отладки для драйвера Osrusbfx2
Анализ процедуры обратного вызова
EvtDriverDeviceAdd
Исследование объекта устройства с помощью
расширений отладчика KMDF
Исследование запроса ввода/вывода с помощью
расширений отладчика UMDF запроса
ввода/вывода
Просмотр сообщения трассировки с помощью
WinDbg
Просмотр журнала KMDF с помощью WinDbg
Получение информации протоколирования после
останова bugcheck
Управление содержимым журнала KMDF
Дополнительные предложения для
экспериментирования с WinDbg
Глава 23. Инструмент PREfast for Drivers
Введение в PREfast
PREfast и инструмент Code Analysis для Visual Studio
Как работает PREfast
Какие ошибки может выявлять PREfast
Использование PREfast
Задание режима анализа для PREfast
Как запустить PREfast
Сборка примеров PREfast
Вывод на экран результатов анализа PREfast
Утилита просмотра журнала дефектов,
обнаруженных PREfast
Полезные советы для фильтрации результатов
PREfast
Вывод журнала дефектов PREfast в текстовом виде
Примеры результатов анализа PREfast
Пример 1: неинициализированные переменные и
нулевые указатели
Пример 2: неявный порядок вычислений
Пример 3: вызов функции на неправильном уровне
IRQL
Пример 4: действительная ошибка, но указанная в
неправильном месте
Пример 5: несоответствие класса типа функции
Пример 6: неправильный перечислимый тип
Практики кодирования, улучшающие результаты
анализа PREfast
Предупреждения, указывающие распространенные
причины шума и как на них реагировать
Воздействие вставленного кода ассемблера на
результаты анализов PREfast
Использование директивы pragma warning для
подавления шума
Использование аннотаций для устранения шума
Использование аннотаций
Как аннотации улучшают результаты PREfast
Аннотации расширяют прототипы функций
Аннотации описывают контракт между
вызываемой функцией и вызывающим ее клиентом
Аннотации помогают усовершенствовать
конструкцию функции
Куда вставлять аннотации в коде
Аннотирование функций и параметров функций
Аннотации для объявлений typedef
Аннотации к объявлениям typedef функций
Советы по размещению аннотаций в исходном коде
Аннотации общего назначения
Аннотирование входных и выходных параметров
Контракт аннотаций _in и _out
Аннотации _in, _out и _inout и макросы IN, OUT и
INOUT
Модификаторы аннотаций
Модификатор _opt
Модификатор _deref
Аннотации размера буфера
Аннотации буфера неизменяемого размера
Сводка аннотаций для буферов
Полезные советы по аннотированию буферов
Примеры аннотаций буфера
Аннотации строк
Аннотация _nullterminated
Аннотация _nullnullterminated
Аннотация _possibly_notnullterminated
Зарезервированные параметры
Возвращаемые функциями значения
Аннотации для драйверов
Базовые аннотации и соглашения по их применению
Списки аннотаций для драйверов
Вложенные аннотации
Условные аннотации
Примеры вложенных условных аннотаций
Грамматика условных выражений
Аннотации результатов функций
Аннотации для сопоставления типов
Аннотации указателей
Аннотации для постоянных и переменных
параметров
Аннотации форматирующих строк
Диагностические аннотации
Аннотации для предпочтительных функций
Аннотации для сообщений об ошибках
Аннотации для функций в операторах _try
Аннотации для памяти
Аннотации для выделения и освобождения памяти
Аннотации для совмещенных имен памяти
Аннотации для ресурсов иных, чем память
Аннотации для получения и освобождения
ресурсов, иных, чем память
Аннотации для глобальных ресурсов, иных, чем
память
Аннотации для критической области и
спин-блокировки отмены
Составные аннотации для ресурсов
Аннотации класса типа функций
Аннотации для идентифицирования класса типа
функции
Аннотации для проверки класса типа функции в
условном выражении
Аннотации для плавающей запятой
Аннотации для уровней IRQL
Аннотации для указания максимального и
минимального уровня IRQL
Аннотации для явного указания уровня IRQL
Аннотации для повышения и понижения уровня
IRQL
Аннотации для сохранения и восстановления
уровня IRQL
Аннотации для удерживания постоянного уровня
IRQL
Аннотации для сохранения и восстановления
уровня IRQL для процедур отмены ввода/вывода
Примеры аннотаций IRQL
Полезные советы по применению аннотаций IRQL
Аннотация DO_DEVICE_INITIALIZING
Аннотации для операндов с взаимоблокировкой
Примеры аннотированных системных функций
Составление и отладка аннотаций
Образцы контрольных примеров для аннотаций
Полезные советы для написания контрольных
примеров для аннотаций
Оптимальные методики работы с PREfast
Оптимальные методики для PREfast
Оптимальные методики для использования
аннотаций
Пример: аннотированный заголовочный файл
Osrusbfx2.h
Глава 24. Инструмент Static Driver Verifier
Введение в SDV
Принцип работы SDV
Правила SDV
Как SDV применяет правила к коду драйвера
А что внутри? Принцип работы движка
верификации SDV
Абстракция
Поиск и проверка достоверности
Усовершенствование
Как аннотировать исходный код драйверов KMDF
для SDV
Объявления типов ролей функций для драйверов
KMDF
Пример: использование типов ролей функций в
образцах драйверов
Использование SDV
Как подготовить файлы и выбрать правила для
SDV
Подготовка к использованию SDV
Очистка каталога sources драйвера
Обработка библиотек, используемых драйвером
Как отсканировать исходный код для создания
файла Sdv-map.h
Выполнение верификации
Экспериментирование с SDV
Просмотр отчетов SDV
Утилита Defect Viewer
Оптимальная методика: проверяйте результаты
SDV
Правила KMDF для SDV
Правила последовательности функций DDI для
KMDF
Правила инициализации устройств для KMDF
Правила очистки устройства управления для KMDF
Правила завершения запроса для KMDF
Правила отмены запроса для KMDF
Правила для буферов, списков MDL и памяти
запросов
Правила для буферов запросов
Правила для запросов обращения к спискам MDL
Правила для запросов обращения к памяти
Правила DDI для владельцев политики
энергопотребления
Пример: пошаговый анализ драйвера Fail_Driver3 с
помощью SDV
Подготовка к верификации драйвера Fail_Driver3
Сборка библиотеки драйвера Fail_Driver3 с
помощью SDV
Создание файла Sdv-map.h для драйвера
Fail_Driver3
Выполнение верификации драйвера Fail_Driver3
Просмотр результатов верификации драйвера
Fail_Driver3
Ознакомление с нарушенными правилами
Пошаговый просмотр трассировки нарушения
правила в драйвере Fail_Driver3
Типы ролей функций обратного вызова KMDF для
SDV
Словарь
Предметный указатель


Об авторе


Отзывы

Перевод, местами, просто ставит в тупик  [16 December 2011]
Собственно в заголовке сказано всё. В такую тему надо вникать. Переводчику в первую очередь. На днях взял книгу почитать, просмотреть перед покупкой. Охота покупать, практически, отпала. Хорошо, что на сайте майкрософт есть англо-версия -- можно свериться. Но, тогда, какой толк от книги на русском языке?.. Книги на такие темы надо перепроверять, рецензировать специалистами в данной теме.
Согласна, что плохо перевели! Согласна!  [10 August 2009]
Но вот сама-то книга хорошая!
Я хотела ее переводить. Но мне - не дали.
Впрочем, если не нравится перевод - (а мне тоже не нравится) - читайте оригинал!
Читайте и наслаждайтесь!
Плохой перевод  [20 March 2009]
Прочитал первые три десятка страниц, больше не могу:( Качество перевода низкое, что сильно затрудняет восприятие информации, похоже на машинный перевод, доработанный напильником, переводчик далек от темы книги, что заметно по нескольким очевидным ляпам и корявым определениям. Возможно дальше качество перевода улучшится, но желания продолжать чтение нет.

Последние поступления в рубрике "Аппаратное обеспечение в целом"



Цифровая схемотехника и архитектура компьютера Цифровая схемотехника и архитектура компьютера Харрис С., Харрис Д.

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

Teach Yourself VISUALLY Raspberry Pi Wentk R.

Teach Yourself VISUALLY Are you a visual learner? Do you prefer instructions that show you how to do something and skip the long??“winded explanations? If so, then this book is for you. Open it up and you ll find clear, step??“by??“step screen s...

BeagleBone For Dummies Perestrelo L., Santos R.

Learn to: Connect the BeagleBone and install the Linux® OS Explore the Cloud 9 IDE and learn simple programming with BoneScript and Python® Create electronics projects connected to the BeagleBone GPIO Set up a home automation web server...

Если Вы задавались вопросами "где найти книгу в интернете?", "где купить книгу?" и "в каком книжном интернет-магазине нужная книга стоит дешевле?", то наш сайт именно для Вас. На сайте книжной поисковой системы Книгопоиск Вы можете узнать наличие книги Орвик П., Смит Г., Windows Driver Foundation. Разработка драйверов в интернет-магазинах. Также Вы можете перейти на страницу понравившегося интернет-магазина и купить книгу на сайте магазина. Учтите, что стоимость товара и его наличие в нашей поисковой системе и на сайте интернет-магазина книг может отличаться, в виду задержки обновления информации.