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

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

by
Offline Offline

« : 26-04-2012 19:56 » 

Как лучше решить следующую проблему? - имеется драйвер фильтр сетевого траффика,который отслеживает всю передаваемую в сеть (Интернет) информацию - как собрать и сохранить отслеживаемые данные? - Выделять память под очередной пакет данных? Но ведь так может и вся память в один прекрасный момент закончиться) -Сбрасывать в файл? - Но не будет ли проблем с уронями IRQL и т.п,т.к. данные будут сбрасываться в фильтре и в том числе из CompletionRoutine()?

Как вообще происходит накопление данных в таких фильтрах и как они потом передаются в userMode?
Записан
zubr
Гость
« Ответ #1 : 26-04-2012 21:20 » 

Если данные надо только отслеживать, но не фильтровать, имхо, лучше всего их передавать в юзермодное приложение через PIO_STACK_LOCATION (IoGetCurrentIrpStackLocation). И в приложении уже обрабатывать.
Записан
Ochkarik
Модератор

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

« Ответ #2 : 26-04-2012 22:04 » 

отдельными пакетами - тяжко наверное машине будет. лучше буферизировать в драйвере по объему + по таймауту.
потом, либо формировать поток IRP от приложения, и завершать их по мере наполнения буфера на отдачу, либо через кольцевой буфер и Event, либо может через APC.
если в файл - то тоже можно, но не напрямую а в отложенном варианте... через дополнительно запущенную системную нитку.
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
AlexCasual
Помогающий

by
Offline Offline

« Ответ #3 : 27-04-2012 06:19 » 

Буферизация пакетов пугает тем,что будет значительно тратиться память...
Записан
AlexCasual
Помогающий

by
Offline Offline

« Ответ #4 : 27-04-2012 13:53 » 

Возник следующий вопрос - в функции AddDevice() создаю поток,в котором просто вывожу тестовую строку :

Код:
...
NTSTATUS ntStatus  = STATUS_UNSUCCESSFUL;
PVOID    pThreadOb = NULL;
HANDLE hThread;

ntStatus = PsCreateSystemThread(&hThread,THREAD_ALL_ACCESS,0,0,0,ControlRoutine,DeviceObject);

if(NT_SUCCESS( ntStatus ))
 {
ObReferenceObjectByHandle(hThread, THREAD_ALL_ACCESS, NULL, KernelMode, &pThreadOb, NULL );
ZwClose(hThread);
 }
...
VOID ControlRoutine( __in PVOID Context )
{
    while(1)
    {
DebugPrint((" ControlRoutine \n"));
    }
}
...

При этом в DebugView наблюдаю только вывод "ControlRoutine",никакая другая отладочная информация не выводится (из других критических мест в драйвере) и всё жутко виснет...
Я подозреваю,что в этом случае созданный системный поток просто напросто не вытесняется - так ли это и почему?
Записан
Ochkarik
Модератор

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

« Ответ #5 : 27-04-2012 15:57 » new

я просто под столом валяюсь))))))
вывод DebugPrint в вечном цикле... а какого эффекта вы собственно хотели достичь?)))) ну кроме того чтобы переполнить отладочный буфер и загрузить процессор?
ну хоть какой нить sleep вставьте!

Добавлено через 3 минуты и 56 секунд:
PS вот этот участок кода меня кстати немного смущает.... вы ничего тут не пропустили?))))
Код: (C)
ntStatus = PsCreateSystemThread(...);
if (NT_SUCCESS( ntStatus ))
{
        ZwClose(...);
}
« Последнее редактирование: 27-04-2012 16:04 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
sss
Специалист

ru
Offline Offline

« Ответ #6 : 28-04-2012 05:55 » 


вывод DebugPrint в вечном цикле...


Блин заинтересовал. Главное ведь не увидишь в диспетчере задач где тормоза! Или увидишь?
Записан

while (8==8)
Ochkarik
Модератор

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

« Ответ #7 : 28-04-2012 07:56 » 

фиг знает, думаю  загрузку ядра 100% должен показывать. или поделит на количество ядер...
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
zubr
Гость
« Ответ #8 : 28-04-2012 08:16 » 

Загрузку на system покажет.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines