Windows Driver Foundation: разработка драйверов Windows Driver Foundation: разработка драйверов Книга содержит описания принципов и методик, примеры программирования и подсказки для эффективной разработки драйверов. Представлены инструменты и ресурсы, основные понятия драйверов и операционной системы Windows, обзор модели Windows Driver Foundation (WDF), информация об архитектуре Windows, модели ввода/вывода. Приводятся три основные составляющие модели WDF: инфраструктура драйвера пользовательского режима, инфраструктура драйвера режима ядра и набор инструментов тестирования и верификации, а также шаблоны и рекомендации по выбору. Подробно рассматриваются различия между пользовательским режимом и режимом ядра. BHV 978-5-9775-0185-9
777 руб.
Russian
Каталог товаров

Windows Driver Foundation: разработка драйверов

  • Автор: Гай Смит, Пенни Орвик
  • Мягкий переплет. Крепление скрепкой или клеем
  • Издательство: BHV
  • Год выпуска: 2008
  • Кол. страниц: 880
  • ISBN: 978-5-9775-0185-9
Временно отсутствует
?
  • Описание
  • Характеристики
  • Отзывы о товаре
  • Отзывы ReadRate
Книга содержит описания принципов и методик, примеры программирования и подсказки для эффективной разработки драйверов. Представлены инструменты и ресурсы, основные понятия драйверов и операционной системы Windows, обзор модели Windows Driver Foundation (WDF), информация об архитектуре Windows, модели ввода/вывода. Приводятся три основные составляющие модели WDF: инфраструктура драйвера пользовательского режима, инфраструктура драйвера режима ядра и набор инструментов тестирования и верификации, а также шаблоны и рекомендации по выбору. Подробно рассматриваются различия между пользовательским режимом и режимом ядра.
Отрывок из книги «Windows Driver Foundation: разработка драйверов»
ГЛАВА 8

Поток и диспетчеризация ввода/вывода

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

Оставить заявку на описание
?
Содержание
Об авторах 1
Предисловие 3
Благодарности 7
Часть I. Начало работы с моделью WDF 11
Глава 1. Введение в WDF 13
Об этой книге 14
Кому адресована эта книга 14
Часть I. Начало работы с моделью WDF 15
Часть II. Изучение инфраструктур 15
Часть III. Применение основ WDF 16
Часть IV. Смотрим глубже — больше о драйверах WDF 18
Часть V. Создание, установка и тестирование драйверов WDF 18
Словарь 19
Условные обозначения 19
Приступая к разработке драйверов 21
Системные требования для разработки драйверов 21
Как приобрести и установить набор WDK 22
Библиотеки WDK 24
Документация WDK 24
Инструменты WDK 25
Образцы WDK 26
Образцы UMDF 26
Образцы KMDF 27
Как приобрести проверочные версии Windows 27
Как приобрести отладочные инструменты 28
Как приобрести устройства обучения OSR 29
Основные источники информации 30
Основные ссылки 32
Глава 2. Основы драйверов под Windows 33
Что такое драйвер? 34
Базовая архитектура Windows 35
Архитектура драйвера 37
Объекты устройств и стек устройства 37
Дерево устройств 39
Объекты и структуры данных ядра 40
Модель ввода/вывода Windows 41
Запросы ввода/вывода 42
Обработка прерываний стеком устройства 42
Буферы данных и типы передачи ввода/вывода 43
Передача и получение данных от устройства 44
Plug and Play и управление энергопотреблением 45
Основы программирования в режиме ядра 45
Прерывания и уровни IRQL 46
Параллелизм и синхронизация 48
Потоки 48
Синхронизация 49
Состояние гонок и взаимоблокировки 50
Память 51
Управление памятью 51
Пулы памяти 52
Стек ядра 52
Списки MDL 53
Советы по программированию в режиме ядра 53
Выделение памяти 53
Использование спин-блокировок 54
Управление ошибками страниц 54
Обращение к памяти пользовательского режима 54
Блокирование потоков 55
Верификация драйверов 55
Использование макросов 55
Основные термины 56
Глава 3. Основы WDF 60
WDF и WDM 60
Что такое WDF? 61
Объектная модель WDF 62
Программный интерфейс 63
Иерархия объектов 63
Параллелизм и синхронизация 64
Модель ввода/вывода 64
Отмена запросов ввода/вывода 65
Исполнители ввода/вывода 65
Обработка некритических ошибок 66
Извещение об ошибках UMDF 67
Извещение об ошибках KMDF 67
Plug and Play и управление энергопотреблением 67
Критерии конструкции WDF для Plug and Play и управления энергопотреблением 68
Безопасность 69
Стандартные безопасные установки 70
Проверка достоверности параметров 70
Поддержка верификации, трассировки и отладки 70
Обслуживаемость и управление версиями 71
Часть II. Изучение инфраструктур 73
Глава 4. Обзор драйверных инфраструктур 75
Обзор драйверных инфраструктур 75
Обзор инфраструктуры UMDF 76
Объекты инфраструктуры UMDF 77
Объекты обратного вызова инфраструктуры UMDF 78
Обзор инфраструктуры KMDF 78
Объекты KMDF 79
Функции обратного вызова инфраструктуры KMDF 80
Архитектура WDF 80
Инфраструктура UMDF 83
Компоненты инфраструктуры UMDF 84
Критические ошибки в драйверах UMDF 86
Типичный запрос ввода/вывода UMDF 87
Инфраструктура KMDF 88
Компоненты инфраструктуры KMDF 88
Критические ошибки в драйверах KMDF 90
Типичный запрос ввода/вывода KMDF 90
Поддержка устройств и драйверов в WDF 91
Устройства, поддерживаемые UMDF 91
Достоинства драйверов UMDF 92
Недостатки драйверов UMDF 93
Устройства, поддерживаемые KMDF 94
Как выбрать правильную инфраструктуру 94
Глава 5. Объектная модель WDF 96
Обзор объектной модели 96
Методы, свойства и события 97
Обратные вызовы по событию 98
Атрибуты объектов 98
Иерархия и время жизни объектов 99
Контекст объекта 99
Реализация объектной модели UMDF 100
Соглашение об именах UMDF 100
Объекты и интерфейсы инфраструктуры UMDF 101
Объекты обратного вызова и интерфейсы драйвера UMDF 103
Пример UMDF: объекты и интерфейсы обратных вызовов 105
Реализация объектной модели KMDF 106
Типы объектов KMDF 107
Соглашение об именах KMDF 109
Создание объектов 110
Создание объектов UMDF 110
Создание объектов KMDF 111
Структура конфигурации объекта KMDF 111
Структура атрибутов объекта KMDF 112
Методы создания объектов KMDF 113
Иерархия и время жизни объектов 114
Удаление, ликвидация, очистка и уничтожение 115
Иерархия объектов UMDF 116
Иерархия объектов KMDF 117
Удаление объектов 118
Обратные вызовы очистки ресурсов 121
Обратные вызовы деструкции 121
Удаление объектов UMDF 122
Удаление объектов KMDF 122
Исключение: завершенные запросы ввода/вывода 124
Область контекста объекта 125
Данные контекста объекта UMDF 126
Информация контекста UMDF в членах данных объекта обратного вызова 127
Область контекста UMDF для объекта инфраструктуры 128
Область контекста объекта KMDF 129
Объявления типа области контекста KMDF 130
Инициализация полей контекста в структуре атрибутов объекта 130
Назначение области контекста KMDF объекту 131
Глава 6. Структура драйвера и его инициализация 132
Обязательные компоненты драйвера 132
Структура драйверов UMDF и требования к ним 133
Структура драйверов KMDF и требования к ним 136
Объект драйвера 138
Создание объекта обратного вызова для драйвера UMDF 138
Создание объекта драйвера KMDF 140
Объекты устройств 142
Типы объектов устройств 142
Драйверы фильтра и объекты устройств фильтра 143
Функциональные драйверы и объекты функциональных устройств 144
Драйверы шины и объекты физических устройств (KMDF) 144
Драйверы унаследованных устройств и объекты устройств управления (KMDF) 146
Драйверы WDF, типы драйверов и типы объектов устройств 147
Свойства устройств 147
Инициализирование объекта устройства 149
Объекты очередей и другие вспомогательные объекты 149
Интерфейсы устройств 150
Интерфейсы устройств и символьные ссылки 151
Создание и инициализирование объекта устройства UMDF 151
Создание объекта обратного вызова устройства 152
Создание и инициализирование инфраструктурного объекта устройства 152
Пример UMDF: интерфейс устройства 154
Создание и инициализирование объекта устройства KMDF 155
Структура инициализации устройства KMDF 155
Инициализация KMDF объектов FDO 156
Инициализация KMDF объектов FiDO 156
Область контекста объекта устройства 157
Создание объектов устройств KMDF 157
Дополнительные задачи, выполняемые функцией EvtDriverDeviceAdd 158
Пример KMDF: функция обратного вызова EvtDriverDeviceAdd 158
Перечисление дочерних устройств (только PDO-объекты KMDF) 160
Статическое и динамическое перечисление в драйверах шины 160
Динамическое перечисление 160
Статическое перечисление 161
Инициализация объектов PDO 161
Способы именования устройства для драйверов KMDF 162
Именованные объекты устройств 162
Дескрипторы безопасности 163
Часть III. Применение основ WDF 165
Глава 7. Plug and Play и управление энергопотреблением 167
Введение в Plug and Play и управление энергопотреблением 168
О механизме Plug and Play 169
О состояниях энергопотребления 170
Политика энергопотребления 172
Plug and Play и управление энергопотреблением в WDF 173
Стандартные настройки Plug and Play и управления энергопотреблением 173
Очереди ввода/вывода и управление энергопотреблением 174
Обратные вызовы функций для событий Plug and Play и управления энергопотреблением 174
Поддержка бездействия и пробуждения (только для KMDF) 176
Энергостраничные и неэнергостраничные драйверы 177
Порядок обратных вызовов функций для событий Plug and Play и управление энергопотреблением 179
Перечисление и запуск устройств 183
Отключение питания и удаление устройства 186
Неожиданное извлечение 190
Последовательность действий при неожиданном удалении для драйверов UMDF 190
Последовательность действий при неожиданном удалении устройства для драйверов KMDF 191
Реализация Plug and Play и управления энергопотреблением в драйверах WDF 192
Чисто программные драйверы Plug and Play и управление энергопотреблением 193
Пример UMDF: чисто программный драйвер фильтра для Plug and Play 194
Пример KMDF: чисто программный драйвер фильтра для Plug and Play 195
Действия инфраструктуры для чисто программных драйверов 197
Plug and Play и управление энергопотреблением в простых аппаратных драйверах 197
Инициализация и деинициализация устройства при включении и выключении 198
Управление энергопотреблением очередей в аппаратных функциональных драйверах 199
Пример UMDF: код для Plug and Play и управления энергопотреблением в протокольном функциональном драйвере 200
Управляемая энергопотреблением очередь для драйвера UMDF 201
Методы интерфейса IPnpCallbackHardware 201
Методы интерфейса IPnpCallback 203
Пример KMDF: код для Plug and Play и управления энергопотреблением в простом аппаратном функциональном драйвере 204
Пример KMDF: регистрация обратных вызовов и организация управляемых энергопотреблением очередей 205
Пример KMDF: обратные вызовы для входа и выхода из состояния D0 207
Действия инфраструктуры для простого аппаратного функционального драйвера 208
KMDF, устройства хранение и гибернация 210
Продвинутые возможности управления энергопотреблением для драйверов KMDF 210
Поддержка бездействия устройства в режиме низкого энергопотребления для драйверов KMDF 210
Настройки и управление бездействием в драйверах KMDF 211
Выбор периода простоя и состояний пониженного энергопотребления в драйверах KMDF 214
Поддержка пробуждения устройства для драйверов KMDF 215
Реализация пробуждения из состояния Sx в драйверах KMDF 217
Реализация пробуждения из состояния S0 в драйверах KMDF 219
Пример KMDF: поддержка бездействия и пробуждения устройств 220
Действия инфраструктуры для поддержки бездействия устройства 223
Действия инфраструктуры, поддерживающие пробуждение устройства 223
Глава 8. Поток и диспетчеризация ввода/вывода 226
Основные типы запросов ввода/вывода 227
Запросы на создание 227
Запросы на очистку и закрытие 227
Запросы на чтение и запись 228
Запросы управления вводом/выводом устройства 228
Обзор типов запросов ввода/вывода 230
Типы передач ввода/вывода 230
Буферизованный ввод/вывод 232
Прямой ввод/вывод 232
Ввод/вывод типа METHOD_NEITHER 232
Тип ввода/вывода METHOD_NEITHER в UMDF 232
Тип ввода/вывода METHOD_NEITHER в KMDF 233
Поток запросов ввода/вывода 234
Путь запроса ввода/вывода через стек устройств UMDF 235
Путь запросов ввода/вывода сквозь драйвер KMDF 237
Обработка завершения запросов ввода/вывода 239
Обработка завершения запросов ввода/вывода UMDF 239
Обработка завершения запросов ввода/вывода KMDF 239
Обработка завершения запросов ввода/вывода в Windows 240
Поток запросов ввода/вывода в инфраструктурах 240
Предварительная обработка пакетов IRP 242
Маршрутизация пакетов IRP к внутреннему обработчику запросов 242
Ход операций в обработчике запросов ввода/вывода 242
Проверка достоверности параметров 243
Обработка запросов в обработчике ввода/вывода 243
Объекты запросов ввода/вывода 244
Буферы ввода/вывода и объекты памяти 245
Извлечение буферов в драйверах UMDF 246
Извлечение буферов в драйверах KMDF 247
Время жизни запросов, памяти и указателей на буферы 253
Очереди ввода/вывода 253
Конфигурация очереди и типы запросов 254
Указание типа запроса для очереди 255
Обратные вызовы для очереди 255
Стандартные очереди 256
Очереди и управление энергопотреблением 257
Управляемые энергопотреблением очереди 257
Неуправляемые энергопотреблением очереди 259
Тип диспетчеризации 259
Управление очередью 260
Пример UMDF: создание очередей ввода/вывода 261
Стандартная очередь UMDF 262
Нестандартные очереди UMDF 263
Очереди UMDF с ручной диспетчеризацией 264
Пример KMDF: создание очередей ввода/вывода 265
Стандартная очередь KMDF 266
Нестандартная очередь KMDF 266
Извлечение запросов из очереди с ручной диспетчеризацией 267
Функции обратного вызова по событию 271
Объект файла для ввода/вывода 271
Автоматическая пересылка запросов на создание, очистку и закрытие 272
Обратные вызовы по событиям ввода/вывода для запросов на создание 273
Обработка запросов на создание в драйверах UMDF 274
Имперсонация в драйверах UMDF 275
Обработка запросов на создание в драйверах KMDF 278
Обратные вызовы по событиям ввода/вывода для очистки и закрытия 280
Функции обратного вызова для запросов на чтение, запись и IOCTL 281
Обратные вызовы для запросов на чтение и запись 282
Обратные вызовы для запросов IOCTL 286
Стандартные обратные вызовы для ввода/вывода 288
Завершение запросов ввода/вывода 290
Отмененные и приостановленные запросы 292
Отмена запросов ввода/вывода 292
Приостановка запроса ввода/вывода 294
Адаптивные тайм-ауты в UMDF 295
Самоуправляемый ввод/вывод 296
Самоуправляемый ввод/вывод при запуске и перезапуске устройства 298
Самоуправляемый ввод/вывод при переходе устройства в состояние пониженного энергопотребления или при его удалении 298
Пример KMDF: реализация таймера WDT 299
Пример: регистрация функций обратного вызова для самоуправляемого ввода/вывода 300
Пример: создание и инициализация таймера 300
Пример: запуск таймера 301
Пример: остановка таймера 302
Пример: перезапуск таймера 303
Пример: удаление таймера 303
Глава 9. Получатели ввода/вывода 304
О получателях ввода/вывода 305
Стандартные получатели ввода/вывода 305
Удаленные получатели ввода/вывода в драйверах KMDF 305
Общие и специализированные получатели ввода/вывода 306
Реализация получателя ввода/вывода в UMDF 307
Диспетчеры ввода/вывода UMDF 307
Внутристековые файлы для получателей ввода/вывода в драйверах UMDF 309
Создание и управление получателями ввода/вывода 310
Обращение к получателю ввода/вывода 310
Создание удаленных получателей ввода/вывода в драйверах KMDF 311
Функции инициализации для структуры параметров получателя ввода/вывода 311
Пример KMDF: создание и открытие удаленного получателя ввода/вывода 314
Управление состояниями получателя ввода/вывода 315
Методы для управления состоянием получателя ввода/вывода 316
Обратные вызовы получателей ввода/вывода для драйверов KMDF 317
Пример KMDF: функция обратного вызова EvtIoTargetQueryRemove 318
Создание запроса ввода/вывода 319
Пример UMDF: создание объекта запроса ввода/вывода WDF 319
Пример KMDF: создание объекта запроса ввода/вывода WDF 320
Объекты памяти и буферы для созданных драйвером запросов ввода/вывода 320
Выделение объектов памяти и буферов для запросов ввода/вывода 322
Родитель объекта памяти 322
Типы буферов 323
Одновременное создание объекта памяти и буфера 323
Создание объекта памяти, использующего уже существующий буфер 324
Сопоставление объекта памяти объекту запроса ввода/вывода 324
Пример UMDF: создание объекта памяти, использующего уже существующий буфер 325
Пример KMDF: создание объекта памяти и нового буфера 326
Форматирование запросов ввода/вывода 327
Когда нужно форматировать запрос 327
Форматирование запроса 327
Форматирование неизмененного запроса для стандартного получателя ввода/вывода 328
Форматирование измененных или созданных драйвером запросов 328
Методы форматирования UMDF для запросов ввода/вывода 328
Методы форматирования KMDF для запросов ввода/вывода 328
Параметры для методов форматирования 329
Пример UMDF: форматирование запроса на запись 329
Пример KMDF: форматирование запроса на чтение 330
Обратные вызовы для завершения ввода/вывода 331
Обработка в функции обратного вызова завершения ввода/вывода 331
Извлечение статуса завершения и другой информации 332
Отправление запросов ввода/вывода 333
Опция для отправки запросов 334
Значения тайм-аута для запросов ввода/вывода 334
Синхронные и асинхронные запросы ввода/вывода 335
Эффект, оказываемый состоянием получателя ввода/вывода 335
Опция "отправил и забыл" 336
Пример UMDF: отправка запроса стандартному получателю ввода/вывода 336
Пример KMDF: опция "отправил и забыл" 338
Пример KMDF: форматирование и отправление запроса получателю ввода/вывода 340
Разбивка запросов ввода/вывода на подзапросы 341
Пример KMDF: повторное использование объекта ввода/вывода 342
Отмена отправленного запроса 345
Пример UMDF: отмена всех запросов ввода/вывода для файла 346
Пример KMDF: отмена запросов ввода/вывода 347
Получатели ввода/вывода FileHandle в драйверах UMDF 347
Получатели ввода/вывода USB 349
Устройства USB 349
Конфигурационные дескрипторы и дескрипторы устройств 350
Модели передачи данных USB 352
Специализированные получатели ввода/вывода USB в WDF 353
Объекты устройств исполнителей USB 354
Объекты интерфейса USB 354
Объекты каналов исполнителей USB 355
Конфигурирование получателей ввода/вывода USB 355
Пример UMDF: конфигурирование получателя ввода/вывода USB 356
Пример KMDF: конфигурирование получателя ввода/вывода USB 359
Отправление запроса ввода/вывода получателю USB 363
Пример UMDF: отправление синхронного запроса получателю ввода/вывода USB 363
Пример KMDF: отправление асинхронного запроса ввода/вывода получателю USB 365
Средство непрерывного считывания USB в KMDF 368
Рекомендация для отправления запросов ввода/вывода 369
Глава 10. Синхронизация 371
Когда требуется применение синхронизации 372
Пример синхронизированного доступа к общим данным 372
Требования синхронизации для драйверов WDF 374
Возможности синхронизации, предоставляемые WDF 375
Подсчет ссылок и иерархическая объектная модель 376
Сериализация обратных вызовов функций для событий Plug and Play и энергопотребления 376
Управление потоком для очередей ввода/вывода 377
Блокировка представления объекта 377
Область синхронизации и сериализация функций обратных вызовов ввода/вывода 378
Область синхронизации на уровне устройства и методы диспетчеризации очереди 379
Область синхронизации в драйверах UMDF 382
Область синхронизации в драйверах KMDF 383
Стандартные настройки области синхронизации 385
Синхронизация на уровне устройства 385
Синхронизация на уровне очереди 385
Пример KMDF: область синхронизации 386
Автоматическая сериализация функций обратных вызовов процедурами DPC, таймерами и рабочими элементами 387
Уровни исполнения в драйверах KMDF 388
Спин-блокировки и wait-блокировки KMDF 390
Wait-блокировки 390
Спин-блокировки 391
Виды спин-блокировок 392
Пример KMDF: спин-блокировки 392
Синхронизация отмены запросов ввода/вывода в драйверах KMDF 394
Синхронизация отмены через область синхронизации 394
Синхронизация отмены с отслеживанием состояния в области контекста 395
Отмена входящих запросов синхронно с подзапросами 399
Сводка методов синхронизации и общие советы 401
Глава 11. Трассировка и диагностируемость драйверов 403
Основы программной трассировки с применением WPP 404
Преимущества программной трассировки WPP 404
Гибкое динамическое управление 404
Возможность просмотра сообщений в режиме реального времени или запись их в файл 404
Обильная информация 404
Охрана интеллектуальной собственности 405
Легкость перехода от операторов печати отладчика 405
Включение в поставляемые продукты 405
Минимальное воздействие на производительность 405
Компоненты программной трассировки WPP 405
Поставщик трассировки 406
Контроллер трассировки 406
Буфер трассировки 406
Сеанс трассировки 406
Потребитель трассировки 407
WPP и ETW 408
ETW в Windows Vista 408
Функции и макросы для работы с сообщениями трассировки 409
Макрос DoTraceMessage 410
Преобразование операторов печати отладчика в ETW 410
Условия для сообщений 410
Специальные функции сообщений трассировки 411
Поддержка программной трассировки в драйвере 411
Модифицирования файла Sources для исполнения препроцессора WPP 412
Пример UMDF: директива RUN_WPP для образца драйвера Fx2_Driver 413
Специальное сообщение трассировки драйвера Fx2_Driver 413
Пример KMDF: директива RUN_WPP для образца драйвера Osrusbfx2 414
Подключение TMH-файла 415
Пример UMDF: подключение TMH-файла 415
Пример KMDF: подключение TMH-файла 415
Определение контрольного GUID и флагов 416
Пример UMDF: определение контрольного GUID и флагов 417
Пример KMDF: определение WPP_CONTROL_GUIDS и флагов 418
Инициализация и очистка трассировки 418
Инициализация трассировки 418
Очистка после трассировки 420
Оснащение кода драйвера 422
Пример UMDF: добавление вызовов функций сообщений трассировки в код драйвера 422
Пример KMDF: добавление вызовов функций сообщений трассировки в код драйвера 422
Инструменты для программной трассировки 423
Проведение сеанса программной трассировки 424
Подготовка драйвера 424
Просмотр журнала трассировки драйвера утилитой TraceView 425
Создание и просмотр файла журнала трассировки 425
Просмотр журнала трассировки в режиме реального времени 426
Просмотр инфраструктурного журнала трассировки с помощью базовых инструментов трассировки 427
Практические рекомендации: думайте о диагностике 429
Глава 12. Вспомогательные объекты WDF 431
Выделение памяти 431
Локальное хранилище 432
Объекты памяти и буферы ввода/вывода 432
Объекты памяти UMDF и их интерфейсы 433
Объекты памяти KMDF и их методы 434
Обращение к реестру 436
Хранилище свойств устройства UMDF 436
Объекты реестра KMDF и их методы 439
Общие объекты 443
Пример UMDF: создание общего объекта 443
Пример KMDF: создание общего объекта 444
Объекты коллекции KMDF 444
Методы коллекции 445
Пример: создание и использование коллекции 446
Объекты таймера KMDF 448
Методы объекта таймера 448
Временные интервалы 449
Функция обратного вызова EvtTimerFunc 450
Пример: использование объекта таймера 450
Поддержка интерфейса WMI в драйвере KMDF 452
Работа с WMI 452
Требования для поддержки WMI 453
Инициализация поддержки WMI 454
Ресурс MOF 454
Объект поставщика WMI 454
Объекты экземпляра WMI 455
Функции обратного вызова для событий экземпляра WMI 458
Пример: запрос данных у экземпляра WMI 458
Пример: организация экземпляра WMI 459
Пример: организация элемента данных WMI 460
Глава 13. Шаблон UMDF-драйвера 462
Описание образца драйвера Skeleton 462
Образец драйвера Skeleton 463
Файлы образца драйвера Skeleton 463
Исходные файлы 463
Файлы поддержки компоновки 464
Файлы для поддержки инсталляции 464
Модификация файлов образца драйвера Skeleton под собственные требования 464
Инфраструктура DLL 465
Функция DllMain 465
Функция DllGetClassObject 466
Базовая поддержка технологии COM 467
Класс CUnknown 467
Класс CClassFactory 467
Объект обратного вызова для образца драйвера Skeleton 468
Метод CreateInstance 468
Интерфейс IUnknown 469
Интерфейс IDriverEntry 469
Необязательные интерфейсы 470
Объект обратного вызова устройства в образце драйвера Skeleton 470
Вспомогательные методы для объекта обратного вызова устройства 471
Модификация вспомогательных файлов образца драйвера Skeleton 473
Файл Sources 473
Файлы Make 474
Файл Exports 474
Файл версии ресурсов 475
Файл INX 475
Часть IV. Смотрим глубже — больше о драйверах WDF 481
Глава 14. За пределами инфраструктур 483
Использование системных сервисов, не входящих в состав инфраструктур 483
Использование функций Windows API в драйверах UMDF 484
Для драйверов UMDF, исполняющихся на Windows XP 486
Применение вспомогательных процедур режима ядра в драйверах KMDF 486
Обработка запросов, не поддерживаемых инфраструктурами 489
Обработка по умолчанию неподдерживаемых запросов 489
Обработка неподдерживаемых запросов в драйверах KMDF 490
Пример: организация функции обратного вызова предварительной обработки EvtDriverDeviceAdd 491
Пример: обработка в функции обратного вызова EvtDeviceWdmPreprocessIrp 491
Глава 15. Планирование, контекст потока и уровни IRQL 493
Потоки 494
Планирование потоков 494
Определение контекста потока 495
Контекст потока драйверных функций KMDF 496
Уровни IRQL 497
Уровни IRQL, специфичные для процессора и потока 498
Уровень IRQL PASSIVE_LEVEL 499
Уровень IRQL PASSIVE_LEVEL в критической области 500
Уровень IRQL APC_LEVEL 500
Уровень IRQL DISPATCH_LEVEL 500
Уровень IRQL DIRQL 502
Уровень IRQL HIGH_LEVEL 502
Рекомендации по исполнению на уровне IRQL DISPATCH_LEVEL или высшем 503
Вызовы функций, исполняющихся на низких уровнях IRQL 503
Сценарии прерывания потоков 504
Прерывание потока на однопроцессорной системе 504
Прерывание потока на многопроцессорной системе 505
Тестирование на наличие проблем, связанных с IRQL 507
Способы получения текущего уровня IRQL 507
Макросы PAGED_CODE и PAGED_CODE_LOCKED 508
Опции инструмента Driver Verifier 508
Рабочие элементы и драйверные потоки 509
Рабочие элементы 510
Пример KMDF: применение рабочего элемента 510
Оптимальные методики для управления контекстом потока и IRQL в драйверах KMDF 512
Глава 16. Аппаратные ресурсы и прерывания 514
Аппаратные ресурсы 514
Идентификация и освобождение аппаратных ресурсов 515
Идентификация ресурсов: подготовка аппаратного обеспечения 516
Освобождение аппаратного обеспечения 516
Списки ресурсов 517
Анализ аппаратных ресурсов драйвером 517
Платформенная независимость и отображение ресурсов драйвера 518
Пример: отображение ресурсов 519
Пример: отмена отображения ресурсов 522
Прерывания и их обработка 522
Объекты прерывания 523
Структура конфигурации объекта прерывания 524
Разрешение и запрещение прерываний 526
Обработка после разрешения и до запрещения прерываний 528
Процедуры обслуживания прерываний 529
Отложенная обработка прерываний 531
Синхронизация обработки на уровне DIRQL 532
Глава 17. Прямой доступ к памяти 533
Базовые понятия и терминология DMA 533
Транзакции DMA и передачи DMA 534
Пакетный DMA и DMA с применением общего буфера 534
Устройства DMA пакетной конструкции 535
Устройства DMA с применением общего буфера 535
Устройства DMA гибридной конструкции 535
Поддержка метода "разбиение/объединение" 535
Информация об устройстве, специфичная для DMA 536
Информация об устройстве и конструкция драйверов DMA 537
Тип конструкции DMA 537
Возможности адресации устройства 538
Аппаратная поддержка метода "разбиение/объединение" 538
Максимальный объем данных передачи 538
Требуемое выравнивание буфера 538
Факторы, не принимающиеся к рассмотрению 538
Абстракция DMA в Windows 539
Операции DMA и кэш процессора 540
Завершение передач DMA сбросом кэшей 541
Регистры отображения 541
Концепция 541
Реализация 543
Когда применять регистры отображения 543
Поддержка системного механизма "разбиение/объединение" 544
Концепция 544
Реализация 545
Передача DMA по любому адресу физической памяти 545
Концепция 546
Реализация 546
Реализация драйверов DMA 547
Инициализации драйвера DMA 548
Объект выключателя DMA 549
Объект общего буфера 549
Объект транзакции DMA 550
Пример: инициализации драйвера DMA 550
Инициирование транзакции 552
Инициализация транзакции 552
Исполнение транзакции 553
Пример: инициирование транзакции 553
Обработка запроса 555
Определение функции EvtProgramDma 555
Задачи, выполняемые функцией EvtProgramDma 556
Пример: обработка запроса 557
Обработка завершения DMA 558
Завершение передачи, транзакции и запроса 558
Пример: обработка завершения DMA 559
Тестирование драйверов DMA 560
Верификация, специфичная для DMA 560
Расширение отладчика !dma 561
Расширения отладчика KMDF для DMA 561
Рекомендации к разработке драйверов DMA 563
Глава 18. Введение в COM 564
Прежде чем приступить 564
Структура драйвера UMDF 565
Краткий обзор COM 567
Содержимое объекта COM 568
Объекты и интерфейсы 568
Интерфейс IUnknown 569
Подсчет ссылок 570
Рекомендации по использованию методов AddRef и Release 570
Подсчет ссылок 570
Использование указателей интерфейса в качестве параметров 570
Вызовы метода Release 571
Исправление ошибок со счетчиком ссылок 571
Идентификаторы GUID 572
Таблица VTables 572
HRESULT 573
Свойства и события 574
Библиотека ATL 575
Файлы IDL 575
Использование объектов COM UMDF 577
Использование объекта COM 577
Получение интерфейса через метод обратного вызова 578
Получение интерфейса через создание объекта UMDF 578
Получение интерфейса через вызов метода QueryInterface 579
Управление временем жизни объекта COM 580
Реализация инфраструктуры DLL 580
Функция DllMain 581
Функция DllGetClassObject 582
Фабрика классов 583
Реализация фабрики классов 583
Объекты, не требующие фабрики классов 585
Реализация объектов обратного вызова UMDF 586
Реализация класса для объекта COM 586
Реализация интерфейса IUnknown 587
Методы AddRef и Release 588
Функция QueryInterface 589
Реализация объектов обратного вызова UMDF 591
Часть V. Создание, установка и тестирование драйверов WDF 593
Глава 19. Сборка драйверов WDF 595
Общие положения по сборке драйверов 595
Драйверы UMDF: обстоятельства, учитывающиеся при сборке 596
Драйверы KMDF: обстоятельства, учитывающиеся при сборке 596
Введение в сборку драйверов 597
Среда сборки 597
Вспомогательные файлы утилиты Build 598
Обязательные файлы 599
Необязательные файлы 599
Ограничения на файлы проекта 600
Сборка проекта 600
Широко употребляемые флаги утилиты Build 601
Распространенные выходные файлы, создаваемые утилитой Build 601
Полезные советы для UMDF 602
Пример UMDF: сборка образца драйвера Fx2_Driver 602
Файл Sources для драйвера Fx2_Driver 602
Макросы файла Sources для драйвера Fx2_Driver 603
Номера версии UMDF 603
Стандартные выходные файлы 604
Специальные выходные файлы 604
Исходные файлы, заголовки и библиотеки 604
Конфигурация сборки 605
Файлы Makefile и Makefile.inc для драйвера Fx2_Driver 606
Сборка драйвера Fx2_Driver 606
Пример KMDF: сборка образца драйвера Osrusbfx2 607
Файл Sources для драйвера Osrusbfx2 607
Макросы файла Sources для драйвера Osrusbfx2 608
Номер версии KMDF 608
Стандартные выходные файлы 608
Специальные выходные файлы 608
Исходные файлы, заголовки и библиотеки 608
Конфигурация сборки 609
Файлы Makefile и Makefile.inc для драйвера Osrusbfx2 609
Сборка драйвера Osrusbfx2 610
Глава 20. Установка драйверов WDF 611
Основы установки драйверов 612
Ключевые задачи по установке драйверов 612
Инструменты и методы установки 612
Аспекты, принимаемые во внимание при установке драйверов WDF 613
Управление версиями WDF и установка драйверов 613
Обновления дополнительных версий 614
Обновления основных версий 614
Распространение инфраструктуры 614
Привязка драйверов к инфраструктуре 615
Драйверы KMDF 615
Драйверы UMDF 616
Пакеты соинсталляторов WDF 616
Пакет соинсталлятора UMDF 617
Пакет соинсталлятора KMDF 618
Компоненты драйверного пакета WDF 618
Создания INF-файла для драйверного пакета WDF 619
Широко применяемые разделы INF-файла 620
Инструменты для работы с INF-файлами 621
Файлы INF для разных процессорных архитектур 621
Файлы INF драйверов WDF: разделы соинсталляторов 622
Примеры INF-файлов WDF 624
Пример UMDF: INF-файл драйвера Fx2_Driver 625
Пример KMDF: INF-файл драйвера Osrusbfx2 628
Подписывание и распространение драйверного пакета 629
Подписанные файлы каталогов 629
Указание файла каталогов в INF-файле 630
Подписывание драйверов BSD 630
Распространение драйверного пакета 630
Установка драйверов 631
Факторы, принимаемые во внимание для тестовых установок 631
Факторы, принимаемые во внимание для эксплутационных установок 632
Установка драйверов с помощью менеджера PnP 632
Установка драйверов с помощью SPInst или DIFxApp 633
Установка драйверов с помощью специализированного установочного приложения 634
Установка и обновление драйверов с помощью инструмента DevCon 634
Обновление драйверов с помощью Диспетчера устройств 635
Удаление драйверов 635
Процесс установки драйверов 636
Этап 1. Установка требуемой инфраструктуры WDF (если необходимо) 636
Этап 2. Создание узла devnode для устройства 636
Этап 3. Развертывание драйверного пакета в хранилище драйверов 636
Этап 4. Установка драйвера 636
Действия по удалению драйвера 636
Удаление устройства 637
Удаление драйверного пакета из хранилища драйверов 637
Удаление двоичных файлов драйвера 637
Инструменты для удаления устройств и драйверов 638
Поиск и удаление проблем с установкой драйверов WDF 639
Поиск и исправление ошибок установки с помощью отладчика WinDbg 639
Журналы регистрации ошибок установки драйверов 640
Распространенные ошибки при установке драйверов WDF 641
Фатальные ошибки при установке 641
Коды ошибок менеджера PnP 642
Глава 21. Инструменты для тестирования драйверов WDF 644
Начало работы по тестированию драйверов 645
Выбор тестовой системы 645
Обзор инструментов для тестирования драйверов WDF 646
Методы трассировки для тестирования драйверов 646
Инструменты PREfast и SDV 647
Другие инструменты для тестирования драйверов 647
Инструмент INF File Syntax Checker (ChkINF) 648
Инструмент Device Console 648
Инструмент Device Path Exerciser 649
Инструменты Kern Rate и Kern Rate Viewer 649
Инструмент Plug and Play Driver Test 650
Инструмент Plug and Play CPU Test 651
Инструмент Memory Pool Monitor 651
Инструмент Power Management Test Tool 651
Инфраструктура WDTF 652
Инструмент Driver Verifier 654
Когда использовать Driver Verifier 654
Как работает Driver Verifier 655
Как работать с Driver Verifier 656
Использование утилиты Verifier из командной строки 656
Запуск Driver Verifier Manager 657
Примеры работы с Driver Verifier 657
Пример 1: активирование стандартных опций для нескольких драйверов 657
Пример 2: активирование специальных опций для всех драйверов 657
Пример 3: запуск и остановка проверки драйвера без перезагрузки 658
Пример 4: активирование или деактивирование опций без перезагрузки 659
Пример 5: деактивирование всех опций Driver Verifier 659
Пример 6: деактивирование Driver Verifier 659
Пример 7: эмуляция недостаточных ресурсов 659
Пример 8: принудительная проверка уровня IRQL (Force IRQL Checking) 661
Использование информации от Driver Verifier при отладке 662
Пример 1: просмотр трассировок операций стека с помощью !verifier 662
Пример 2: использование !verifier для вывода счетчиков ошибок и выделений памяти из пула 663
Инструмент KMDF Verifier 664
Когда использовать KMDF Verifier 665
Как работает KMDF Verifier 665
Как активировать KMDF Verifier 665
Использование информации от KMDF Verifier при отладке 666
Верификатор UMDF Verifier 667
Остановы bugcheck UMDF 668
Извещение об ошибках UMDF 669
Верификатор Application Verifier 669
Как работает Application Verifier 670
Использование Application Verifier для верификации драйверов UMDF 670
Оптимальные методики для тестирования драйверов WDF 671
Советы по сборке драйверов 671
Советы по использованию инструментов наилучшим образом 672
Советы для тестирования драйвера на протяжении его жизненного цикла 673
Глава 22. Отладка драйверов WDF 674
Обзор инструментов отладки для WDF 674
Отладчик WinDbg 675
Прочие инструменты 675
Трассировка WPP 676
Отладка макросов и процедур 676
Основы отладчика WinDbg 676
Проверочные и свободные версии сборок 677
Пользовательский интерфейс 677
Команды отладчика 678
Символы и исходный код 679
Расширения отладчика 681
Подготовка к отладке драйверов UMDF 682
Как разрешить отладку кода загрузки и запуска драйвера 683
Как начать отладку кода загрузки и запуска драйвера UMDF 684
Отладка исполняющегося драйвера UMDF 685
Отслеживание объектов UMDF и подсчет ссылок 686
Отладка фатального сбоя драйвера UMDF 687
Подготовка к отладке драйверов KMDF 687
Как активировать отладку режима ядра на тестовом компьютере 688
Как активировать отладку режима ядра для Windows Vista 688
Как активировать отладку режима ядра для более ранних, чем Windows Vista, версий Windows 689
Подготовка тестового компьютера к отладке драйверов KMDF 689
Как начать сеанс отладки KMDF 690
Как начать отладку фатального сбоя драйвера KMDF 692
Пошаговый разбор отладки драйверов UMDF на примере образца драйвера Fx2_Driver 692
Подготовка к сеансу отладки драйвера Fx2_Driver 692
Начало сеанса отладки для драйвера Fx2_Driver 693
Анализ процедуры обратного вызова OnDeviceAdd для драйвера Fx2_Driver 693
Исследование с помощью расширений отладчика UMDF объекта обратного вызова устройства 695
Исследование с помощью расширений отладчика UMDF запроса ввода/вывода 696
Пошаговый разбор отладки драйверов KMDF на примере образца драйвера Osrusbfx2 697
Подготовка к сеансу отладки драйвера Osrusbfx2 698
Начало сеанса отладки для драйвера Osrusbfx2 698
Анализ процедуры обратного вызова EvtDriverDeviceAdd 698
Исследование объекта устройства с помощью расширений отладчика KMDF 699
Исследование запроса ввода/вывода с помощью расширений отладчика UMDF запроса ввода/вывода 700
Просмотр сообщения трассировки с помощью WinDbg 702
Просмотр журнала KMDF с помощью WinDbg 703
Получение информации протоколирования после останова bugcheck 704
Управление содержимым журнала KMDF 705
Дополнительные предложения для экспериментирования с WinDbg 706
Глава 23. Инструмент PREfast for Drivers 707
Введение в PREfast 707
PREfast и инструмент Code Analysis для Visual Studio 708
Как работает PREfast 708
Какие ошибки может выявлять PREfast 709
Использование PREfast 710
Задание режима анализа для PREfast 710
Как запустить PREfast 710
Сборка примеров PREfast 711
Вывод на экран результатов анализа PREfast 713
Утилита просмотра журнала дефектов, обнаруженных PREfast 713
Полезные советы для фильтрации результатов PREfast 716
Вывод журнала дефектов PREfast в текстовом виде 717
Примеры результатов анализа PREfast 718
Пример 1: неинициализированные переменные и нулевые указатели 718
Пример 2: неявный порядок вычислений 719
Пример 3: вызов функции на неправильном уровне IRQL 720
Пример 4: действительная ошибка, но указанная в неправильном месте 721
Пример 5: несоответствие класса типа функции 723
Пример 6: неправильный перечислимый тип 724
Практики кодирования, улучшающие результаты анализа PREfast 725
Предупреждения, указывающие распространенные причины шума и как на них реагировать 726
Воздействие вставленного кода ассемблера на результаты анализов PREfast 727
Использование директивы pragma warning для подавления шума 728
Использование аннотаций для устранения шума 728
Использование аннотаций 729
Как аннотации улучшают результаты PREfast 729
Аннотации расширяют прототипы функций 730
Аннотации описывают контракт между вызываемой функцией и вызывающим ее клиентом 730
Аннотации помогают усовершенствовать конструкцию функции 730
Куда вставлять аннотации в коде 731
Аннотирование функций и параметров функций 732
Аннотации для объявлений typedef 733
Аннотации к объявлениям typedef функций 735
Советы по размещению аннотаций в исходном коде 737
Аннотации общего назначения 737
Аннотирование входных и выходных параметров 738
Контракт аннотаций _in и _out 739
Аннотации _in, _out и _inout и макросы IN, OUT и INOUT 740
Модификаторы аннотаций 741
Модификатор _opt 741
Модификатор _deref 741
Аннотации размера буфера 742
Аннотации буфера неизменяемого размера 743
Сводка аннотаций для буферов 744
Полезные советы по аннотированию буферов 746
Примеры аннотаций буфера 746
Аннотации строк 747
Аннотация _nullterminated 747
Аннотация _nullnullterminated 748
Аннотация _possibly_notnullterminated 748
Зарезервированные параметры 749
Возвращаемые функциями значения 749
Аннотации для драйверов 750
Базовые аннотации и соглашения по их применению 753
Списки аннотаций для драйверов 753
Вложенные аннотации 754
Условные аннотации 755
Примеры вложенных условных аннотаций 756
Грамматика условных выражений 757
Аннотации результатов функций 758
Аннотации для сопоставления типов 760
Аннотации указателей 761
Аннотации для постоянных и переменных параметров 762
Аннотации форматирующих строк 762
Диагностические аннотации 763
Аннотации для предпочтительных функций 763
Аннотации для сообщений об ошибках 763
Аннотации для функций в операторах _try 764
Аннотации для памяти 764
Аннотации для выделения и освобождения памяти 764
Аннотации для совмещенных имен памяти 765
Аннотации для ресурсов иных, чем память 766
Аннотации для получения и освобождения ресурсов, иных, чем память 767
Аннотации для глобальных ресурсов, иных, чем память 767
Аннотации для критической области и спин-блокировки отмены 768
Составные аннотации для ресурсов 771
Аннотации класса типа функций 772
Аннотации для идентифицирования класса типа функции 773
Аннотации для проверки класса типа функции в условном выражении 773
Аннотации для плавающей запятой 774
Аннотации для уровней IRQL 775
Аннотации для указания максимального и минимального уровня IRQL 776
Аннотации для явного указания уровня IRQL 777
Аннотации для повышения и понижения уровня IRQL 777
Аннотации для сохранения и восстановления уровня IRQL 777
Аннотации для удерживания постоянного уровня IRQL 778
Аннотации для сохранения и восстановления уровня IRQL для процедур отмены ввода/вывода 778
Примеры аннотаций IRQL 779
Полезные советы по применению аннотаций IRQL 780
Аннотация DO_DEVICE_INITIALIZING 781
Аннотации для операндов с взаимоблокировкой 781
Примеры аннотированных системных функций 781
Составление и отладка аннотаций 784
Образцы контрольных примеров для аннотаций 784
Полезные советы для написания контрольных примеров для аннотаций 785
Оптимальные методики работы с PREfast 786
Оптимальные методики для PREfast 786
Оптимальные методики для использования аннотаций 787
Пример: аннотированный заголовочный файл Osrusbfx2.h 789
Глава 24. Инструмент Static Driver Verifier 794
Введение в SDV 794
Принцип работы SDV 795
Правила SDV 796
Как SDV применяет правила к коду драйвера 798
А что внутри? Принцип работы движка верификации SDV 799
Абстракция 800
Поиск и проверка достоверности 800
Усовершенствование 801
Как аннотировать исходный код драйверов KMDF для SDV 801
Объявления типов ролей функций для драйверов KMDF 802
Пример: использование типов ролей функций в образцах драйверов 802
Использование SDV 804
Как подготовить файлы и выбрать правила для SDV 804
Подготовка к использованию SDV 804
Очистка каталога sources драйвера 805
Обработка библиотек, используемых драйвером 805
Как отсканировать исходный код для создания файла Sdv-map.h 806
Выполнение верификации 808
Экспериментирование с SDV 810
Просмотр отчетов SDV 811
Утилита Defect Viewer 813
Оптимальная методика: проверяйте результаты SDV 814
Правила KMDF для SDV 815
Правила последовательности функций DDI для KMDF 816
Правила инициализации устройств для KMDF 816
Правила очистки устройства управления для KMDF 817
Правила завершения запроса для KMDF 817
Правила отмены запроса для KMDF 818
Правила для буферов, списков MDL и памяти запросов 819
Правила для буферов запросов 820
Правила для запросов обращения к спискам MDL 820
Правила для запросов обращения к памяти 821
Правила DDI для владельцев политики энергопотребления 821
Пример: пошаговый анализ драйвера Fail_Driver3 с помощью SDV 823
Подготовка к верификации драйвера Fail_Driver3 824
Сборка библиотеки драйвера Fail_Driver3 с помощью SDV 824
Создание файла Sdv-map.h для драйвера Fail_Driver3 824
Выполнение верификации драйвера Fail_Driver3 825
Просмотр результатов верификации драйвера Fail_Driver3 826
Ознакомление с нарушенными правилами 827
Пошаговый просмотр трассировки нарушения правила в драйвере Fail_Driver3 827
Типы ролей функций обратного вызова KMDF для SDV 828
Словарь 831
Предметный указатель 852
Штрихкод:   9785977501859
Аудитория:   Общая аудитория
Масса:   1 072 г
Размеры:   233x 165x 37 мм
Тираж:   1 500
Сведения об издании:   1-е полное издание
Тип иллюстраций:   Черно-белые
Переводчик:   Таранушенко Сергей
Отзывы
Найти пункт
 Выбрать станцию:
жирным выделены станции, где есть пункты самовывоза
Выбрать пункт:
Поиск по названию улиц:
Подписка 
Введите Reader's код или e-mail
Периодичность
При каждом поступлении товара
Не чаще 1 раза в неделю
Не чаще 1 раза в месяц
Мы перезвоним

Возникли сложности с дозвоном? Оформите заявку, и в течение часа мы перезвоним Вам сами!

Captcha
Обновить
Сообщение об ошибке

Обрамите звездочками (*) место ошибки или опишите саму ошибку.

Скриншот ошибки:

Введите код:*

Captcha
Обновить