[Next]

Файл Описание
  soldatov.chm
1.1 Мb
Книгу можно загрузить в формате chm...

#Scan #OCR #Spellcheck #HTM #CHM by [Korvin]

Содержание

[Предисловие от автора]
[Предисловие от составителя эл. версии]

[Глава 1. Драйверы. Общие понятия и термины]
Драйверы: крупный план. Unix-Linux, Dos-Windows
Словарь разработчика драйвера
Abstraction
Structure
Union
Object
Kernel mode
User mode
Callback
Context
Routine
ISR
DpcForISR
Deferred Procedure Call
IOManager
IRP
IO stack location
Dispatch Routines
Major IRP Code
IOCTL
Minor IRP Code
DriverEntry
WDM
Layering
AddDevice
Device Instance
Device Object, PDO, FDO
Device Extension
Symbolic Link
Device Stack, Driver Stack
Monolithic Driver
Legacy Driver, NT Style Driver
IRQL
IRQ
DIRQL
Polling
Virtual Memory
System Paging File
User Space
Pool Memory
Paged Memory, Paged Pool
Nonpaged Memory, Nonpaged Pool
Scatter/Gather Problem
DMA
Access Violation
SEH
Thread, Thread Object
Process, Process Object
Affinity
Synchronization Objects
PnP Manager
Enumeration
Enumerator
ACPI
ACPI Driver
Filter Device Object
Filter Driver
HAL
Registry
Hardware Branch
CurrentControlSet
LastKnownGood
Unicode
DeviceID
Class Driver
Port Driver
Minidriver
Источники информации
Печатные издания на русском языке
Издания, которые не были переведены на русский язык
Материалы из пакетов разработки драйверов третьих фирм
Программные продукты от Microsoft
Документация Microsoft DDK
Online документация Microsoft
Заключение

[Глава 2. Программные средства, применяемые при разработке драйверов]
Программные средства от Microsoft
Настройки проекта в Visual Studio 7 Net
Компиляция и сборка драйвера утилитой Build пакета DDK
Программа Depends
Программа ReBase
Программа ErrLook
Программа GuidGen (UUIDGEN)
Программа редактирования Системного Реестра
Программа DeviceTree
Программа DevCon
Программа DevCtl
Программы ChkInf и GenInf
Программа Task Manager (Диспетчер Задач)
Системный апплет "Производительность"
Driver Verifier
PreFast
Программные средства из пакетов разработки драйверов от третьих фирм
Программа Monitor от CompuWare Corporation
Программа трансляции файла sources в проект Visual Studio
Программа Numega SymLinks
Программные средства от Марка Руссиновича и SysInternals
Программа RegMon
Программа WinObj
Программа DebugView
Программа DebugPrint
Программа DevView
Программа PoolTag
Программа просмотра файлов
Программы Свена Шрайбера
Программа w2k_svc
Программа w2k_sym
Программа w2k_mem
Программы от SmidgeonSoft
Программа PEBrowse Professional Interactive
Программа NTDevices
Программа NTObjects
Программа System Memory Browse
Программа РЕ Explorer
Дизассемблер IDA
Заключение

[Глава 3. Простой драйвер "в-стиле-NT": Example.sys]
Процедура DriverEntry и предварительные объявления
Функция CompleteIrp
Рабочая процедура обработки запросов read/write
Рабочая процедура обработки запросов открытия драйвера
Рабочая процедура обработки запросов закрытия драйвера
Рабочая процедура обработки IOCTL запросов
Рабочая процедура выгрузки драйвера
Заголовочный файл Driver.h
Компиляция и сборка драйвера Example.sys
Файл Makefile
Файл Sources
Компиляция и сборка при помощи утилиты Build
Инсталляция и запуск драйвера Example.sys
Инсталляция внесением записей в Системный Реестр
Модификация Системного Реестра Windows 98
Модификация Системного Реестра Windows 2000, XP, Server2003
Запуск драйвера
Инсталляция с использованием INF файла
Инсталляция с использованием программы Monitor
Инсталляция с использованием сервисов SCM Менеджера
Приложение для тестирования драйвера Example.sys
Работа с драйвером Example.sys
Заключение

[Глава 4. Архитектура Windows NT 5. Введение]
Цели разработки
Уровни аппаратных привилегий в Windows NT 5
Переносимость
Расширяемость
Производительность
Исполнительные компоненты
Интерфейс системных служб
Менеджер (диспетчер) объектов
Менеджер конфигурирования
Менеджер процессов
Менеджер виртуальной памяти
Средства локальных процедурных вызовов
Диспетчер (менеджер) ввода/вывода
Расширения базовой операционной системы
Подсистема Win32
Другие существенные компоненты операционной системы
Компоненты обслуживания операций ввода/вывода, работающие в режиме ядра
Цели разработки подсистемы ввода/вывода
Типы драйверов Windows NT5
Специальные драйверные архитектуры
Отличия между версиями
Заключение

[Глава 5. Прикасаясь к аппаратуре]
Основные сведения об аппаратном обеспечении
Автоматическое распознавание и конфигурирование
Регистры устройств
Доступ к регистрам устройств
Пространство ввода/вывода
Доступ через адресацию в памяти
Сигналы прерываний
Приоритеты прерываний
Векторы прерывания
Передача сигналов прерываний
Сродство к процессору
Механизмы передачи данных
Программируемый ввод/вывод
Прямой доступ к памяти
DMA операции с использованием системных контроллеров
Операции bus master DMA
Память, отведенная устройству
Ресурсы, используемые устройством
Шины в компьютерных системах
ISA: Industry Standard Architecture
EISA: Extended Industry Standard Architecture
PCI: Peripheral Component Interconnect
Доступ к регистрам
Механизмы прерываний
Возможности DMA
Память, отведенная устройствам
Автоматическое распознавание и конфигурирование
IEEE 1394: Firewire Bus
Доступ к регистрам
Механизмы прерываний
Возможности DMA
Автоматическое распознавание и конфигурирование
USB: Universal Serial Bus
Доступ к регистрам
Механизмы прерываний
Возможности DMA
Автоматическое распознавание и конфигурирование
Шина PC Card (PCMCIA)
Доступ к регистрам
Механизмы прерываний
Возможности DMA
Автоматическое распознавание и конфигурирование
Советы по работе с аппаратурой
Архитектура шины
Регистры управления
Получение информации о состоянии устройства и об ошибках
Поведение, связанное с использованием прерываний
Механизмы передачи данных
Используйте интеллект нового устройства
Тестирование аппаратуры
Заключение

[Глава 6. Обслуживание ввода/вывода в режиме ядра]
Контекст выполнения программного кода
Контекст исключения или внутреннего прерывания (trap)
Контекст прерывания
Контекст программного потока режима ядра
Приоритеты выполнения программного кода
Обработка прерываний
Прерывания, вызванные программно
Отложенные процедурные вызовы (DPC)
Функционирование DPC
Особенности механизма DPC
Доступ к областям памяти пользовательских приложений
Способы доступа к буферным областям
Общий взгляд на структуру драйвера режима ядра
Процедуры инициализации драйвера и очистки
Процедура DriverEntry
Процедура ре-инициализации
Процедура выгрузки Unload
Процедура Shutdown
Процедура обратного вызова Bugcheck
Рабочие процедуры обслуживания ввода/вывода
Обработчики запросов Open и Close
Процедуры передачи данных
Процедура StartIo
Процедура обслуживания прерываний
Процедуры DPC
Процедуры обратного вызова для синхронизации доступа к ресурсам
Процедура ControllerControl
Процедура AdapterControl
Процедуры SynchCritSection
Другие процедуры драйвера
Таймерные процедуры
Процедура IoCompletion
Процедура CancelRoutine
Последовательность обслуживания запросов ввода/вывода
Предварительная обработка Диспетчером ввода/вывода
Предварительная обработка в драйвере
Старт операции ввода/вывода
Процедура обслуживания прерываний ISR
Пост-обработка, выполняемая драйвером
Пост-обработка, выполняемая Диспетчером ввода/вывода
Заключение

[Глава 7. Приемы программирования в режиме ядра]
Соглашения об описании данных и функций
Дополнительные описатели типов
Квалификаторы IN, OUT, OPTIONAL
Типы возвращаемых значений функций
Соглашения об именах функций драйвера и системных вызовов
Операции с плавающей точкой
Операции с памятью
Вызовы для выделения и освобождения областей виртуальной памяти
Работа с ассоциативными списками
Работа с MDL списками
Функции библиотеки времени выполнения для работы с памятью
Управление размещением кода драйвера в памяти
Определение размещения при компиляции
Динамическое перемещение кода драйвера в страничную память
Проблемы, возникающие при перемещении кода в страничную память
Фиксация страничных секций кода и данных в оперативной памяти
Проверка корректности вызовов кода, размещенного в страничной памяти
Операции над строками UNICODE_STRING
Операции над строками ANSI символов
Функции для работы с файлами
Функции для работы с Системным Реестром
Функции доступа к Системному Реестру, предоставляемые Диспетчером ввода/вывода
Функции RtlXxx прямого доступа к Системному Реестру
Работа с Системным Реестром через вызовы ZwXxx
Функции для работы со ссылками на объекты
Функции для работы с системным представлением времени
Заключение

[Глава 8. Основные процедуры драйвера]
Процедура DriverEntry
Процедура AddDevice
Процедура Unload
Рабочие процедуры драйвера
Пакеты IRР
Заголовок IRP
Ячейки стека ввода/вывода
Рабочие процедуры драйвера
Набор рабочих процедур
Последовательность действий рабочих процедур
Случай 1: Ошибочная ситуация
Случай 2: Завершение работы над IRP запросом
Случай 3: Работа через очереди IRP пакетов
Адресация и доступ к данным в IRP пакетах чтения/записи
Рабочие процедуры обслуживания IOCTL запросов
При методе METHOD_BUFFERED
При методе METHOD_IN_DIRECT и METHOD_OUT_DIRECT
При методе METHOD_NEITHER
Обслуживание прерываний
Процедуры отложенного вызова обслуживания прерываний DpcForIsr
Выполнения кода процедуры DpcForIsr
Отключение от источника прерываний
Заключение

[Глава 9. Драйверная модель WDM]
Развитие спецификации Plug & Play
Программные компоненты Plug and Play
Роль Системного Реестра
Модель WDM и методология PnP
AddDevice - новая процедура в драйверах модели WDM
Роль драйверных слоев в модели WDM
Новые рабочие процедуры в WDM драйверах
Ограничения, накладываемые на WDM драйверы спецификацией PnP
Передача PnP IRP пакетов нижним драйверным слоям
Device Enumeration - всеобщая перепись устройств
Многослойные драйверы
Когда следует применять многослойную архитектуру?
Доводы "за"
Недостатки многослойной архитектуры
Работа с нижними слоями драйверного стека
Создание IRP пакетов вызовами IoBuild(A)SynchronousFsdRequest
Создание IRP пакетов вызовом IoBuildDeviceIoControlRequest
Создание IRP пакетов "с нуля"
Работа с IRP пакетами-репликантами
Удаление IRP пакетов
Заключение

[Глава 10. Программные потоки и синхронизация]
Системные программные потоки
Системные рабочие потоки
Синхронизация в режиме ядра
Интервалы ожидания для отдельного потока
Разделение времени и данных с ISR процедурой
Таймеры и их использование
Потоки как объекты синхронизации
Объекты события
Семафоры
Мьютексы
Спин-блокировки
Исполнительские ресурсы
Группа функций (Ex)InterlockedXxx
Изменение приоритетов как средство синхронизации
DPC процедуры как средство синхронизации
Взаимоблокировки
Заключение

[Глава 11. Обработка аппаратных прерываний]
Постановка эксперимента
Тестовое приспособление CheckIt Loopback Device
Настройка операционной системы
Используемые инструментальные программы
Простейший драйвер для работы с прерываниями
Заголовочный файл Driver.h
Исполняемый код драйвера
Приложение для тестирования драйвера
Дополнительный тест на скорость переноса
Вариант 2. Модификация драйвера для работы с прерываниями
Заголовочный файл Driver.h
Исполняемый код драйвера
Модификация приложения для тестирования драйвера
Заключение

[Глава 12. Инсталляция драйверов при помощи INF файлов]
Структура INF файла
Секции inf-файла и основные общие правила ввода записей
Секция описания версии [Version]
Секция описания поставщика [Manufacturer]
Секция описания моделей аппаратуры [Models]
Замечания по декорированию имен
Секции [DDInstall]
Секция [DDInstall.Services]
Секция [CopyFiles]
Другие секции, определяющие копирование файлов
Секция [SourceDiskNames]
Секция [SourceDiskFiles]
Секция [DestinationDirs]
Примеры описания процедуры копирования файлов
Секция [AddReg]
Значения HKR
Секции [ServiceInstall]
Секция [ClassInstall32]
Секции [DefaultInstall32.Xxx] и [DefaultInstall32.Xxx.Services]
Проверка синтаксиса INF файла
Использование INF файлов
Мастер Установки/удаления новой аппаратуры
Установка PnP устройств
Идентификаторы PnP устройств
PnP идентификаторы PCI устройств
PnP идентификаторы SCSI устройств
PnP идентификаторы IDE устройств
PnP идентификаторы USB устройств
PnP идентификаторы устройств IEEE-1394 (FireWire)
Заключение

[Глава 13. Тестирование и отладка]
Что следует проверять?
Цифровое подписание драйвера
Драйвер отказывается работать?
Аппаратные проблемы
Программные проблемы
Утечка ресурсов
Торможение программных потоков
Проблема приоритетов времени выполнения
Отслеживание ошибок
Отладчики
Отладчик WinDbg
Директории идентификаторов
Директории исходных текстов
Запуск и окончание отладочной сессии
Отладчик SoftIce
Чтение crash-экранов
Голубой экран смерти (BSOD)
Анализ информации Crash Dump файлов
Общие приемы отладки
Установка фиксированных точек прерывания
Промежуточный вывод на экран
Сохранение отладочного кода в исходном тексте драйвера
Перехват некорректных условий
Использование диагностических callback-функций
Обнаружение утечек памяти
Установка параметров загрузки в файле boot.ini
Частные приемы восстановления системы
Заключение

[Приложение А. Коды ошибочных ситуаций]
[Приложение Б. Загрузка операционной системы]
Подготовка к загрузке
Начальная стадия загрузки
Стадия загрузки
Распознавание оборудования
Выбор конфигурации
Загрузка ядра
Инициализация ядра
Вывод на экран информации о процессе загрузки
[Приложение В. Некоторые стандартные параметры описания драйвера в Системном Реестре]
Параметр DisplayName
Параметр ErrorControl
Параметр ImagePath
Параметр Start
Параметр Туре
Параметры подраздела \Enum