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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 2 3 [4] 5 6 7 8   Вниз
  Печать  
Автор Тема: NDIS InterMediate Driver - Обсуждение  (Прочитано 240088 раз)
0 Пользователей и 13 Гостей смотрят эту тему.
StandAlone
Гость
« Ответ #90 : 30-03-2006 15:56 » 

http://www.microsoft.com/technet/archive/win98/reskit/part6/wrkc29.mspx?mfr=true -- Может, кому пригодится. Инфа старая, но общее представление о архитектуре NDIS дает...
Записан
new_s
Постоялец

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

« Ответ #91 : 01-04-2006 19:30 » 

Как узнать ip и номер порта исодящего пакета?
Записан
new_s
Постоялец

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

« Ответ #92 : 02-04-2006 08:19 » 

есть интересная ссылка.
http://www.wasm.ru/forum/index.php?action=vthread&forum=12&topic=13699

Записан
timin
Гость
« Ответ #93 : 03-04-2006 06:51 » 

Здрасьте всем, может мой вопрос покажется делитанским, но мне нужен совет.

Вопрос заключается в том, можно ли создать такой NDIS Intermediate driver, который бы захватывал пакеты, обращенные к определенным портам (список портов в ходе работы драйвера может обновляться), просматривал бы в этих пакетах данные прикладного уровня и, на основе этого анализа приниал решение, пропускать пакет дальше аль нет. Структруа протокола прикладного уровня известна.

Мне важно знать просто возможность решения такой задачи, стоит ли вообще начинать копаться в этом направлении Улыбаюсь

Если это можно отлично, а если есть еще и примеры, на основе которых это можно сделать - вообще здорово. Заранее благодарен.
Записан
new_s
Постоялец

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

« Ответ #94 : 03-04-2006 12:33 » 

Да. Эти и многие другие задачи твой драйвер решит.
Я выше ссылку дал. Там реализован firewall.
(Как я понял тебе тоже firewall нужен)
Записан
aks68
Модератор

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

« Ответ #95 : 03-04-2006 12:41 » 

Здрасьте всем, может мой вопрос покажется делитанским, но мне нужен совет.

Вопрос заключается в том, можно ли создать такой NDIS Intermediate driver, который бы захватывал пакеты, обращенные к определенным портам (список портов в ходе работы драйвера может обновляться), просматривал бы в этих пакетах данные прикладного уровня и, на основе этого анализа приниал решение, пропускать пакет дальше аль нет. Структруа протокола прикладного уровня известна.

Мне важно знать просто возможность решения такой задачи, стоит ли вообще начинать копаться в этом направлении Улыбаюсь

Если это можно отлично, а если есть еще и примеры, на основе которых это можно сделать - вообще здорово. Заранее благодарен.

Добрый день!
1. Все вышеперечисленое сделать можно.
2. БОльшая часть уже реализованна в коммерческих (и наверное нетолько) брэндмауэрах (так это по-русски? Ага
3. Тормозит все это (imho) СТРАШНО.
4. Стоит-ли браться решайте сами (hint,- в Висте вместо IM предполагается packet filtering API, а всем IM-щикам грозят ~30% снижением производительности)
5. Пример- NDIS IM driver из DDK (наверно звучит пошло, но ничего лучшего мне наум неприходит)

С уважением,
Акс.
Записан
new_s
Постоялец

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

« Ответ #96 : 03-04-2006 18:01 » 

А можно подтвердить снижение производительности?
Русинович и Соломон в своей книге писали что лучше всё это реализовывать именно в IM.
Записан
aks68
Модератор

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

« Ответ #97 : 03-04-2006 20:45 » 

А можно подтвердить снижение производительности?
Русинович и Соломон в своей книге писали что лучше всё это реализовывать именно в IM.
Я имею ввиду Висту. Инфо получено от некоей дaмы из M$ впрошлом году Улыбаюсь Было сказанно, что архитектура NDIS-а изменена, однако для всяких там легаси написали раперы. Именно из-за них производительность и снижается.Самостоятельно, увы, я Висту еще некопал, так что давайте все мною сказанное отнесем в разряд "культурных слухов".С уважением,Aks.
Записан
new_s
Постоялец

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

« Ответ #98 : 04-04-2006 11:20 » 

)
А правдо что неподписанные драйверы в висте работать не будут?
Как же тогда писать?
Записан
aks68
Модератор

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

« Ответ #99 : 04-04-2006 16:49 » 

)
А правдо что неподписанные драйверы в висте работать не будут?
Как же тогда писать?

1. Не будет устанавливаться всё на х64, а на х32 только потоковые драйверы проводящие защищенный контент (PUMA/PAP/PVP-OPM).
2. Подписывать драйверы - хорошая практика. Для коммерческих организаций (IMHO) это не так-уж и накладно (~$700 за authentication signature на год и ~$200 за каждую подпись). Кроме того HCT-suite сама по себе классная штука. Всё, что она находит как достойно как минимум анализа.

С уважением,
Акс.
Записан
new_s
Постоялец

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

« Ответ #100 : 04-04-2006 18:42 » 

Kife давно не видно.
Записан
heptohedron2004
Гость
« Ответ #101 : 14-04-2006 05:45 » 

может статью пишет, было бы классно.
Записан
new_s
Постоялец

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

« Ответ #102 : 16-04-2006 17:53 » 

Вот я собственно и про это.

Записан
Uhri
Гость
« Ответ #103 : 17-04-2006 16:32 » 

Привет, ребята! Решил разобраться с сетевыми дровами. Разбираю пример passthu из DDK. Так более менее... но вот как только решил добавить что-то возникла проблема. Самое простое: например, хочу не пропускать пакеты на 1080 порт. Насколько я понял, реализовывать нужно в minipor.c в MPSend. Но вот проблема - где мне узнать порт принятого пакета? NDIS_PACKET? В DDK очень скудно доно описание. А ip Где взять?
И еще. Все никак не пойму что именно и когда делает miniport и что protokol?
Записан
new_s
Постоялец

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

« Ответ #104 : 17-04-2006 19:46 » 

Привет, ребята! Решил разобраться с сетевыми дровами. Разбираю пример passthu из DDK. Так более менее... но вот как только решил добавить что-то возникла проблема. Самое простое: например, хочу не пропускать пакеты на 1080 порт. Насколько я понял, реализовывать нужно в minipor.c в MPSend. Но вот проблема - где мне узнать порт принятого пакета? NDIS_PACKET? В DDK очень скудно доно описание. А ip Где взять?
И еще. Все никак не пойму что именно и когда делает miniport и что protokol?
это ты на фотке? Улыбаюсь)(прикольная фотка)
на всё не отвечу.
протокол привязка снизу минипорт сверху
если не ошибаюсь то так

минипорт
---------
passthru
--------
протокол
 

а порт и ай пи берётся из пакета его распатрошить надо
Записан
heptohedron2004
Гость
« Ответ #105 : 18-04-2006 07:56 » 

Народ мот кто знает. Добавили мы например буфер в пакет. получается длина пакета изменилась.Как теперь TotalLength изменить ?
Записан
heptohedron2004
Гость
« Ответ #106 : 18-04-2006 08:20 » 

или длина поменяется автоматически ?
Записан
Uhri
Гость
« Ответ #107 : 18-04-2006 10:52 » 

Да, на фотке  я:)
Так а есть какая-нидь инфа о NDIS_PACKET? Ведь я правильно понимаю - из него надо инфу вытаскивать? Там же данные пакета? Структура мне не доконца ясна.
И все же как данные предаются. От драйвера модема принимает протокол (только там вроде Resieve есть), а приложению эти данные уже минипорт send'ом отправляет? А когда от приложения данные?
« Последнее редактирование: 15-12-2007 15:07 от Алексей1153++ » Записан
Uhri
Гость
« Ответ #108 : 18-04-2006 16:36 » 

Блин! Запарился уже!!! Есть какой-нидь пример "потрошения" пакета? Знаю, есть стандартная структура пакета, а как в этом самом passthru все сделать?
Записан
andr
Гость
« Ответ #109 : 18-04-2006 17:07 » 

Uhri

Extending The Microsoft
PassThru NDIS Intermediate Driver
Part 1 Adding a DeviceIoControl Interface
http://www.wd-3.com/archive/ExtendingPassthru.htm

Extending The Microsoft PassThru NDIS Intermediate Driver--Part 2
Two IP Address Blocking NDIS IM Drivers
http://www.wd-3.com/archive/ExtendingPassthru2.htm
Записан
Uhri
Гость
« Ответ #110 : 18-04-2006 17:55 » 

спасибо, Андрей! почитаю...
Записан
aks68
Модератор

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

« Ответ #111 : 20-04-2006 12:35 » 

Привет, ребята! Решил разобраться с сетевыми дровами. Разбираю пример passthu из DDK. Так более менее... но вот как только решил добавить что-то возникла проблема. Самое простое: например, хочу не пропускать пакеты на 1080 порт. Насколько я понял, реализовывать нужно в minipor.c в MPSend. Но вот проблема - где мне узнать порт принятого пакета? NDIS_PACKET? В DDK очень скудно доно описание. А ip Где взять?
И еще. Все никак не пойму что именно и когда делает miniport и что protokol?

Добрый день!

1. Какую версию DDK Вы используете? Я посмотрел в 3790 (весна 2003), но там MPSend (MiniportSend) незарегистрирована среди IM кол-бэков NDIS, а взывается MPSendPackets (MiniportSendPackets). Кроме того, в случае если зарегистрированы и MPSend и MPSendPackets, MPSend не вызывается NDIS-ом вообще.

2. Когда Вы говорите про 1080 порт, Вы имеете ввиду входящий или исходящий поток пакетов? Если имеются ввиду входящие пакеты, то необходимо изменять ф-и PtReceive (ProtocolReceive) и PtReceivePacket (ProtocolReceivePacket).

3. IP и порт полученного пакета можно извлечь, как уже было сказанно, из структуры NDIS_PACKET, которая либо принимается как аргумент ф-и PtReceivePacket либо извлекается по запросу NdisGetReceivedPacket (см. пример в реализации ф-и PtReceive из PassThru).
Структура и приемы работы с NDIS-буферами описанны в: http://www.ndis.com/papers/ndispacket/ndispacket1.htm , там-же по ссылке есть кусок кода. Ну а сама раскладка пакета - у Стивенса естес-но.

С уважением,
Акс.
Записан
Uhri
Гость
« Ответ #112 : 20-04-2006 15:54 » 

Спасибо за совет.
Насчет MPSend и MPSendPackets, то на сколько я понял, первая используется при отправке одного пакета, а вторая отправляет пакеты из массива.
Вро порт, так это я именно про входящие. Вот я что и спрашивал - не пойму точно когда Receive, а когда Send. В документации я где-то вычетал, что для, например, фильтрации можно использовать как первую, так и вторую (т.е. как в модуле минипорта непосредственно перед отправкой, так и в протоколе перед получением). Вот что происходит при принятии пакета? Какая последовательность функций? Receive -> обработка -> Send ?
Записан
brovy@n
Гость
« Ответ #113 : 22-04-2006 15:17 » 

Здрасте всем!

Мож кто знает....
Надо чтоб passthru.sys создавал файл (не важно какой). Вставлял CreateFile из win32SDK в miniport.c, при компиляции NTDDK выдает ошибку:
CreateFile() undefined : assuming extern returning int, умный чел(руководитель диплома) подсказал, что NDIS не дает сделать файл.....
И че мне делать после этого???
Диплом поджимает, руководитель молчит....
Записан
new_s
Постоялец

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

« Ответ #114 : 22-04-2006 16:24 » 

Я так понял что ты используешь CreateFile?
В режиме ядро использовать функции API нельзя. Нужно использовать функции Native API.
В твоём случаи нужно использовать ZwCreateFile.
Записан
brovy@n
Гость
« Ответ #115 : 22-04-2006 16:33 » 

Я пробовал, че то не получилось, не помню че за ошибки были.....
Записан
new_s
Постоялец

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

« Ответ #116 : 22-04-2006 16:35 » new

Есть ещё вопрос:
Из промежуточного драйвера не узнать что за приложение отправило пакет?
Как это узнать желательно пример.
Записан
new_s
Постоялец

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

« Ответ #117 : 22-04-2006 16:37 » 

Я пробовал, че то не получилось, не помню че за ошибки были.....
Пример
NTSTATUS          status;
UNICODE_STRING    fullFileName;
HANDLE            fileHandle;
IO_STATUS_BLOCK   iostatus;
OBJECT_ATTRIBUTES oa;


RtlInitUnicodeString( &fullFileName,
                      L"\\??\\C:\\Example\\testfile.txt");

InitializeObjectAttributes( &oa,
                            &fullFileName, OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
                            NULL,
                            NULL );

status = ZwCreateFile ( &fileHandle,
                        GENERIC_WRITE | SYNCHRONIZE,
                        &oa,
                        &iostatus,
                        0,  // alloc size = none
                        FILE_ATTRIBUTE_NORMAL,
                        FILE_SHARE_WRITE,
                        FILE_OPEN_IF,
                        FILE_SYNCHRONOUS_IO_NONALERT,
                        NULL,
                        0);
// Здесь:
// GENERIC_WRITE равно STANDARD(0x40000000L)
//
// FILE_GENERIC_WRITE равно STANDARD_RIGHTS_WRITE|FILE_WRITE_DATA |
//    FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA |
//    SYNCHRONIZE, что можно увидеть в заголовочном файле winnt.h

if( NT_SUCCESS(status))
{
   // Строка для записи в файл
   char myString[100]="string : test write!\r\n";
   // Структура, которая поможет определить длину файла:
   FILE_STANDARD_INFORMATION fileInfo;

   status =        // Получаем информацию о файле
       ZwQueryInformationFile( fileHandle,
                               &iostatus,
                               &fileInfo,
                               sizeof(FILE_STANDARD_INFORMATION),
                               FileStandardInformation
                               );
   ULONG len = strlen(myString);
   if( NT_SUCCESS(status) )
   {
      LARGE_INTEGER ByteOffset = fileInfo.EndOfFile;
      status = ZwWriteFile(fileHandle,
                            NULL,
                            NULL,
                            NULL,
                            &iostatus,
                            myString, len,   // Записываемая строка
                            &ByteOffset,     // a если NULL? см. ниже
                            NULL);
      if( !NT_SUCCESS(status) || iostatus.Information != len )
      {
         DbgPrint("Error on writing. Status = %x.", status);
      }
   }
   ZwClose(fileHandle);
break;

}

==============================================================
NTSTATUS ZwCreateFile IRQL == PASSIVE_LEVEL
Параметры Предоставляет доступ к системным ресурсам (в том числе файлам) в режиме ядра
OUT PHANDLE pHandle Указатель на переменную, куда следует поместить дескриптор открытого объекта (файла, подраздела реестра и т.п.) 
IN ACCESS_MASK DesiredAccess Характеристика доступа к объекту. Для файлов вполне приемлемы значения GENERIC_READ или GENERIC_WRITE, которые представляют сложные комбинации из более простых масок доступа (типа FILE_APPEND_DATA и т.п.)
IN POBJECT_ATTRIBUTES pObjAttributes Указатель на заполненную вызывающим кодом структуру данных, которая описывает имя, местоположение и некоторые другие характеристики открываемого объекта (см. ниже) 
OUT PIO_STATUS_BLOCK
pIOStatus Указатель на буфер, в котором будет размещена информация об открытом объекте в формате структуры IO_STATUS_BLOCK
IN PLARGE_INTEGER
AllocationSize OPTIONAL Начальный размер файла в байтах. Ненулевое значение принимается во внимание только при создании и перезаписи файла
IN ULONG FileAttributes Атрибуты открываемого файла. Типовым является значение FILE_ATTRIBUTE_NORMAL
IN ULONG SharedAccessFlags  Описывает, разрешен ли совместный доступ, например, FILE_SHARE_READ — для чтения
IN ULONG CreateDispositionFlags Способ открытия файла, например, FILE_OPEN_IF — если не существует, создать
IN ULONG CreateOptions Комбинация флагов создания, например, FILE_SYNCHRONOUS_IO_NONALERT — все операции над файлом выполняются как синхронные (DesiredAccess должен включать флаг SYNCHRONIZE) 
IN PVOID EaBuffer OPTIONAL  Для драйверов устройств и драйверов средних слоев следует указывать NULL 
IN ULONG EaLength Для драйверов устройств и драйверов средних слоев следует указывать 0
Возвращаемое значение STATUS_SUCCESS или код ошибки (несколько более подробную информацию можно найти в структуре IO_STATUS_BLOCK)
хм... должно работать
Записан
brovy@n
Гость
« Ответ #118 : 22-04-2006 16:44 » 

По части приложения - х.з.  Здесь была моя ладья...
Спасиб, попробую
только как путь к файлу выглядит в уникоде...
только ногами не бей Улыбаюсь
Записан
new_s
Постоялец

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

« Ответ #119 : 22-04-2006 16:56 » 

А что такое уникод?))))))
Вообще вот так пример:
L"text", просто L подставить или
пример перехода
ANSI_STRING     myNewANSIString;
UNICODE_STRING  myNewUString;
RtlInitAnsiString( &myNewUString, "My second text example." );
RtlAnsiStringToUnicodeString(&myNewUString, &myNewANSIString, TRUE);
Книжка: Программирование драйверов Windows, Солдатов в сети есть.
Записан
Страниц: 1 2 3 [4] 5 6 7 8   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines