Драйвера WinNT

Тема в разделе "WASM.WIN32", создана пользователем probka, 13 июн 2008.

Статус темы:
Закрыта.
  1. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    probka

    Собственно читать то и негде. Точнее сказать не за чем. Вот есть пример - реестр- никто не знает для чего все его ключи нужны - ибо это помойка - скопище для всех програм. Собственно все просто и сложно - вот ты прицепился к DeviceControlRoutine

    Ты вызываешь CreteFile (CreateFile в конечном итоге передает обработку драйверу на его внутренюю функцию DriverObject->MajorFunction[ IRP_MJ_CREATE] = xxxx) на вот эту xxxx - причем имя ее может быть совершенно любым.

    Самое прикольное - о чем забыл указать Great что создается объект файл при этом к которому присоединяется объект устройство, а объект устройство создал драйвер у которого есть тоже свой объект - объект драйвер и в этом последнем объекте драйвер в своей DriverEntry заполняет DriverObject->MajorFunction[ IRP_MJ_xxx] чтобы сним можно было както общаться.


    Далее DeviceIoControl на DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL]= xxxx
    ReadFile передается DriverObject->MajorFunction[IRP_MJ_READ] WriteFile на DriverObject->MajorFunction[IRP_MJ_WRITE]
    CloseHandle на DriverObject->MajorFunction[IRP_MJ_CLOSE] ....

    А теперь ответ на твой вопрос: На Ring 0 переходит система автоматичес4ки при вызове всех этих ReadFile DeviceIoControl и т.д.
    ФУНКЦИОНАЛ НИГДЕ НЕ ОПИСАН - точнее то что ты заложишь в IRP_MJ_DEVICE_xxxx то и драйвер будет делать, НО есть разные драйверы к примеру драйвер диска (ну его можно выяснить из диспечера задач) будет обращаться к диску и т.д.

    Теперь цепочка. Стартанул драйвер он зарегистрировал свои MajorFunction в объекте драйвер, создал объекты устройства (через них можно общаться с драйвером) и все и затих - ибо драйвер это лишь библиотека только на уровне ядра.

    Далее CreateFile создает объект файл к которому подсоединяется объект устройство. И все далее ты можешь читать этот файл (причем не факт что чтнение будет с диска) писать в него и т.д. А система сама будет отслать в ring 0 что нужно.

    А теперь как понять что делает. Открываешь DDK хелп там открываешь раздел для нужного тебе драйвера (например драйвер диска или чуть посложнее - драйвер сети) и читаешь как драйвер должен обрабатывать все эти запросты. Но мой тебе совет - начни с "тостера".
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Примеры выполнения трех основных парадигм ООП в драйверах привести сможешь?
    в книге полно деталей.
    зависит от реализации драйвера.
    Для упрощения обработчика IOCTL_* в основном.
    Например в COMX когда ты делаешь ReadFile/WriteFile для чтения/записи вместо того чтобы каждый раз вызывать DeviceControl.
     
  3. Com[e]r

    Com[e]r Com[e]r

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..
    мысли вслух: недавно(в апреле, кажется) пробку учили на си кодить..

    кстати так же огрызался.
     
  4. probka

    probka New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    170
    PROFi, понял, большое тебе спасибо, завтра буду разбирать.
    n0name, понял спасибо. Три основные парадигмы? Да смогу. Только сейчас ровно час ночи. Я спать уже ложусь. Завтра вставать рано. У меня сессия.

    Наверно это мне за мои грехи.
    Помню, раз издевался над одной девченкой, она просила меня прокомментировать ей мой код. Как я это делал, пример:
    Код (Text):
    1. int j =0;
    2. int *n;
    3. int ARRAY = 10;
    4. for(int i = 0; i<ARRAY; i++)
    5. {
    6.    n[i] = j;
    7. }
    Мои комментарии:
    объявляю переменную типа int.
    объявляю переменную типа int со звездочкой.
    объявляю переменную типа int.
    Далее инициализирую массив ровно столько раз, сколько обозначено в переемнной ARRAY.

    А ей нужна было логика, что это даст, в итоге. Логический смысл моего кода.
    Так вот, она в итоге разозлилась и сказала: "Да шел бы ты НАХРЕН ботаник, сволочь!!!"
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Чтобы отделять чтение/запись от других запросов к драйверу, например, от открытия лотка сдрома.

    Так ты бы попробовал ее почитать. Понял бы, что деталей там полно. Единственное, чего (вероятно?) не хватает - примеров и листингов. Хотя я бы тоже не стал в такую книгу их пихать.
     
  6. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    ЗЫ. Дальнейшие грубые высказывания я и Twister будем беспощадно тереть. ТС, будь вежлив.
     
  7. Freeman

    Freeman New Member

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

    probka New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    170
    Great, так я правильно понял (#17):
    Для разделения? Котлет от мух. И соответственно, разные системные сервисы принимают в этом участие?

    Программирование в realtime накладывает свой отпечаток. Так же как и программирование в режиме ядра. В любом случае я был искренен. За искренность не наказывают. Состава преступления нет.

    Comer_, моя благодарность не знает границ. Это само-собой разумеется. Даже не упоминается. Как обязательная функция IoCreateDevice в функции DriverEntry.
     
  9. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Ничего плохого не имею против ООП вообще, но можно пример одного драйвера из каталога %SystemRoot%\system32\drivers с копирайтом "Copyright (C) Microsoft Corp."? Просто интересно, может быть действительно есть.
     
  10. probka

    probka New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    170
    Four-F, У меня с терминалогией путаница, малость. Если я драйвер и пользовательскую прогу на ООП напишу, что(?), она не будет работать? Будет. Это я и имел ввиду. У меня немного подход другой. Я говорю, как я это понимаю.

    n0name, про парадигмы, это ты говорил про "полиморфизм", "наследование" и "шаблоны"?

    Great, Между структурой и классом практически вообще нет разницы. А ты говоришь, что С и С++ две разные вещи.
     
  11. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Разница принципиальная в концепции языка. http://insidecpp.ru/

    Ты говорил что все драйвера на ООП. Поголовно.
     
  12. probka

    probka New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    170
    Great, Все драйвера можно сделать на ООП. Это так нужно понимать ;;;)
     
  13. probka

    probka New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    170
    Типа с перепуга: "ДЕРЖИТЕ МЕНЯ девки-и-и-и ..!!! Я ИДУ ПИСАТЬ ДРАЙВЕРА!!!"
     
  14. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    доигрался, топик закрыт ибо бред.
     
Статус темы:
Закрыта.