Здравсвуйте уважаемые подписчики.
Спасибо lekarion-у у нас по прежнему сохраняются темпы рассылки.
Но это не говорит, что мы не работаем в других направлениях. Решение просто -
пока есть
единый материал подаваемый автором короткими статьями - для сохранения преемственности
мы печатаем его статьи
подряд.
Однако вашей активности почему то на сайте не наблюдаем. В связи с этим есть
просьба высказаться
по этому поводу всех желающих.
Для того чтобы сделать свой выбор относительно рассылки и сайта, сообщите нам
по почте пожалуйста
ответ на следующий вопрос:
Что более важно для вас? Рассылка или сайт?
Для тех кому сайт важнее присылайте пустое письмо с темой Site;
Кому нужна только рассылка, тема Subscribe
Кто хочет чтобы развивалось и то и другое - тема Double
Ну и те кто пробегает глазами рассылку из лени не отписываясь, кликните на адресс
и пришлите письмо с темой Nothing
Адрес: club@shelek.com
Кто выскажет свои соображения - отдельное спасибо заранее.
И еще одно:
ОБЪЯВЛЕНИЕ.
Сайту "Клуб Весельчак У" на длительное время требуются.
1. Желающие печататься - причем темы не охваченные сайтом в плане компьютеризации
и
программирования только приветствуются.
2. Модераторы форумов. Форумы можно посмотреть на сайте club.shelek.com прейдя
в список
форумов из списка "Рубрикатор".
Для модераторов обязательны регулярное посещения форумов, а так же раскрутка
своего форума.
3. Вопросы на любые компьютерные темы на форуме - чем больше, тем лучше. А то
прямо вроде как и вопросов нет ни у кого :)
Ну а теперь сам текст:
Пояснительная записка к Wizard template драйвера типа WDM(ч.3).
Автор: lekarion
Глава 2.
Что мы получаем.
п1. Чем полна наша коробочка.
Итак, запустили мастер в работу со всеми необходимыми настройками и получили
проект, состоящий из 6-и файлов. Пусть имя проекта, заданное в командной строке
мастера было FirstDrv, тогда проект будет содержать файлы:
- FirstDrv.c, FirstDrv.h – соответственно, файл исходного кода и заголовка проекта,
в которых в дальнейшем и будет содержаться исходный код драйвера режима ядра;
фактически, только эти файлы и будут изменятся в ходе разработки проекта, а также
другие, которые уже создадите Вы
- FirstDrv.dsw, FirstDrv.dsp - соответственно, файл рабочего пространства и файл
проекта VS 6.0
- FirstDrv.rc – ресурсный файл проекта; напомню, что этот файл нельзя открывать
стандартным редактором ресурсов VS 6.0, т.к. он не может правильно обработать
сложные макросы, и, поэтому, выдаст ошибку
- FirstDrv.ico – этот файл не требует дополнительных комментариев
Все самое главное для нас сосредоточено в первых двух файлах, а все остальные
менять не стоит, хотя можете поэкспериментировать, но уже за это всю ответственность
будете нести Вы.
п1.1. Вот это стол – на нем сидят, вот это стул – на нем едят!
Выражаясь проще, взглянем же на данные нам природой возможности работать. А работать
мы можем, опираясь на исходный код, который станет для нас базой, исходным пунктом
в разработке.
Самое главное – в какие ворота идти. Посмотрим в проект и… видим, что вход в
драйвер имеет очень “странное” название DriverEntry, ну а если глянуть в настройки
проекта, то можно заметить следующую запись: entry/DriverEntry@8. Именно последнее
и указывает на то, что точкой входа является DriverEntry(), которая принимает
в качестве входных параметров 8 байт, передаваемых ей через стек. Это точно отвечает
прототипу DriverEntry(), объявленному в FirstDrv.c, а он – требованиям к точке
входа драйвера. Это и есть наши ворота.
Открываем настежь врата и идем по дороге из желтого кирпича прямо в Изумрудный
город. А там мы найдем, что ничего особенного тут нет – просто создание символьной
связи, установка обработчиков на необходимые IRP и процедуры обработки подготовки
к выгрузке драйвера.
Я считаю, что далее нет смысла что-либо объяснять, ибо сам код все скажет. Добавлю
лишь одно: способ, который использован там для создания объекта-устройства не
самый лучший и может быть заменен более универсальным, но и более сложным. Для
этого вместо создания объекта-устройства в DriverInitialize() лучше создать обработчик
pDriverObject->DriverExtension->AddDevice, хотя со мной можно поспорить.
По поводу структуры заголовочного файла скажу только то, что в самом его начале
идет авторизация для модуля, который будет получаться после компиляции да еще
одна структурка для иллюстрации работы с DriverExtension.
На этом краткий обзор исходных файлов можно закончить. Дальше уже Вам предстоит
решать какой код добавлять и что обрабатывать. К проекту можно добавлять файлы,
удалять их из него, менять настройки (но я не советую этого делать) и вообще
– работать с ним как с обычным проектом VS 6.0. Дерзайте.
Дополнение. Контроль еще контроль!
Народная мудрость гласит: «Семь раз отмерь, один - отрежь » - это слышали практически
все еще в детстве, но, как оказалось, древние опять правы. Нет, они не знали
про ЭВМ, но основополагающие принципы понимали. Так к чему это я, казалось бы,
а вот к чему. Дело в том, что нечто полученное в результате компиляции может
оказаться… чем угодно, но не драйвером. Все дел в том, что в самом файле содержаться
некоторые флажки, указывающие на принадлежность его к элите драйверов. Из своего
опыта знаю, что эти флажки и то, из каких секций состоит исполняемый модуль,
крайне важно и отдельно оговорено в, я надеюсь, известном Вам PE формате. Кто-то
скажет, что, мол, опять народ надувают, так нет – есть способ проверить и это.
Поэтому я рекомендую каждому проверять то, что у него получается и в какие секции
исполняемого файла оно идет.
Проверка этого очень проста – просто запустить программу, которая раскроет структуру
выбранного файла, и посмотреть там хотя бы на следующее:
- В разделе IMAGE_OPTIONAL_HEADER (PE_ OPTIONAL_HEADER) поле Subsystem должно
быть равным 1 (==NATIVE), означающее, что исполняемый файл не требует подсистемы
для своего пользовательского интерфейса (т.е. скорее всего это драйвер)
- Должна обязательно присутствовать секция кода с именем INIT, и она не должна
быть пустой.
Желательно еще посмотреть и на флажки Magic(==0x010B) и Machine, последний должен
содержать код типа процессора, который может исполнять этот файл (т.е. код типа
Вашего процессора). Более подробно о формате PE можно посмотреть MSDN и/или книгу
М. Питрека «Секреты системного программирования в Windows 95».
Программ, выводящих такую информацию море, но для тех, у кого вообще ничего нет,
могу предложить нечто подобное своего производства или PEview от Wayne J. Radburn.
Все это можно будет вскоре скачать с этого сайта.
http://club.shelek.com - Весельчак У
http://shelek.com - Хостинг
http://shelek.com/bn/ - Баннерная система для обмена рекламой копьютерной направленности.