Разроботка наипростейшего драйвера
В универе для курсовой нужно написать любой драйвер. С таким низкоуровневым программированием не сталкивался. Подскажите пожалуйста какой самый простой можно написать, затрачивая на обучение и написание сие. Навыки ASM, C есть :) XP DDK тоже есть :)
заранее спасибо :)
Ну изобрети велосипед - напиши драйвер мышки с инверсией кнопок и колесика.
во вторых драйвер не обяхан быть "драйвером" устройства
в третьих в DDK есть примеры только они на C++ но я думаю тебе составит проблем переписать с с++ на асм
в четвёртых для написания драйверов на асме не обязательно устанавливать DDK (только ради документации).
в пятых как ты докажешь что драйвер сейчас запущен и работает и в списке служб он не выводится (но это решается дополнительными манипуляциями с реестром)
ведь из драйвера не вызовешь
MessageBox(0,"First Driver","Hello, World!",0);
В шестых если училка не слишком шарит в этом просто создай любую службу и назови её "Very Cool Driver!" , я уверен что если училка не слишком прошаренная, то она будет в востроге
если
может посоветуешь что ?
после установки в устройствах пойвляется новый девайс ) .
ну один написал драйвер управление лампочкой Num lock на клавиатуре:) это сложно ? и где можно информацию об этом почитать ?
а вообще то для управления этими лампочками есть специальные API функции и никаких дров не надо (и угля не надо и газа не надо :-))
Дык, сам же говоришь - любой драйвер. И ahilles тебе уже сказал, что он не обязан быть драйвером какого-нибудь устройства.
Покажи в драйвере то, что невозможно сделать в юзермоде.
UserPort - и получи такой драйвер с исходниками. посмотри что-как и сделай попроще ( там к нему прилагается программа, для настройки - какие порты открывать, а ты просто открой к примеру COM1 )
Вот тебе и будет - простейший драйвер.
а ещё лучше зделать в железе радиоуправлямого роботика , с каналом управы через ком или лпт . тогда по программированию до пятого курса отлично будут ставить . у мя с парал потока чел прогу по распознаванию сварганил (а мож стащил откудато ) . так он её как курсовик по 6 предметам здал как курсовик (ловкость рук и т.д.) . вот как надо ))
к LPT и COM можно обращаться и в "юзер мод" через createfile и т.д.
http://www.wasm.ru/docs/1/kmdtut.zip есть много интересного.
Цитата: Scaiman
http://www.wasm.ru/docs/1/kmdtut.zip есть много интересного.
читаю остановиться немогу :) большое спасибо :)
*если тут есть репутация, подниму :)
Правильно ли я понял, рабочая область оперативки разделена пополам: на уровень ядра (системный) и пользовательский. При загрузке приложения к выполнению, он загружается в пользовательский, при загрузке драйвера (драйвер это и есть лишь реализация приложения для режима ядра) соответственно в режим ядра. Ассемблерный код для ядра имеет гораздо шире возможности, посылания различных сигналов на различные порты. А для пользователя - беднее возможности. Соответственно тот код, или функция, который обращается к портам, должен содержаться в теле файла драйвера (sys) и этот код обязательно должен быть в режиме ядра.
Вопрос: Можно ли из области ядра вызывать апи функцию из dll ?
Насколько я знаю dll не загружаются в область ядра.
Существует например hal.dll который допустим может отправлять сигналы на пс-спикер. Получается соответствующая функция обращатся к диспетчеру ввода-вывода и затем уже к какому-то стороннему драйверу ?
или например написав драйвер beeper.sys , он ссылается на функцию из hal.dll. То есть он из системной зоны адресуется в зону пользователей, оттуда вызывает функцию, которая в свою очередь делает запрос на ядро и вызывает соответствующий код в другом драйвере ?
Верно ?
И еще вопрос, в MS DOS похоже нет разделения на ядра и пользователя, там везде полномочия ядра :) и можно вызвать абсолютно любое прерывание. Хоть чтение диска на таком то цилиндре, такойто дорожке итд...
А как с этим обстоит в Windows ? например известна функция API регистрации окна в системе. Как она работает ? она посылает запрос на диспетчер ввода вывода, отправляет команду на драйвер системы. И вызывает прерывание,... в результате создает новое окно с дескриптом личным. Или как ?
Очень скоро все сдавать просто, заранее спасибо :)
hal.dll загружна в память ядра
во вторых
в MS DOS процессор работает в реальном режиме
а Windows работает в защищённом режиме
в третьих
фактически дескриптор по определению 64 битная структура и описывает сегмент памяти, а окно это объект ядра а то значение которое ты получаешь от функции CreateWindow и FindWindow это всего лишь индекс записи в некотрой таблице этого процесса и в этой записи есть реальное смещение на структуру данных в памяти ядра которая описывает этот объект (конечно объект окна это плохой пример но тем не менее)
в четвёртых
читай книжки
Подскажи пожалуйста простые книжки. Чтоб доходчиво и понятно было ) в ближайшие сроки просто надо успеть :(
"Создание эффективных WIN32-приложений
с учетом специфики 64-разрядной версии Windows "
не помню где качал