Pull to refresh

Comments 60

И что потом делать с этим драйвером на BASIC'е? Все-равно если понадобится потом написать настоящий драйвер для устройства, то лучше выбирать Си (ИМХО).
Странный вопрос. Что делают с драйверами?
Какая разница на чем написан драйвер? Ведь для системы это не имеет значения.
Это имеет значение для людей, которые будут развивать или сопровождать код.
Ну это как минимум выглядит несерьезно. И где вы потом найдете программиста на BASIC'е, который будет разбираться в системном программировании? :-)
Ну зачем использовать Basic?! Я не против языка, но C проще и понятней, тем более в случае системного программирования. А некоторые директивы вообще вводят меня в шок :)

И откуда вы решили — что сейчас начинающие пишут на Basic?
Я не заставляю использовать бейсик или др. язык. Выбирать вам.
Не все, но некоторые начинают с бейсика. Он ИМХО намного проще чем Си, как для понимания так и для разработки.
Проблема в том, что у BASIC'а я не вижу никакого достойного продолжения. Ненавистный мне Pascal и то позволяет программистам в дальнейшем рисовать окошечки и делать еще кучу всякой фигни в Delphi.
Разве вы не смотрели код?
Разве это не создание окна OpenWindow()?
Поэтому вы очень сильно заблуждаетесь насчет возможностей современных диалектов бейсика. Можно не только создавать окошки, но и разрабатывать кроссплатформенные приложения, компилируемые под Windws, Linux, MacOS X, AmigaOS и т. д.
Хорошо, а что насчет моего другого аргумента — где взять программистов?

Вот я, допустим, не скрою, знал BASIC. И не знал тогда еще ничего ни о системеном программировании, ни об ООП, ни вообще об устройстве больших и серьезных программ. Сейчас я могу и драйвер на Си написать (под Linux, правда) и ООП хоть на том же Си не проблема (ага, без плюсов :-). Но без Google'а я не напишу даже HelloWorld'а на BASIC'е.

И так со многими людьми, кто хоть когда-то знал BASIC.
Разве я писал об создании драйверов на профессиональном уровне и призывал всех с Сей и асма переходить на бейсик?

Я извиняюсь, вы на каком диалекте бейсика когда-то кодили?
Судя по всему, это QBasic или сродни ему. PureBasic намного продвинутее его. Релиз данной версии был буквально месяц назад.
И на PureBasic есть относительно серьезные программы, к примеру, торрент клиент — pbTorrent.
Этот материал в первую очередь предназначен для обучения. Нужно ведь с чего-то начинать и при этом по возможности все должно быть не очень сложно. Помните как вы пошли в первый класс в школе? Что вы там учили? Высшую математику или таблицу умножения? Так же и здесь.
Если человек решил написать драйвер, то ему пара взрослеть и завязывать с BASIC'ом. ИМХО, конечно.

Аналогично со школой — если ребенок уже учится в старших классах и изучает математику на более высоком уровне, чем в первом, то абсурдно считать на цветных палочках.
Я поддержу автора статьи. Нет ничего плохого в том, что человек разузнал и попробовал какой-то инструмент. Вдвойне хорошо, что он поделился своим опытом. Теперь и я знаю, что есть некая «хрень», которая позволяет писать драйверы на бейсике. Ну мало ли что, вдруг пригодится? И пусть автор никогда не будет использовать BASIC в рабочих системах (а я надеюсь что это так), опыт всё равно полезен.
Я не отрицаю, что автор молодец в этом плане. Я ему и за топик, и в карму плюсик поставил. Я лишь пытаюсь предостеречь остальных от этого пагубного дела (писать драйвер на BASIC'е).
Так есть понятные примеры в DDK.
Мне кажется, что С знают больше людей, чем Basic, и в этом проблема (с точки зрения «статья для обучения)». Я вот, например, начинал с Pascal, а с Basic ничего общего не имел, и таких как я может быть много. Грустно, что эта статья обходит меня стороной.
Извините, я там со скобками-кавычками напортачил.
Нет ничего проще, чем написать драйвер — поэтому усложним задачу и напишем его на диалекте бейсика!
Что на вас всех бейсик действует как красная тряпка на быка?
Я же привел пример дрова на Brainfuck'е. Вот это реально было бы усложнение задачи.
Why so serious? Вы молодец, что отстаиваете свою позицию.
Драйвера на C проще, т.к. есть готовые декларации функций, поставляемые с WDK.
На другом языке программирования Вам пришлось писать декларации импортируемых функций вручную, и вручную же гарантировать их корректность.
Кстати, стоит упомянуть еще о статическом анализаторе PREFast, который заточен под C.
Дривер на Васике :) Мсье знает толк в извращениях
Хотя… Беру свою насмешку обратно. Прочитал по про ru.wikipedia.org/wiki/PureBasic и подумал, что использовать Васик не так уж и странно в данном случае — не надо ставить многотонные компиляторы и среды разработки. Рабочая среда легко развертывается и не менее легко сносится с компьютера. Для написания примера на тему «да, я смог сделать драйвер» — самое то.
Ага, лучше писать на ассемблере, да?
И если нужно будет перенести его с 32 на 64 бита, ох уж и попотеете при этом! Вот это точно извращение ИМХО!
А выложенный мной пример драйвера, компилируется как под x86, так и под x64 без модификации кода.
Вот для этих целей умные люди и придумали Си. И он далеко не только под x86 и x64 компилируется :-)
Пятница! Драйвер на диалекте basic! Вполне коллерируется! 5 баллов!
Ага, а теперь мы попробуем написать хоть немного функционально нагруженный драйвер и с учетом того, что нам необходимо будет узнать что такое UM-KM transition, IRQL, memory model, I/O model, всякие IDT, GDT, LDT, TSS, как раз и выходит «что-то на грани фантастики». Особенно весело это будет смотреться на бейсике :)
UFO just landed and posted this here
Что-то бейсик всех пугает=) Я знаю одну очень крупную систему в Швеции, которая пишется на VB.Net, причем на Vb.Net пишется не только клиент, но и сервер. Вот так исторически сложилось и НИКАКИХ проблем нет, все работает.
По сути современный Васик от МС может не меньше C#.
Замечательно. Только драйвера ОС немного отличаются от «крупных систем на VB.NET» тем, что они обычно пишутся на С c вставками на ASM. Написать драйвер на диалекте бейсика не проблема, но это всё равно что есть суп шумовкой. Приноровиться можно, но смысл?
UFO just landed and posted this here
В процессе компиляции задействован FASM, поэтому допустимы не только асм. вставки, но и директивы и макросы FASM'а.
Например, в начале кода драйвера есть строка для FASM'а.
!section '.code' code readable executable align 8
Думаю что означает и так понятно.
UFO just landed and posted this here
Оформляйте и выкладывайте. Уверен, это будет интересно не только мне
UFO just landed and posted this here
UFO just landed and posted this here
Трюк в том, что реальный драйвер, который что-то делает, допустим вводит или выводит какие-то данные с устройства — на Си будет проще. Почему? Потому что там внутре у функций ядра все данные представлены в виде структур Си с указателями, адресной арифметикой и прочими прелестями. К ним можно сделать обертку на Бейсике, Паскале, да хоть JavaScript-e, но это всё равно будет оберткой над чужеродными данными.
Странная логика, ведь после компиляции уже неважно на чем написано.
И для системы все рано, бейсик это или Си.
После компиляции — да.
Проблема в коде, который ДО компиляции.
Если, условно, в Бейсике нет понятия «указатель» и «адресная арифметика», а они нужны для работы драйвера, то программисту всё равно придется разобраться с этой адресной арифметикой, а потом пользоваться ей через какие-то кривые функции-обертки, предоставленные библиотеками языка.
Как нет указателей?
Найдите в процедуре DeviceIoControl() драйвера строку *Stack = *pIrp\Tail\Overlay\CurrentStackLocation а чуть выше строка Protected *Stack.IO_STACK_LOCATION
Если не поняли, то это доступ к структуре IO_STACK_LOCATION по указателю, хранимому в поле *pIrp\Tail\Overlay\CurrentStackLocation

И с чего вы решили что нет адресной арифметики?
UFO just landed and posted this here
Что-то я не вижу у вас стандартных танцев с бубном вокруг сертификатов, самоподписей, тест мода и прочих чудес. Вы на 64битах на чем запускали?
Переводил ОС в тестовый режим и запускал.
Подпись драйвера выходит за рамки этой статьи.
UFO just landed and posted this here
Хорошо, может кто-то напишет про что-то подобное для Линукса и на С? :)
Драйвер для Windows, написанный на BASIC… Вам определённо стоит заняться написанием ОС на Ruby или распределённой базы данных на Brainfuck.
Хоть раньше и много писал на VB, но данный диалект вводит меня в ступор.
Все просто.
Если разобраться то ИМХО даже проще и логичнее чем в VB. Работа с памятью и указателями более развита и дает больше свободы действий. Вообще, область решаемых задач шире чем у VB.
Но синтаксис отличается от того, что в VB.
Кода много, описания почти никакого. Новички не поймут, опытные офигеют от ЯП. Смысл не понятен…
Эх… 10 лет назад мы писали курсач «wmd драйвер для перехвата сетевого трафика на wasm». Сколько же было бессонных ночей, сколько нулевых колец, сколько синих экранов, сколько перезагрузок (про виртуальные машины мы тогда и не мечтали). Отладка, естественно, на той же машине, где и разрабатывали. Скучаю по тем дням)
Хм… Такое ощущение, что самплы из ddk глянуть нельзя, на васме нет тутов four-f'а, который проводит их на основе тех же самплов… Очередная копипаста материала, которым и так заполнена сеть. лол, товарищи.
Эту статью я сам писал, так что не гоните про копипасту.
Мессадж не получен. Я имел ввиду, что материал по содержанию отнюдь не свеж. И я не понимаю, какой смысл писать то, что есть в том же ddk на другом языке и выкладывать на хабре.
Может вы гордитесь тем, что написали… даже не велосипед, а спицу от колеса велосипеда на «не си». Я не понимаю, что этот материал делает на хабре.
UFO just landed and posted this here
Я вообще не понимаю зачем делать драйвер для принтера/сканера в виде драйвера, а не user-mode приложения, особенно если этот принтер/сканер сетевой?
Sign up to leave a comment.

Articles

Change theme settings