
- •Структура wdm-драйвера
- •Ознакомиться с материалом, ответить на контрольные вопросы
- •2000 Поставляется с двумя подсистемами, а в Windows xp, кроме Win32,
- •1.2 Типы драйверов
- •1.4 Иерархия устройств и драйверов
- •IoInvalidateDeviceRelations, сообщая диспетчеру PnP список
- •1.5 Порядок загрузки драйверов
Структура wdm-драйвера
Ознакомиться с материалом, ответить на контрольные вопросы
WDM (Windows Driver Model) была разработана для стандартизации
драйверов и требований к ним. WDM-драйверы используются, начиная с
операционной системы Windows 98. Такой драйвер представляет собой контейнер
для функций, вызываемых операционной системой. Упрощенное представление о
концепции WDM-драйвера дает рисунок 1.1 [3].
Рисунок 1.1 – Драйвер, как контейнер функций
Некоторые из указанных функций являются обязательными для каждого
драйвера. Это функции DriverEntry, AddDevice, а также диспетчерские функции
для некоторых типов запросов ввода-вывода IRP. Драйверы, использующие
очереди, обычно содержат функцию StartIo. Драйверы, осуществляющие
передачу данных по каналам прямого доступа к памяти содержат функцию
AdapterControl. Драйверы, работающие с прерываниями, содержат обработчики
прерываний (ISR – Interrupt Service Routine), а также функции отложенного
вызовапроцедур (DPC – Deffered Procedure Call). Большая часть драйверов
кроме трех необходимых диспетчерских функций содержат другие диспетчерские функции для нескольких типов IRP.
1.1 Назначение драйвера
В Windows NT5 существует четкое разграничение двух областей в
оперативной памяти и режимов процессора для исполняемого кода [1]:
− область исполняемого кода в непривилегированном режиме работы
процессора (пользовательском режиме) для приложений пользователя и
части компонентов операционной системы, и
− область исполняемого кода операционной системы в привилегированном
режиме процессора (режиме ядра).
Под областью исполняемого кода надо понимать области загрузки
(диапазон адресов) в оперативной памяти вычислительной системы. Windows
2000/XP — 32-разрядная операционная система (64-разрядную версию этой
операционной системы в данном пособии не рассматриваем), и поэтому всем
приложениям доступно до 4 Гбайт линейного адресного пространства. Часто в системе установлен меньший объем физической памяти, но, тем не менее, для работающих программ это незаметно. Специальные системные механизмы обеспечивают возможность виртуального присутствия 4 Гбайт памяти в системе
[4]. Деление 4 Гбайт виртуального (или не виртуального, если вы можете себе это позволить) адресного пространства между пользовательскими приложениями и системными программами осуществляется поровну: первые 2 Гбайт пользовательские, остальное — системное адресное пространство.
Исполняемый код в пользовательском режиме имеет ограничения на доступ
к системным ресурсам, в частности, на прямой доступ к оборудованию. Это
связано с желанием обеспечить более устойчивое функционирование системы при наличии ошибок в программах пользователей. Надо учитывать, что Windows проектировалась как многозадачная и многопользовательская система, поэтому крах одного приложения не должен приводить к краху операционной системы и, следовательно, к краху других пользовательских приложений, запущенных на исполнение в этой системе. Приложения операционной системы и другие программы, исполняющиеся в режиме ядра, имеют полный доступ ко всем ресурсам системы. Упрощенная схема архитектуры Windows NT [1,2] приведена на рисунке 1.2.
Рисунок 1.2 – Упрощенная схема архитектуры Windows NT5
Как уже отмечалось, в режиме пользователя функционируют не только
прикладные программы пользователя, но и часть процессов самой операционной системы.
К компонентам операционной системы, работающим в режиме пользова-
теля, относятся:
− некоторые процессы поддержки системы, например процесс обработки
входа в систему (Winlogon);
− процессы Windows-сервисов. В виде сервисов оформлены как некоторые
системные сервисы (например Task Scheduler), так и отдельные компо-
ненты прикладных программ, например Microsoft SQL Server, а также
некоторые драйверы;
− пользовательские приложения. На текущий момент они бывают шести
типов: Win32, Win64 (в 64-битовой версии системы), Windows 3.1, MSDOS,
POSIX и OS/2;
− подсистемы окружения. Это часть операционной системы (программные
оболочки), предоставляющая приложениям пользователя определенный
для конкретной подсистемы набор функций. Windows обеспечивает
работу с тремя подсистемами окружения: Win32, POSIX и OS/2. Windows