Туттуру, двачик!Я начал изучать книгу "Использование Windows Driver Model", 2003-го года издания. У меня есть маленький опыт погромирования (именно погромирования) на С-подобных языках. Писал полезные только для себя утилиты. Должен сказать, что моя основная профессия никак не связана с программированием, и с компьютерами вообще.Зачем мне это? Да просто так, хочется изучить новые вещи.Почему не использовать новый стандарт от Microsoft - Windows Driver Foundation? Для меня это сложно.Если анону интересна данная тема, то будет продолжение. По мере того, как я буду читать книгу, а в ней почти 800 страниц. Если есть желание заниматься этим вместе со мной-добро пожаловать, пиши на мэйл prepare.yr.anus собачка gmail.com.
буду бампать киберпанком
Что мне понадобится?1) Oracle Virtual Box с установленной на ВМ Windows XP. Почему ХР, это говно мамонта? Потому что она не требует от драйвера цифровой подписи. Конечно, можно Windows 7 заставить загрузить неподписанный драйвер, для этого нужно много телодвижений.2) Установленный на ВМ Windows Kriver Kit версии 7. Эта версия, кстати, подходит для операционных систем до Windows Server 20083) Набор из двух утилит: Dbgview.exe и INSTDRV.EXE. Можно скачать отсюда, trojans included, kekeke https://drive.google.com/file/d/0B4VU1az7IrixQUFTSFhHSXNGRk0/view?usp=sharing
Сегодня я напишу простейший драйвер. Типа hello world. Драйвер, понимаешь, это то же приложение, как блокнот, например. Только исполняется он в нулевом кольце, самом привелигированном. Таким образом, на драйвер ложится огромная ответственность. Ибо при сбое драйвера есть шанс утянуть ОС в синий экран. Поэтому лучше использовать ВМ.Итак, драйвер WDM должен иметь обязательно функцию DriverEntry, это как функция main() в обычных с-программах. Собственно говоря, это единственное обязательное требование.Крайне желательно иметь в драйвере функцию DriverUnload, которая будет заниматься очисткой ресурсов драйвера при выгрузке его из памяти. В моем примере функция DriverEntry занимается тем, что заполняет структуру объекта драйвера, приветствует и возвращает успешный результат выполнения. Структура объекта драйвера имеет много полей, которые мне пока не нужны.
Неужели никому не интересно?
бамп святым Фордом
Собственно, вот код самого простого драйвера, который ничего не умеет, только говорит "Привет" и "Пока". Не знаю, будет ли он хорошо отображаться на двачике.#include "ntddk.h"VOID OnUnload(IN PDRIVER_OBJECT DriverObject){ DbgPrint("On Unload\n");}NTSTATUS DriverEntry (IN PDRIVER_OBJECT theDriverObject, IN PUNICODE_STRING theRegistryPath){ DbgPrint("Hello World!\n"); theDriverObject->DriverUnload = OnUnload; return STATUS_SUCCESS;}Я думаю, лучше создать директорию для проектов. Важно, чтобы имя директории не содержало пробелы и табуляцию. Сохрани этот код под именем "simpledriver.c". Помимо файлов источников проект драйвера должен иметь еще как имниум два файла: sources и makefile, оба без расширений.Содержимое sources:TARGETNAME=SIMPLEDRIVERTARGETPATH=OBJTARGETTYPE=DRIVERSOURCES=simpledriver.cИ содержимое makefile!INCLUDE $(NTMAKEENV)\makefile.defСамые ленивые могут скачать исходники для ОС Windows XP SP3 x86 https://drive.google.com/file/d/0B4VU1az7IrixNEM2MnJHdWE4WGc/view?usp=sharing
>>127445821все же не очень. надо убрать символы табуляции "\t"
Теперь у меня есть все, что нужно для создания драйвера. Запускаю компилятор "Start\Все программы\Windows Driver Kits\WDK 7600.16385.1\Build Environments\Windows XP\x86 Checked Build Environment". Если другая ОС, соответственно, нужно выбрать другое. Есть еще x86 Free Build Environment, но это не важно, если не надо запускать драйвер в другой ОС.Перехожу в директорию с проектами. Компилятор запускается одной командой - buildПри успехе в директории "objchk_wxp_x86\i386" появляется файл драйвера simpledriver.sys
Очередь за утилитами, о котрых я упомянул ранее. Для начала надо запустить Dbgview, дабы увидеть сообщения от драйвера. Неоходимо включить отображение сообщений ядра (capture kernel). С помощью InstDrv мой драйвер устанавливается (Install) и запускается (Start). Если в поле status появляется "operation was successfull", то все хорошо.Dbgview должен был уже отобразить приветствие, которое мой драйвер выводит с помощью функции DbgPrint. Если нажать Stop в InstDrv, то мой драйвер отобразит еще и сторку "On Unload", перестанет функционировать и выгрузится из памяти.
Собственно говоря, это все. Очень жаль, что никто не заинтересовался этим. Было бы прикольно освоить книгу и технологию, соревнуясь с аноном. Но нет так нет
>>127449016Рряя, Оп очередной титан одиночества?