Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Перехват callback функций на примере TDI  (Прочитано 4153 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Dmitry_177
Участник

ru
Offline Offline

« : 20-06-2007 21:22 » 

Нужно перехватывать регистрацию TDI_EVENT_RECEIVE event'а и менять указатель на свой...

Ловим:

MajorFunction=IRP_INTERNAL_DEVICE_CONTROL
MinorFunction=TDI_SET_EVENT_HANDLER
Parameters->EventType=TDI_EVENT_RECEIVE

Из DDK я как понял в Parameters->EventHandler будет указатель на callback функцию ClientEventReceive, но как его поменять на свой? может так?:
Код:
OldClientEventReceive = ((PTDI_REQUEST_KERNEL_SET_EVENT)&irpStack->Parameters)->EventHandler;
if (OldClientEventReceive)
{
((PTDI_REQUEST_KERNEL_SET_EVENT)&irpStack->Parameters)->EventHandler =

HookedClientEventReceive;
}

А еще тогда в HookedClientEventReceive нужно вызывать оригинал:
Код:
return OldClientEventReceive(TdiEventContext,
     ConnectionContext,
     ReceiveFlags,
     BytesIndicated,
     BytesAvailable,
     BytesTaken,
     Tsdu,
     IoRequestPacket);

Как тогда все оригинальные адреса callback функций сохранять для разных потоков вызвавших TDI_SET_EVENT_HANDLER чтобы потом их вызывать в HookedClientEventReceive? Или может есть какойнибудь способ передавать этот адрес в саму функцию HookedClientEventReceive?
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines