Драйверы. Начало пути.

Тема в разделе "WASM.BEGINNERS", создана пользователем Rito, 5 ноя 2008.

  1. Rito

    Rito New Member

    Публикаций:
    0
    Регистрация:
    30 май 2008
    Сообщения:
    59
    Помогите понять пожалуйста.
    Изучаю драйверы. Первый прототип драйвера, который собсно пока ничего не делает, регистрирую как в местных статьях через SCM. Вопрос такой
    1. После того как я его загрузил через SCM он в памяти висит или нет?
    2. Прописал в свой sys файл DbgPrint. Как мне словить вывод текста потом. Как понял можно использовать программу DbgView, но у меня не выводится никакого текста.
    3. Как можно просмотреть установленные драйверы в системе. В том числе и мой?

    Это из статьи про драйверы на wasm'е, но у меня после служебных программ нет никаких сведений о системе. Очепятка это или просто я туплю?
     
  2. Wisder

    Wisder New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    30
    Может это - Пуск->Все программы->Стандартные->Служебные->Сведения о системе ? (XP)
     
  3. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Нет не опечатка. Это в w2k было. В ХР убрали. Где-то в system32 должна лежать утиль driverquery.exe.
     
  4. Rito

    Rito New Member

    Публикаций:
    0
    Регистрация:
    30 май 2008
    Сообщения:
    59
    Есть такая, спасибо большое.
    А среди этих драйверов нет моего. Это нормально? Или он не должен там появляться после SCM.
     
  5. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Да вроде должен быть.
     
  6. Rito

    Rito New Member

    Публикаций:
    0
    Регистрация:
    30 май 2008
    Сообщения:
    59
    Разобрался. Просто кусок кода из статьи скопипасил и толком не разобрал. :) Действительно он есть там. И он даже что то попискивает из системного динамика при загрузке:)
    Хотелось бы только уточнить только вот что:
    Как мне всё таки прочитать послание из драйвера. В книгах, в статьях пишут - прописывайте DbgPrint и потом отлавливайте её с помощью либо DbgView либо SoftIce. У меня DbgView ничего не показывает. Никаких сообщений.
     
  7. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Capture > Capture Kernel почекана?
     
  8. Rito

    Rito New Member

    Публикаций:
    0
    Регистрация:
    30 май 2008
    Сообщения:
    59
    Да.
    А на таком драйвере это должно работать?
    Код (Text):
    1.  .386
    2.  .model flat, stdcall
    3.  option casemap:none
    4.  
    5.  ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    6.  ;                              В К Л Ю Ч А Е М Ы Е    Ф А Й Л Ы                                    
    7.  ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    8.  
    9.  include G:\masm32\include\KmdKit\include\w2k\ntstatus.inc
    10.  include G:\masm32\include\KmdKit\include\w2k\ntddk.inc
    11. include G:\masm32\include\kmdKit\include\w2k\ntdll.inc
    12. includelib G:\masm32\include\kmdKit\lib\w2k\ntdll.lib
    13.  
    14. .data
    15. MsgIn       db  "%s",0
    16. Msg     db  "Egei, i am working",0
    17.  
    18.  ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    19.  ;                                              К О Д                                                
    20.  ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    21.  
    22.  .code
    23.  
    24.  ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    25.  ;                                       DriverEntry                                                
    26.  ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    27.  
    28.  DriverEntry proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING
    29.  
    30.     invoke  DbgPrint,OFFSET MsgIn,OFFSET Msg
    31.  
    32.      mov eax, STATUS_DEVICE_CONFIGURATION_ERROR
    33.  
    34.      ret
    35.  
    36.  DriverEntry endp
    37.  
    38.  ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    39.  ;                                                                                                  
    40.  ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    41.  
    42.  end DriverEntry
     
  9. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    Rito
    Шрайбера почитай, для начала, или Солдатова на худой конец...
    Это что?
     
  10. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Да.

    Т.к. ты возвращаешь из DriverEntry ошибку STATUS_DEVICE_CONFIGURATION_ERROR (или любой др. код кроме STATUS_SUCCESS), то драйвер сразу же выгружается из памяти. Так что искать его там через driverquery бесполезно. А с DbgPrint всё нормально - должно работать.
     
  11. Rito

    Rito New Member

    Публикаций:
    0
    Регистрация:
    30 май 2008
    Сообщения:
    59
    steelfactor
    В ntstatus.inc это определено как
    STATUS_DEVICE_CONFIGURATION_ERROR equ 00C0000182h
    Пишу так, потому что мой драйвер ничего не делает. Сразу выгрузка.

    Four-F
    Поигрался с настройками в DbgView, всё равно ничего не видит.

    Буду пробовать через SoftIce.
     
  12. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    Rito
    Ничего делать не надо.
    Просто напиши
    . Этого должно хватить. Four-F же ясно сказал, что ты возвращаешь из DriverEntry STATUS_DEVICE_CONFIGURATION_ERROR, поэтому драйвер сразу же выгружается из памяти и твоих отладочных сообщений не видно.
    И потом, добавь в драйвер процедуру выгрузки.
     
  13. Rito

    Rito New Member

    Публикаций:
    0
    Регистрация:
    30 май 2008
    Сообщения:
    59
    Изменил код на такой:
    Код (Text):
    1.     DriverEntry proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING
    2.  
    3.         invoke  DbgPrint,OFFSET MsgIn,OFFSET Msg
    4.  
    5.         mov (DRIVER_OBJECT ptr [ebx]).DriverUnload, offset UnLoadDriver
    6.  
    7.         mov eax, STATUS_SUCCESS
    8.  
    9.         ret
    10.  
    11.     DriverEntry endp
    12.  
    13.  
    14.     UnLoadDriver    PROC    DriverObject:PDRIVER_OBJECT
    15.  
    16.         invoke  DbgPrint,OFFSET MsgIn,OFFSET Msg
    17.    
    18.         ret
    19.     UnLoadDriver    ENDP
    При первой загрузке у меня вроде как вылезли сообщения, радостный перезагрузил систему, но больше ничего не вылезает?

    Кстатие тестирую в wmvare. Может из за этого?
     
  14. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    Rito
    После того, как систему перегрузил, твой драйвер загружен? Старт драйвера через SCM подразумевает несколько вариантов загрузки: вручную, при загрузке системы, при старте ОС, (точно не помню, смотри маны). Ты, скорее всего, его стартуешь вручную. При ребуте системы он останется незагруженным, поэтому ты и не видишь отладочных сообщений.
     
  15. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
    Four-F
    Ну и накой нужен ваш drvquery..
    Сервис системинфо возвратит список дров, если его там нет то это руткит. Ерунду советуешь.
     
  16. Rito

    Rito New Member

    Публикаций:
    0
    Регистрация:
    30 май 2008
    Сообщения:
    59
    Кажется что-то нащупал. Нашёл программу ServiWin by Nir Sofer. Показывает драйвера, меняет их тип загрузки (boot, manual, disabled, system, automatic).
    Взял готовый драйвер beep.sys, который выводит писк на системный динамик. Вставил в него DbgPrint. Драйвер перестал пищать. Закоментировал DbgPrint, драйвер опять запищал.
    Дело то получается в DbgPrint?
    В ServiWin просмотрел последнюю ошибку: Error 127: Не найдена указанная процедура.
     
  17. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Под ХР+ сервис системинфо больше не возвращает список дров. Из того что есть в системе это можно сделать только с помощью driverquery.
     
  18. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
    Four-F
    Ахаха, а у меня что, не XPSP2 ?
    Учите матчасть).
     
  19. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    сп2, в сведениях все норм список дровов
     
  20. Rito

    Rito New Member

    Публикаций:
    0
    Регистрация:
    30 май 2008
    Сообщения:
    59
    Нашёл проблему. Нашёл отдельно wdm.lib, в котором собраны некоторые функции из DDK. Вставил в свой драйвер. И получил отладочное сообщение. Вернул ntdll.lib - ничего опять не выводится.
    Код (Text):
    1. ;include G:\masm32\include\KmdKit\include\w2k\ntstatus.inc
    2. ;include G:\masm32\include\KmdKit\include\w2k\ntddk.inc
    3. ;include G:\masm32\include\kmdKit\include\w2k\ntdll.inc
    4. ;includelib G:\masm32\include\kmdKit\lib\w2k\ntdll.lib
    5.  
    6. include     usewdm.inc
    7. includelib  wdm.lib
    8.  
    9. .data
    10. MsgIn       db  "%s",0
    11. Msg     db  "Egei, go in world drivers",0
    12. ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    13. ;                                              К О Д                                                
    14. ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    15. .code
    16. start:
    17. ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    18. ;                                       DriverEntry                                                
    19. ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    20.     DriverEntry proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING
    21.         invoke  DbgPrint,OFFSET Msg
    22.         ;mov (DRIVER_OBJECT ptr [ebx]).DriverUnload, offset UnLoadDriver
    23.         ;mov eax, STATUS_DEVICE_CONFIGURATION_ERROR
    24.         ret
    25.     DriverEntry endp
    26.  
    27.     UnLoadDriver    PROC    DriverObject:PDRIVER_OBJECT
    28.         invoke  DbgPrint,OFFSET MsgIn,OFFSET Msg
    29.         ret
    30.     UnLoadDriver    ENDP
    31. end start
    Даже такой код возвращает моё сообщение.
    Пробовал ntdll.lib из KmdKit (брал с wasm), пробовал ntdll.lib из WDK (недели две назад скачал с оффициального источника). Ни один не работает. Работает только левый wdm.lib,
    Что за ересь?