ЖУРНАЛ «СТА» №2/2006

Н ЕОБХОДИМЫЕ ИНСТРУМЕНТЫ ПРОГРАММИРОВАНИЯ Для решения поставленной задачи используем пакет MASM32 v.8.2, а также комплект разработки драйверов (Windows 2000 Driver Development Kit, DDK), который можно бесплатно скачать с сайта Microsoft (www.micro- soft.com/ddk/ ). К сожалению, фирма Microsoft пакет DDK для ОС Windows XP не выкладывает для свободного доступа, предлагая его получить по почте на CDносителе. И хотя при этом оплачивается только доставка, получение пакета затруднительно. В комплект DDK входят документация (папка help), являющаяся наиболее полным источником информации о внутренних структурах данных и внутрисистемных функциях исполь- зуемых драйверами устройств, вклю- чаемые файлы (*.inc) из папки inc, примеры реализаций драйверов уст- ройств (папка src), утилиты (папка tools). Главное, в DDK входит набор библиотечных файлов (*.lib), необхо- димых при компоновке законченных драйверов и нашего простейшего драйвера в том числе. В DDK есть два комплекта этих файлов — checked build и free build, нам необходим free build (папка libfre) для окончательной версии Windows, называемой свобод- ным выпуском. Функции из библио- течных файлов (папка libchk) отла- дочной версии (checked build) отлича- ются более строгой проверкой оши- бок. Но, увы, не всё так хорошо для прямого использования включаемых файлов, содержащих определения прототипов функций, а также необхо- димых структур, символьных кон- стант и макросов. Есть одна пробле- ма, заключающаяся в том, что все описания в DDK даны из расчёта ис- пользования языка С, в то время как мы хотим воспользоваться «великим и могучим» ассемблером. Если ещё есть утилиты, позволяющие автома- тизировать получение incфайлов для имеющихся libфайлов, то формиро- вание incфайлов, содержащих струк- туры и константы,— это в основном ручной труд. Эту работу в необходи- мом объёме придётся проделать само- стоятельно. Она не из категории твор- ческих, но в Интернете совершенно бесплатно можно найти достаточно полные версии конвертированных для использования с ассемблером incфайлов, и таким образом можно начать не с нуля [1]. К РАТКИЙ ОБЗОР АРХИТЕКТУРЫ W INDOWS В Windows 2000/XP существует чёт- кое разграничение двух областей в оперативной памяти и режимов про- цессора для исполняемого кода: 1) об- ласть исполняемого кода в непривиле- гированном режиме работы процессо- ра (пользовательском режиме) для приложений пользователя и части компонентов ОС, и область исполняе- мого кода операционной системы в привилегированном режиме процес- сора (режиме ядра). Под областью ис- полняемого кода надо понимать об- ласти загрузки (диапазон адресов) в оперативной памяти вычислительной системы. Windows 2000/XP — 32раз- рядная ОС (существующую 64бит- овую версию этой ОС в данной статье не рассматриваем), и поэтому всем приложениям доступно до 4 Гбайт ли- нейного адресного пространства. Ча- ще всего в системе установлен сущест- венно меньший объём физической па- мяти, но тем не менее для работающих программ это незаметно. Специаль- ные системные механизмы обеспечи- вают возможность виртуального при- сутствия 4 Гбайт памяти в системе. Де- ление 4 Гбайт виртуального (или не виртуального, если Вы можете себе это позволить) адресного пространства между пользовательскими приложе- ниями и системными программами осуществляется поровну: первые 2 Гбайт пользовательские, осталь- ное — системное адресное простран- ство. К ограничению свободы трудно привыкнуть, но, как и в наличии зако- нов в стране, в этом есть элемент веко- вой мудрости, накопленной человече- П Р О Г РАММНО Е ОБ Е С П Е Ч Е НИ Е / Д РАЙ В Е Р Ы 69 СТА 2/2006 www.cta.ru ством. Исполняемый код в пользова- тельском режиме имеет ограничения на доступ к системным ресурсам, в ча- стности, на прямой доступ к оборудо- ванию. Это связано с желанием обес- печить более устойчивое функциони- рование системы при наличии ошибок в программах пользователей. Надо учитывать, что Windows проектирова- лась как многозадачная и многополь- зовательская система, поэтому крах одного приложения не должен приво- дить к краху ОС и, следовательно, к краху других пользовательских прило- жений, запущенных на исполнение в этой системе. Приложения ОС и дру- гие программы, исполняющиеся в ре- жиме ядра, имеют полный доступ ко всем ресурсам системы. Упрощённая схема архитектуры Windows [2] приве- дена на рис. 1. Как уже отмечалось, в режиме поль- зователя функционируют не только прикладные программы пользователя, но и часть процессов самой ОС. К компонентам операционной сис- темы, работающим в режиме пользова- теля, относятся: ● некоторые процессы поддержки сис- темы, например процесс обработки входа в систему (Winlogon); ● процессы Windowsсервисов (о сер- висах поговорим чуть позже). В виде сервисов оформлены как некоторые системные сервисы (например Task Scheduler), так и отдельные компо- ненты прикладных программ, на- пример Microsoft SQL Server, а также некоторые драйверы; ● пользовательские приложения. На текущий момент они бывают шести типов: Win32, Win64 (в 64битовой Процессы поддержки системы Процессы сервисов Пользовательские приложения Подсистемы окружения DLL всех систем Ядро Драйверы устройств Исполнительная система Уровень абстрагирования от оборудования Поддержка окон и графики Пользовательский режим Режим ядра Рис. 1. Упрощённая схема архитектуры Windows

RkJQdWJsaXNoZXIy MTQ4NjUy