Доброго времени суток!
Пишу TDI filter драйвер. Через IoAttachDevice аттачусь к tcp\ip. И соответсвенно отлавливаю приходящие ему запросы, после чего либо отправляю их дальше по стэку, либо не отправляю
Все запросы отлавливаются следующим образом:
case IRP_MJ_INTERNAL_DEVICE_CONTROL:
...
if(TDI_SET_EVENT_HANDLER == irps->MinorFunction)
{
pid = (ULONG)PsGetCurrentProcessId();
if(g_buffer.size<122 && g_hEventPacketResived != NULL)// криво с такими константами
{
// основную инфу записали
g_buffer.buff[g_buffer.size].PID = pid;
g_buffer.buff[g_buffer.size].source = ETDI_SET_EVENT_HANDLER;
g_buffer.size++;
// устанавливаем событие о том что пришёл пакет
KeSetEvent(g_hEventPacketResived,
0,
FALSE);
}
}
Потом считываю инфу через IOCTL по факту выставления события. Работает для почти всех команд (TDI_SEND к примеру и т.п.) Но для некоторых не ловится — например для TDI_QUERY_INFORMATION никак не ловится. Программа TDIMon — успешно отлавливает...
Подскажите плиз — где собака зарыта?