Pull to refresh

Comments 35

UFO just landed and posted this here
Ну это не драйвер, а кусок кода способного загрузится в кернел мод. Если рассказывать о методе написания драйверов, то уже нужно было что-то полноценное, создать симболик линки, организовать диспатчинг элементарный :)
UFO just landed and posted this here
Тогда и название статье нужно было дать другое. Да и рассказать в конце концов, что такое IRQL, как никак, одно из фундаментальных понятий.
Хорошо, напишу следующую статью про IRQL :)
Не-не-не! Первый драйвер для виндоуз был другим — это был дравер коврика для мышки!
После установки которого появлялось новое устройство — «коврик для мышки» :)))

Если конечно еще кто-то про это помнит ;)
я вам сударь карму не минусовал, самоутверждаетесь?
Спасибо, что не минусовали. Самоутверждаюсь в чем?
Огромное спасибо за статью. Спасибо, что расширяете наш хабра-кругозор. Продолжайте в том же духе.

Также буду благодарен, если посоветуете толковые сайты, ссылки на статьи и так далее. То есть материал для дальнейшего совершенствования и развития. То есть, с чего начинать.

На мой взгляд, основы в этой области не помешают.

Кстати, хотел задать автору вопрос: А как Вы начинали изучать программирование драйверов под Windows?
Спасибо за статью. :) Я думаю имеет смысл продолжать раскрывать тему.

Теперь замечания:

1)
«… почему мы делаем для функции DriverEntry возможность выгрузки в файл подкачки...»
Имелась ввиду UnloadRoutine?

2)
«Итак, после моей предыдущей статьи...»
«Итак, для начала...»
«Итак, теперь сначала...»
«Итак, как уважаемые читатели...»
«Итак, чего же мы достигли...»

Избавтесь от этого паразита. :)
UFO just landed and posted this here
Допустим мне.
Автору спасибо, очень разборчиво и толково написано.
ну и что это? что это за народное творчество? (С)

попытка уместить огромный материал (по которому пишут тома) в одной статье закончится лишь неразберихой в головах новичков. Лучше бы написал хорошую вводную статью. Про архитектуру Windows, в том числе и ядерной ее части, как что работает и что к чему. А потом уже к конкретике. И постепенно. А не так вот, сразу.
PS. Да только не надо излюбленных народом комментариев вида «не нравится — пиши сам». Писал статьи и не раз. Поэтому и комментирую. Это так, к слову и на всякий случай.
Огромное спасибо за критику, в следующий раз последую вашему совету и буду концентрироваться на какой-нибудь небольшой проблеме
я думаю, что стоит одну статью посвещать одному вопросу. чем плотнее и быстрее ты излагаешь, тем хуже усваивается, как правило.
Ага, и мир пополнится еще одной пространной статьей/трудом который будет пылиться на полке у автора… Цель данной статьи, в первую очередь, заинтересовать, а не научить. Попытаться внушить читателю мысль, что написание драйверов — это не так страшно как кажется. А уж если человек заинтересовался, то поискать более конкретный материал по теме он всегда успеет.

Несмотря на всю «неакадимичность», люди предпочитают, почему-то, читать именно туториалы, а не «серьезные труды».
Мда. А карму зачем портить? Или нынче так модно? :)
Да, людям нравится фастфуд, потому что его можно быстро сьесть и не задумываться о его содержании. Так и тут, чем больше и детальнее статья — тем меньше у нее популярность. Уже не раз убедился на своих статьях, когда в комментариях пишут «Да все отлично», а по оценкам видно, что мало кому это нужно. Однако фастфуд никогда не заменит домашней еды. Именно по этому, и потому, что мне нравится порой отвлечься и пографоманствовать, а также поделится знаниями и расположить по полочкам свои, я буду продолжать писать длинные, подробные, хоть и скушные статьи. Кому надо — тот оценит. По этому статьи по архитектуре винды будут, макос — тоже ;)
заинтересовать людей и уж тем более дать понять что это не так «страшно» невозможно такой концентрацией нового материала. человек прочтет, найдет много новых слов и просто его заломает разбираться.

уже проверено на «крысах», так сказать, поэтому это не просто пустые слова.
Ну не знаю… Исходя из моего опыта преподавания как программирования вообще, так и Linux-а в частности, могу сказать, что подобные «атомарные» знания дают гораздо больше эффекта, нежели пространные витийствования на тему. Людям надо дать зацепку. Пусть даже они не поймут все и сразу, но зато что-то останется в памяти, и при случае можно дать этому ход.

Подход «а-ля матан» мне категорически не нравится. Человека грузят 5-10 леммами (с доказательствами) только для того, чтобы потом доказать основную теорему: «как очевидно следует из бла и бла бла» (которые были 15 страниц назад). В результате, 90% людей вообще не помнят и не понимают о чем речь.

Цель — научиться писать драйвера а не читать лекции по устройству современных ОС. В данном случае, мы идем от поставленной задачи, а не от «идеи».

P.S: Я не говорю что «только так и никак иначе». Истина, как всегда, находится где-то посередине. То есть, некоторые вещи можно подкинуть так, другие выводить планомерно.

P.P.S: Может быть, автор данного топика слишком углубился в технологию, тогда как можно было описать то же самое на более уровне, а уже потом подводить к собственно сабжу. Но это не нам судить, а как минимум тем людям что поставили теме 80 плюсов. Наверное, кому-то все таки интересно? ;)
>>Подход «а-ля матан» мне категорически не нравится. Человека грузят 5-10 леммами (с доказательствами) только для того, чтобы потом доказать основную теорему: «как очевидно следует из бла и бла бла» (которые были 15 страниц назад).

По-моему, вполне нормальный подход. Предложите более «педагогичное», по вашему мнению, изложение математического анализа:)
Правда, я не вижу особой связи с программировнанием, поскольку здест доказывать ничего не нужно.

>> В результате, 90% людей вообще не помнят и не понимают о чем речь
значит, не дано им понять. «на зеркало неча пенять, коли рожа крива». в смысле, что если человек, извиняюсь, тупой, то как не излагай, все равно не поймет.
По-моему, вполне нормальный подход.

Для математического анализа да, но никак не для IT ресурса. Еще раз повторяю — способ подачи материала определяется конечной целью.

значит, не дано им понять. «на зеркало неча пенять, коли рожа крива». в смысле, что если человек, извиняюсь, тупой, то как не излагай, все равно не поймет.

Тогда не называйте себя учителем. Еще Эйнштейн говорил, что объяснять надо так, чтобы вас поняла глуховатая 80ти летняя бабка. Вы демонстрируете типичный подход преподавателя музыки: «музыка для одаренных, и не фиг сюда соваться всяким бездарям». Благодаря чему, огромное количество людей, имеющих желание изучить это дело, но не обладающих «талантом» теряется еще «на дальних подступах».

Вообще довольно странно вести эту беседу. С одной стороны вы утверждаете что имеете опыт, с другой демонстрируете полнейшее равнодушие к слушателю. Не представляю, как с таким подходом можно хоть чему-то научить. Вернее научить то можно, но это произойдет скорее вопреки а не благодаря вашим усилиям.
:)
мы отвлеклись от темы.
ты утверждаешь, что изллагать надо предельно ясно, я согласен, но когда я прочитал статью выше, поймал себя на мысли, что если бы я не знал изложенного материала ранее, я бы ничего не понял. мысль часто сбивается и не совсем понятно что же хотели донести. ощущение, что автору уреазли объем и сказали — впихни сюда максимум информации. и он впихнул.
По поводу сборки: можно не пользоваться build из ddk (хотя MS это крайне рекомендуют, но не будет ничего страшного, если собирать драйвер средствами Visual Studio).
можно создать обычный проект в студии, например консольного приложения, и произвести там некоторые манипуляции, например выставить тип подсистемы Native, линковку с ntoskrnl.lib, hal.lib и проч.

>> Для того, чтобы выводить отладочные сообщения мы используем функцию DbgPrint, которая имеет синтаксис, аналогичной функции printf из пользовательского режима (userspace).
Не совсем — у нее есть одна очень прикольная фенечка для вывода UNICODE_STRING: %wZ
Есть аналогичная вроде для ANSI_STRING, но ее я не запоминал ввиду не особой её необходимости.

Для отладки еще потребуется Debugging tools for Windows и символы для компонентов ядра.
И виртуальная машина. Дебажить дрова на той же тачке я бы крайне не рекомендовал. Ну и соотв. DbgView тогда не потребуется
кстати, стоит заметить:

>> В этом простом примере мы использовали также директивы #pragma alloc_text(INIT, DriverEntry) и #pragma alloc_text(PAGE, UnloadRoutine). Объясню что они означают:… Вторая помечает код функции UnloadRoutine как выгружаемый, т.е. при необходимости, система может переместить его в файл подкачки, а потом забрать его оттуда.

… заметить, что выгружаемыми по умолчанию считаются все секции, имена которых начинаются на 'PAGE'
Например, PAGEKD, PAGEMY, PAGE,…
Спасибо за статью, очень полезно и понятно :-)
Sign up to leave a comment.

Articles