Можно сказать, прочёл всего Мусанифа.
Можно сказать - понравилось.
Вот конкретно про бегемотов, и там всякая другая юморня и понравилась, и не понравилась. Пишет чел просто замечательно.
Явно не Белянин, который, как по мне, писать вообще не умеет.
Рекомендую к прочтению всё.. Чел создал свою собственную Вселенную, и довольно неплохо в ней ориентируется.
Общая оценка... Всё таки - пять.
Цитата: "А марганец при горении выделяет кислород". Афтырь, ты в каком подземном переходе аттестат покупал? В школе преподают предмет под названием - химия. Иди учи двоечник.
Стоит внимания. Есть новизна и сюжет. Есть и ляпы. Ну например трудно потерять арбалет, еще трудней не пойти его поискать, тем более, что он весьма дорогой и удобный. Я слабо представляю, что четверо охотников уходят на охоту без дистанционного оружия и лишь по надобности его берут, тем более, что есть повозка и лошади. Слабо представляю, что охотники за своей жертвой и подранками бегаю с мечами. Имея 4 арбалета и видя волколака автор
подробнее ...
рассказывает нам как его они рассматривают и как он готовится к нападению, дожидаясь атаки. Лишь ГГ успевает нажать на спуск в догон и забыв о перезарядке несётся безоружный за целью, видимо высказать своё устное фи за грубое подталкивание. Ну и как всегда охотники на монстров не имеют элементарной защиты от таких нападений - рогатины и предпочитают служить "кеглями" и летать не имея крыльев. Стандарт вооружения для таких писателей - меч, взяв авторит - ведьмака А. Сапковского. Только у него ведьмаки были уже биомутантами и обучались с детства, имели невероятную реакцию, гибкость, скорость и кучу химии от отравлений и заживление ран от ближнего контакта с чудовищами. Наши простые предки справлялись копьями,луками, собаками, ядом и ловушками. Диванные писатели пишут глупые книги и ссылаясь друг на друга. Да нормальные охотники в лес без хороших как минимум двух обученных собак держать зверя на одном месте на хищника не пойдут, иначе сами станут дичью. Я действительно умных произведений, где хоть чему то можно научиться из реального опыта давно не читал. На фоне прочих авторов оценку ставлю - хорошо и рекомендую представлять в уме более реальные ситуации и не резать монстров ножичком, а сразу колоть зубочисткой.
Пишем драйвер WDM на Ассемблере.
(Комментарии к исходникам AsmDrv)
Часть 1. Цель работы. Постановка задачи.
Признаюсь честно: мне нравится Ассемблер. Вернее, даже не сам Ассемблер, а стиль общения с компьютером через него.
В сети есть несколько примеров создания драйверов виртуальных устройств VxD на Ассемблере.
Но нет ни одного аналогичного примера для драйвера WDM.
Так исправим же эту досадную оплошность!
Создание несложного драйвера с использованием только лишь Ассемблера – довольно трудоёмкое занятие.
По двум причинам:
1) Отсутствие ассемблерных заголовочных файлов для использования драйверного API.
2) Методически трудная отладка драйверов в системе Windows.
Первая причина может быть некритичной. Были бы руки да голова. Ведь известно, что значительная часть заголовков Win32 API была переведена энтузиастами на Ассемблер. И работа эта немалая.
Вторая причина более серьёзна и именно она является сдерживающей. Практически, самым доступным способом отладки является отладочный вывод из самого драйвера. При этом код осторожно дописывается небольшими кусочками.
Однако, теперь у вас будет хороший кусок работающего кода. Мы его сейчас напишем! Изменяя и дополняя его, вы сможете создать свой собственный драйвер, довольно быстро и легко.
Сразу оговорюсь: я не собираюсь подробно объяснять принципы функционирования драйверной системы Windows и растолковывать специальные понятия. Для этого существует специальная литература.
Что нам потребуется? Вот что:
1) Текстовый редактор.
Notepad. Но лучше что-нибудь поудобнее, например, Патриот XP.
2) MS Windows DDK.DDK содержит почти всё, что требуется для создания драйверов. Но нам важны: справка DDK, Ассемблер masm 6.1, компоновщик Link, также оттуда мы возьмём библиотеки и заголовочные файлы для C (что с ними делать – см. далее).
3) Утилита для визуализации отладочного вывода. Я использую DbgView , который можно взять с сайта www.sysinternals.com
4) Delphi для компиляции тестовой программы.
Но вам необязательно набирать текст с нуля. К счастью, я сделал это до вас :)
Скачайте файл с исходниками проекта AsmDrv и распакуйте его в подкаталог \NTDDK\src\AsmDrv.
(http://progrex.narod.ru/sources/AsmDrv.zip)
Вот, кажется, всё. Можно начинать!
Часть 2. API для WDM драйвера.
Большинство функций драйверного API, которые нас интересуют, предоставляются модулем ntoskrnl.exe.
Для их использования надо сделать следующее:
1) Объявить типы данных и определить константы.
Большинство определений для C находятся в файлах ntdef.h и wdm.h.
2) Объявить прототипы функций, которые мы намерены использовать.
Эти определения для C также находятся в wdm.h
3) Выполнить сборку драйвера с подключением библиотеки wdm.lib
Все три файла (wdm.h, ntdef.h и wdm.lib) входят в состав Windows DDK.
Я перевёл часть заголовков на Ассемблер и поместил их в файл usewdm.inc, который находится в базовом каталоге проекта.
Часть 3. Пишем рыбу.
3.1. Итак, приступим.
Вы можете проследить за последовательностью и содержанием действий, открыв файл main.asm для просмотра.
Начнём, пожалуй, так:
.586p ; Процессор Intel Pentium, разрешены инструкции защищённого режима
.model flat, stdcall ; Здесь всё ясно. Плоская модель адресации и тип вызовов stdcall.
option casemap:none ; "case-sensitive"
Дальше нужно задействовать файл включений usewdm.inc и библиотеку wdm.lib, чтобы мы смогли использовать драйверный API:
.include usewdm.inc
.includelib wdm.lib
Затем размещаем два сегмента – данных и кода:
.data
; […]
.code
; […]
3.2. Процедура инициализации
Каждый драйвер имеет процедуру инициализации . Эта процедура вызывается системой сразу после загрузки драйвера в память.
У нас такая процедура называется DriverEntry. Объявим её как
Driver Entry proc near public, DriverObject:PDRIVER_OBJECT, RegistryPath:PUNICODE_STRING
DriverObject – это указатель на служебную структуру, сопоставленную драйверу. Она используется системой для вызова процедур драйвера. Её-то и следует инициализировать – записать в эту структуру адреса соответствующих процедур нашего драйвера.
Наш драйвер довольно прост. Он будет отрабатывать только 4 стандартных запроса:
IRP_MJ_CREATE – Вызов CreateFile() в приложении пользователя для установления связи с драйвером;
IRP_MJ_CLOSE – Вызов CloseHandle() в приложении пользователя для разрыва связи с драйвером;
IRP_MJ_DEVICE_CONTROL – Вызов DeviceIoControl() в приложении пользователя для запроса выполнения какой-либо функции в драйвере.
Все эти три запроса мы адресуем некоей диспетчерской функции OnDispatch. Мы узнаем о ней позже.
Четвёртый запрос – на выгрузку. Об этом пойдёт речь ниже.
А пока необходимо сделать ещё 2 важные вещи – создать логический объект устройства при помощи функции IoCreateDevice() и символическую связь,
Последние комментарии
13 часов 36 минут назад
13 часов 39 минут назад
19 часов 30 минут назад
23 часов 34 минут назад
1 день 10 минут назад
1 день 20 часов назад