Помогите понять пожалуйста. Изучаю драйверы. Первый прототип драйвера, который собсно пока ничего не делает, регистрирую как в местных статьях через SCM. Вопрос такой 1. После того как я его загрузил через SCM он в памяти висит или нет? 2. Прописал в свой sys файл DbgPrint. Как мне словить вывод текста потом. Как понял можно использовать программу DbgView, но у меня не выводится никакого текста. 3. Как можно просмотреть установленные драйверы в системе. В том числе и мой? Это из статьи про драйверы на wasm'е, но у меня после служебных программ нет никаких сведений о системе. Очепятка это или просто я туплю?
Есть такая, спасибо большое. А среди этих драйверов нет моего. Это нормально? Или он не должен там появляться после SCM.
Разобрался. Просто кусок кода из статьи скопипасил и толком не разобрал. Действительно он есть там. И он даже что то попискивает из системного динамика при загрузке Хотелось бы только уточнить только вот что: Как мне всё таки прочитать послание из драйвера. В книгах, в статьях пишут - прописывайте DbgPrint и потом отлавливайте её с помощью либо DbgView либо SoftIce. У меня DbgView ничего не показывает. Никаких сообщений.
Да. А на таком драйвере это должно работать? Код (Text): .386 .model flat, stdcall option casemap:none ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; В К Л Ю Ч А Е М Ы Е Ф А Й Л Ы ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: include G:\masm32\include\KmdKit\include\w2k\ntstatus.inc include G:\masm32\include\KmdKit\include\w2k\ntddk.inc include G:\masm32\include\kmdKit\include\w2k\ntdll.inc includelib G:\masm32\include\kmdKit\lib\w2k\ntdll.lib .data MsgIn db "%s",0 Msg db "Egei, i am working",0 ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; К О Д ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: .code ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; DriverEntry ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: DriverEntry proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING invoke DbgPrint,OFFSET MsgIn,OFFSET Msg mov eax, STATUS_DEVICE_CONFIGURATION_ERROR ret DriverEntry endp ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: end DriverEntry
Да. Т.к. ты возвращаешь из DriverEntry ошибку STATUS_DEVICE_CONFIGURATION_ERROR (или любой др. код кроме STATUS_SUCCESS), то драйвер сразу же выгружается из памяти. Так что искать его там через driverquery бесполезно. А с DbgPrint всё нормально - должно работать.
steelfactor В ntstatus.inc это определено как STATUS_DEVICE_CONFIGURATION_ERROR equ 00C0000182h Пишу так, потому что мой драйвер ничего не делает. Сразу выгрузка. Four-F Поигрался с настройками в DbgView, всё равно ничего не видит. Буду пробовать через SoftIce.
Rito Ничего делать не надо. Просто напиши . Этого должно хватить. Four-F же ясно сказал, что ты возвращаешь из DriverEntry STATUS_DEVICE_CONFIGURATION_ERROR, поэтому драйвер сразу же выгружается из памяти и твоих отладочных сообщений не видно. И потом, добавь в драйвер процедуру выгрузки.
Изменил код на такой: Код (Text): DriverEntry proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING invoke DbgPrint,OFFSET MsgIn,OFFSET Msg mov (DRIVER_OBJECT ptr [ebx]).DriverUnload, offset UnLoadDriver mov eax, STATUS_SUCCESS ret DriverEntry endp UnLoadDriver PROC DriverObject:PDRIVER_OBJECT invoke DbgPrint,OFFSET MsgIn,OFFSET Msg ret UnLoadDriver ENDP При первой загрузке у меня вроде как вылезли сообщения, радостный перезагрузил систему, но больше ничего не вылезает? Кстатие тестирую в wmvare. Может из за этого?
Rito После того, как систему перегрузил, твой драйвер загружен? Старт драйвера через SCM подразумевает несколько вариантов загрузки: вручную, при загрузке системы, при старте ОС, (точно не помню, смотри маны). Ты, скорее всего, его стартуешь вручную. При ребуте системы он останется незагруженным, поэтому ты и не видишь отладочных сообщений.
Four-F Ну и накой нужен ваш drvquery.. Сервис системинфо возвратит список дров, если его там нет то это руткит. Ерунду советуешь.
Кажется что-то нащупал. Нашёл программу ServiWin by Nir Sofer. Показывает драйвера, меняет их тип загрузки (boot, manual, disabled, system, automatic). Взял готовый драйвер beep.sys, который выводит писк на системный динамик. Вставил в него DbgPrint. Драйвер перестал пищать. Закоментировал DbgPrint, драйвер опять запищал. Дело то получается в DbgPrint? В ServiWin просмотрел последнюю ошибку: Error 127: Не найдена указанная процедура.
Под ХР+ сервис системинфо больше не возвращает список дров. Из того что есть в системе это можно сделать только с помощью driverquery.
Нашёл проблему. Нашёл отдельно wdm.lib, в котором собраны некоторые функции из DDK. Вставил в свой драйвер. И получил отладочное сообщение. Вернул ntdll.lib - ничего опять не выводится. Код (Text): ;include G:\masm32\include\KmdKit\include\w2k\ntstatus.inc ;include G:\masm32\include\KmdKit\include\w2k\ntddk.inc ;include G:\masm32\include\kmdKit\include\w2k\ntdll.inc ;includelib G:\masm32\include\kmdKit\lib\w2k\ntdll.lib include usewdm.inc includelib wdm.lib .data MsgIn db "%s",0 Msg db "Egei, go in world drivers",0 ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; К О Д ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: .code start: ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; DriverEntry ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: DriverEntry proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING invoke DbgPrint,OFFSET Msg ;mov (DRIVER_OBJECT ptr [ebx]).DriverUnload, offset UnLoadDriver ;mov eax, STATUS_DEVICE_CONFIGURATION_ERROR ret DriverEntry endp UnLoadDriver PROC DriverObject:PDRIVER_OBJECT invoke DbgPrint,OFFSET MsgIn,OFFSET Msg ret UnLoadDriver ENDP end start Даже такой код возвращает моё сообщение. Пробовал ntdll.lib из KmdKit (брал с wasm), пробовал ntdll.lib из WDK (недели две назад скачал с оффициального источника). Ни один не работает. Работает только левый wdm.lib, Что за ересь?