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

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

ru
Offline Offline
Пол: Мужской

« : 19-04-2015 17:54 » new

Доброе время суток!
Разбираюсь с промежуточным драйвером (тестирую на WinXP), конкретно с примером passthru из WDK(DDK).
Получилось выловить IP-адреса приходящих пакетов в функции PtReceive из LookAheadBuffer (поиск по форуму помог), а вот получить IP-адрес исходящих пакетов не могу понять как. Вроде ловить пакеты можно в MPSendPackets, но не знаю как.
Драйвер пока тестирую на WinXP.
Было бы прекрасно разъяснить следующие вопрос:
1) Каким образом можно получить IP-адреса(source ip, destination ip) исходящих пакета в MPSendPackets?
2) Как можно организовать отслеживание числа потерянных пакетов?
3) Как отправлять пакеты через определённый промежуток времени? Пробовал использовать NDISMSleep но получал BSOD.
В kernel-mode и драйверах совсем новичок.

Заранее благодарен!
Записан
JIOST
Интересующийся

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 20-04-2015 16:35 » 

Разобрался как вытащить IP-адрес пакетов в MPSendPackets из PNDIS_BUFFER, с помощю:
Записан
JIOST
Интересующийся

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 20-04-2015 16:43 » 

NdisQueryPacket(Packet, null, null, &FirstBuffer, null);
NdisQueryBuffer(FirstBuffer, &data, &datalength);
NdisGetNextBuffer(FirstBuffer, &FirstBuffer);
out буфер data привёл к структуре ethernet_header/ip_header
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 20-04-2015 16:48 » 

это хорошо) а то я к сожалению не силен сетевых решениях, и все думал чем бы помочь и так и не придумал)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
JIOST
Интересующийся

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 12-06-2015 16:53 » 

Можно ли в функции MPSendPackets организовать задержку/паузу/ожидание на 100-500 мс. так, чтобы не висла машина?)
Задача: отправить пакет в нужное время.
тщетно экспериментировал со следующими функциями:
KeDelayExecutionThread() - есть задержка но и тормоза системы, бывал bsod;
NdisMSleep() - чаще bsod, чем sleep;
NdisStallExecution() - нормально работает даже при >50 мкс. (хотя в WDK рекомендуют не более 50) и также тормозит всё.

Или может другие варианты есть?
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 13-06-2015 08:50 » 

а какой там IRQL?
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
JIOST
Интересующийся

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 13-06-2015 09:10 » 

DISPATCH_LEVEL
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 13-06-2015 11:21 » 

не, ну а как вы хотели)))
это уровень, блокировки переключения контекста. будет работать только обработка прерываний.

Добавлено через 1 минуту и 19 секунд:
ЗЫ StallExecution() -поэтому и рекомендуют не более 50 мкс...

Добавлено через 59 секунд:
PS меняйте логику обработки, делайте отложенную обработку на PASSIVE если не можете завершить сразу.
« Последнее редактирование: 13-06-2015 11:24 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
JIOST
Интересующийся

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 13-06-2015 12:09 » 

Понизить IRQL до PASSIVE и после паузы возвращать DISPATCH?
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 14-06-2015 20:06 » 

нет, вы не можете вниз IRQL переключать - глюки начнутся. только вверх.
я имею в виду, что нибудь типа отложенной обработки делать. не знаю как это применительно к NDIS правда будет. там обязательно сразу пакет завершать? или можно его пометить как незавершенный?
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines