TDImon

Home Forums Discussions General Discussion TDImon

This topic contains 6 replies, has 3 voices, and was last updated by  nic 11 years, 6 months ago.

Viewing 7 posts - 1 through 7 (of 7 total)
  • Author
    Posts
  • #4980

    nic
    Participant

    Всем привет!
    Хочу написать аналог небезызвестного TDImon. Сразу появилось несколько теоретических вопросов:
    1. Что использовать для присоединения к целевому устройству:
    IoAttachDevice
    IoAttachDeviceToDeviceStack
    В DDK пишут, мол это почти одно и то же.
    2. Я делаю фильтр, надо ли вызывать
    TdiRegisterProvider
    TdiRegisterDeviceObject
    Думаю нет, но что скажут спецы?
    3. Для TDI IOCTL сделаю в фильтре аналогичные и после своей обработки (для начала ни какой) передам пакеты дальше, а что делать с TDI Client Callbacks например
    ClientEventConnect
    ну, скажем прототипы есть, их можно объявить и у себя, но где взять адреса оригинальных функций и как их вызвать?
    4. Еще есть TDI Library Functions and Macros
    TdiBuildInternalDeviceControlIrp
    TdiPnPPowerRequest и т.п.
    их там тьма, что их тоже надо эмулировать?
    например, для пакетов я могу объявить их часть, а “не известные” просто передавать дальше, а как также поступить с функциями?

    Спасибо за внимание и терпение. 🙂

    #5902

    Vadim Smirnov
    Moderator

    1. Что использовать для присоединения к целевому устройству:
    IoAttachDevice
    IoAttachDeviceToDeviceStack

    Если писать аналог TDIMon, то надо патчить таблицу мажоров TCPIP.SYS. Но это конечно если именно аналог, а так можно и через AttachDevice.

    2. Я делаю фильтр, надо ли вызывать
    TdiRegisterProvider
    TdiRegisterDeviceObject
    Думаю нет, но что скажут спецы?

    Нет, не надо

    3. Для TDI IOCTL сделаю в фильтре аналогичные и после своей обработки (для начала ни какой) передам пакеты дальше, а что делать с TDI Client Callbacks например
    ClientEventConnect
    ну, скажем прототипы есть, их можно объявить и у себя, но где взять адреса оригинальных функций и как их вызвать?

    Перехватывать регистрацию event’ов и менять указатели на свои…

    4. Еще есть TDI Library Functions and Macros
    TdiBuildInternalDeviceControlIrp
    TdiPnPPowerRequest и т.п.
    их там тьма, что их тоже надо эмулировать?
    например, для пакетов я могу объявить их часть, а “не известные” просто передавать дальше, а как также поступить с функциями

    Ф-ции то есть, но не понимаю зачем они тебе…

    #5903

    nic
    Participant

    Здравствуйте, SerpentFly.

    SerpentFly:
    Если писать аналог TDIMon, то надо патчить таблицу мажоров TCPIP.SYS. Но это конечно если именно аналог, а так можно и через AttachDevice.

    – ОК ну ее эту таблицу :-), если можно не патчить – то обойдемся. (хотя если патчить наверняка будет меньше проблем с Unload).

    SerpentFly:
    Перехватывать регистрацию event’ов и менять указатели на свои…
    -глупый вопрос а как?

    P.S. Второй раз пишу на Вашем форуме, как сделать, чтобы в Subject были русские буквы?

    #5904

    GeN
    Participant

    @nic wrote:

    Перехватывать регистрацию event’ов и менять указатели на свои…
    -глупый вопрос а как?

    не могу не гыгыкнуть 😉
    гы гы
    кто тут вообще ХОЧЕТ написать TdiMon ? ;-)))

    Ну, вообще тебе нужно посмотреть на TDI_SET_EVENT_HANDLER
    А так же всю другую инфу по TDI из MSDN.

    #5905

    nic
    Participant

    Привет,GeN.

    не могу не гыгыкнуть 😉
    гы гы
    кто тут вообще ХОЧЕТ написать TdiMon ? ;-)))

    -ты перепутал “хочет” и “может”. Очевидно, я – пока не могу – и поэтому, собираю информацию, ссылки типа MSDN, DDK, IFS и я сам могу рекомендовать. Более того, врядли в данных авторитетных источника есть информация о том как “патчить” таблицы вызовов функций.

    Ну, вообще тебе нужно посмотреть на TDI_SET_EVENT_HANDLER
    А так же всю другую инфу по TDI из MSDN.[/quote]

    – не знаю можешь ли ты написать TDImon, но на вскидку, через TDI_SET_EVENT_HANDLER можно зарегистрировать клиентские callback и этот метод применим к способу Attach, а не patch.

    #5906

    Vadim Smirnov
    Moderator

    – не знаю можешь ли ты написать TDImon, но на вскидку, через TDI_SET_EVENT_HANDLER можно зарегистрировать клиентские callback и этот метод применим к способу Attach, а не patch.

    Оба метода и patch и attach очень близки по реализации. И обработка event handler в них проводится аналогично.

    #5907

    nic
    Participant

    – Оба метода и patch и attach очень близки по реализации. И обработка event handler в них проводится аналогично.

    ОК. Гуру виднее, поправте, если я не прав.
    После того, как мы приаттачились к целевому устройству, к нам приходят все его пакеты, при запросе Major=IRP_INTERNAL_DEVICE_CONTROL
    Minor=TDI_SET_EVENT_HANDLER
    из клиентского приложения будет передан адрес обработчика, мы его запоминаем, а вниз передаем адрес своего обработчика.

    При методе “патч” необходимо вместо обработчика скажем
    TdiRegisterNetAddress записать свой. А обработчики, видимо, ставятся с помощью TdiBuildSetEventHandler.

    Под словом “анологично” Вы подразумевали необходимость замены адресов. Или я вообще нагнал? Поправте, если не трудно.

Viewing 7 posts - 1 through 7 (of 7 total)

You must be logged in to reply to this topic.