Читаем Восстановление данных. Практическое руководство полностью

Перенести драйвер Windows в Linux/BSD вполне реально! Для этого даже не потребуется его исходный код. Достаточно лишь написать тонкий и несложный "переходник" между драйвером и операционной системой, принимающий запросы и транслирующий их по всем правилами "этикета", а также перенести библиотеку функций, необходимых драйверу для работы. Конечно, для этого необходимо уметь программировать! Для простых пользователей такой рецепт совершенно не годится, но тут уж ничего не поделаешь. Тем не менее, перенести готовый драйвер намного проще, чем переписать его с нуля. Нам не потребуется проводить кропотливую работу по дизассемблированию оригинального кода, заменяющую собой поиск технической документации (которая либо совсем отсутствует, либо отдается только под подписку о неразглашении, зачастую запрещающую открытое распространение исходных текстов). Наконец, при выходе новых версий драйвера Windows процедура его переноса в Linux/BSD проста до тривиальности — достаточно скопировать новый файл поверх старого файла. Однако все это лишь сухая теория. Перейдем к деталям.

Модель ядра Windows NT и всех производных от нее операционных систем (включая Windows 2000, XP, 2003, Longhorn) достаточно проста (рис. 8.3). С "внешним" миром ядро связывает диспетчер системных сервисов, "подключенный" к NTDLL.DLL, которая находится уже за "скорлупой" ядра и исполняется в режиме пользователя. Диспетчер системных сервисов, реализованный в NTOSKRNL.EXE, опирается на вызываемые интерфейсы ядра, часть которых реализована в самом файле NTOSKRNL.EXE, а часть — во внешних драйверах, к числу которых, в частности, принадлежит диспетчер питания. Определенный класс драйверов, называемый драйверами устройств и файловой системы, находится в своеобразной "скорлупе" и взаимодействует с диспетчером системных вызовов через диспетчер ввода-вывода, реализованный опять-таки в NTOSKRNL.EXE!

Рис. 8.3. Архитектура систем из семейства Windows NT

Ядро, на котором, как на фундаменте, держатся все вышеупомянутые компоненты, представляет собой просто совокупность низкоуровневых функций, сосредоточенных в NTOSKRNL.EXE. Ниже находится только уровень аппаратных абстракций (Hardware Abstraction Level, HAL). Когда-то у Microsoft была идея разделить ядро на системно-зависимую и системно-независимую части, чтобы упростить перенос Windows на другие платформы. Однако уже во времена Windows NT 4 все перемешалось, и большая часть системно-зависимых функций попала в NTOSKRNL.EXE. На сегодняшний день ситуация такова, что HAL медленно, но неотвратимо умирает. В нем осталось небольшое количество действительно низкоуровневых функций, непосредственно взаимодействующих с оборудованием, например, с портами и с DMA. Но в ядре Linux/BSD есть свои функции для работы с DMA, так что тащить за собой HAL нам совершенно необязательно, тем более что драйверы взаимодействуют с DMA не напрямую, а через диспетчер Plug and Play, который находится в NTOSKRNL.EXE.

Что же касается портов ввода-вывода, то, например, дизассемблированный текст функции READ_PORT_UCHAR, читающий из данного порта беззнаковый байт, выглядит, как показано в листинге 8.1.

Листинг 8.1. Дизассемблированный листинг функции READ_PORT_UCHAR, выдернутой из HAL

.text:80015A2C

.text:80015А2С                 public READ_PORT_UCHAR

.text:80015A2C READ_PORT_UCHAR proc near

               ; CODE XREF: HalGetEnvironmentVariable+2C↑p

.text:80015A2C ; HalSetEnvironmentVariable+3D↑p

.text:80015A2C

.text:80015A2C arg_0           = dword ptr 4

.text:80015A2C

.text:80015A2C                 xor eax, eax

.text:80015A2E                 mov edx, [esp+arg_0]

.text:80015A32                 in al, dx

.text:80015A33                 retn 4

.text:80015A33 READ_PORT_UCHAR endp

Иначе говоря, если заставить NTOSKRNL.EXE работать в чужеродной среде Linux или BSD, мы получим возможность запускать любые драйверы Windows NT без какой-либо доработки их двоичного кода. Это не только упрощает задачу переноса, но и снимает проблему авторских прав. Любой обладатель лицензионной копии Windows (или другой программы) вправе вызывать готовый драйвер откуда угодно без каких бы то ни было разрешений и без выплаты дополнительного вознаграждения, но вот модифицировать двоичный код ему позволят едва ли.

Перейти на страницу:

Похожие книги

GPS: Все, что Вы хотели знать, но боялись спросить
GPS: Все, что Вы хотели знать, но боялись спросить

Определение своего положения с помощью GPS навигатора, отдельного прибора, или устройства, встроенного в карманный компьютер или сотовый телефон, уже стало совершенно обычной вещью.Постепенно столь же привычным становится определение положения объекта с помощью систем телематики на основе GPS/GSM/GPRS, когда на мониторе компьютера или экранчике сотового телефона можно увидеть участок карты с отметкой, где находится другой человек или его автомобиль.«GPS» — это первые буквы английских слов «Global Positioning System» — глобальная система местоопределения. GPS состоит из 24 искуственных спутников Земли, сети наземных станций слежения за ними и неограниченного количества пользовательских приемников-вычислителей. «GPS» предзначенна для определения текущих координат пользователя на поверхности Земли или в околоземном пространстве.По радиосигналам спутников GPS-приемники пользователей устойчиво и точно определют текущие координаты местоположения. Погрешности не превышают десятков метров. Этого вполне достаточно для решения задач НАВИГАЦИИ подвижных объектов (самолеты, корабли, космические аппараты, автомобили и т.д.).Как и многие многоцелевые вещи в нашем быту, приемник системы глобального позиционирования (GPS) по мере знакомства с ним обнаруживает массу полезных свойств, даже сверх тех, для которых он был приобретен первоначально. Оказывается существует много любопытных вопросов, на который он с легкостью отвечает, — например, какую скорость вы развиваете при ходьбе, какое расстояние вы преодолеваете при занятии бегом и с какой максимальной и средней скоростью, какую скорость вы развили, спускаясь с горы на лыжах, насколько точен спидометр вашего автомобиля и т. д. Однако основное его назначение — определение координат.

Б. К. Леонтьев , Борис Константинович Леонтьев

Компьютерное 'железо' (аппаратное обеспечение), цифровая обработка сигналов / Компьютерное «железо» / Книги по IT
Wi-Fi: Все, что Вы хотели знать, но боялись спросить
Wi-Fi: Все, что Вы хотели знать, но боялись спросить

Жизнь современного человека — это движение. Мобильность для нас становится одним из самых важных моментов для работы, для общения, для жизни. Многие из нас сейчас уже не представляют жизнь без сотовых телефонов, которые из средства роскоши превратились в предмет, без которого жизнь современного человека стала просто немыслима. Многие уже оценили все преимущества Bluetooth, GPRS. Эти устройства превратили наши телефоны из средств связи в незаменимых помощников в работе. К сожалению, один из самых главных недостатков этих беспроводных технологий — малый радиус действия и низкая скорость передачи данных, что сейчас становится очень важным фактором для всех нас. Поэтому к нам на помощь приходит активно развивающийся во всем мире и в России стандарт Wi-Fi. Особенно радует, что в крупных городах России, особенно в Москве и Санкт-Петербурге, начинается массовое внедрение беспроводных сетей Wi-Fi в публичных местах (так называемых Hot Spot) — отелях, аэропортах, ресторанах, торговых центрах и кафе.Что же такое Wi-Fi? Очередной мыльный пузырь IT-индустрии, который изо всех сил надувают производители и поставщики телекоммуникационного оборудования или новая технология, призванная в очередной раз изменить наш привычный мир, как это случилось когда-то с появлением Интернет и сотовой связи?

А К Щербаков , А. К. Щербаков

Компьютерное 'железо' (аппаратное обеспечение), цифровая обработка сигналов / Интернет / Компьютерное «железо» / Книги по IT
Аппаратные интерфейсы ПК
Аппаратные интерфейсы ПК

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

Михаил Юрьевич Гук

Компьютерное 'железо' (аппаратное обеспечение), цифровая обработка сигналов