TDI и usermode

Тема в разделе "WASM.NT.KERNEL", создана пользователем lilkiddd, 2 июл 2008.

  1. lilkiddd

    lilkiddd New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2008
    Сообщения:
    7
    хи многоуважаемый олл.
    разрабатываю снифер, основаный на TDI. драйвер должен пересылать данные попакетно юзермодному приложению.
    вопрос таков - какой способ коммуникации kernel-mode<->user-mode по-вашему наиболее приемлем?
     
  2. Sheph

    Sheph New Member

    Публикаций:
    0
    Регистрация:
    24 янв 2008
    Сообщения:
    89
    lilkiddd, в принципе зависить от задачи, но мне нравится метод основанный на событиях, т.е у кернела и у юзера есть шаренный евент, юзер на нём ждёт, а кернел сигналит, тогда юзер посылает кэтээль код, типа, запросить данные о событии и немедленно возвращается с этими данными. Когда же юзеру нужно чё-нить послать в кернел, то это просто кэтээль код.
     
  3. lilkiddd

    lilkiddd New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2008
    Сообщения:
    7
    у меня была мысль создавать двусвязный список в драйвере (один элемент = один сетевой пакет) и отдавать юзермоду из irp_mj_read элемент этого списка. правда, у меня есть некоторые сомнения по поводу синхронизации функции обработки пакетов и хэндлера irp_mj_read. как считаешь, жизнеспособная система? :)
     
  4. Forever

    Forever Виталий

    Публикаций:
    0
    Регистрация:
    12 апр 2008
    Сообщения:
    244
    Есть еще и такой вариант. Программа опрашивает по таймеру драйвер через DeviceIoControl. Драйвер получает размер буфера и сунет туда все, что влезет.
     
  5. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Sheph Где можно почитать про организацию общего события?
     
  6. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    2FED
    На Osronline кажись статья была на эту тему...
    http://www.osronline.com/article.cfm?id=108
     
  7. Forever

    Forever Виталий

    Публикаций:
    0
    Регистрация:
    12 апр 2008
    Сообщения:
    244
    В исходниках к DDK имеется пример драйвера и приложения, которые используют общее событие. Там реализовано два варианта взаимодействия. Глянь в папочке WinDDK\src\general\event.
     
  8. dead_body

    dead_body wasm.ru

    Публикаций:
    0
    Регистрация:
    3 сен 2004
    Сообщения:
    603
    Адрес:
    Украина;г.Харьков;г.Н.Каховка
    у Four-F в статьях разве не было?
     
  9. Sheph

    Sheph New Member

    Публикаций:
    0
    Регистрация:
    24 янв 2008
    Сообщения:
    89
    2FED, там где говорит Forever всё очень хорошо описано. Вообще в сэмплах DDK много полезного. Ещё на OSR много хорошего материала, например в filter_driver_discussion_paper.pdf в конце есть раздел user/kernel communications, тож можно почитать.
    P.S: И так к слову, вот тут http://www.microsoft.com/whdc/driver/kernel/MP_issues.mspx интересная дока по smp программированию.
     
  10. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    steelfactor По ссылке что то непонятное просит регистрации :)
    Forever ok обезательно посмотрю
    dead_body Действительно чото думал что нет, а оказалось есть http://wasm.ru/article.php?article=drvw2k14
     
  11. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    lilkiddd, из моего опыта, лучший метод это в user mode сделать ReadFile() или DeviceIOControl(), а в драйвере ты получишь IRP. Эти IRP можно вернуть сразу а можно позже. User mode может ждать (blocking call) а может делать всё асинхронно (overlapped IO).
     
  12. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    LPC в принципе неплохо.
     
  13. lilkiddd

    lilkiddd New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2008
    Сообщения:
    7
    почти так и сделал :) теперь загвоздка в хттпс...
     
  14. Sheph

    Sheph New Member

    Публикаций:
    0
    Регистрация:
    24 янв 2008
    Сообщения:
    89
    s0larian, проблема такого подхода в том что нужно предусматривать отмену IRP, т.е вести cancel-safe queue, юзать CsqXXX, заводить отдельный поток и т.д. Иначе если вдруг твой драйвер выгрузится, а у него будут pending IRP, то вылезет BSOD. Хотя для драйверов, не поддерживающих выгрузку можно наверное и не париться по этому поводу.
     
  15. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    Sheph, ессно нужен cancel safe queue. Штука простая, есть в xp и 2k/ddk. Потока не нужно. Кста, это самая стандартная модель.

    lilkiddd, с https всё сложнее. Посмотри ethereal.