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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Нужна помощь по работе с TCP из ядра  (Прочитано 7838 раз)
0 Пользователей и 1 Гость смотрят эту тему.
mrkasper
Гость
« : 23-05-2009 14:51 » 

Привет всем.
Мне в драйвере необходимо реализовать возможность отправки данных по TCP (с помощью TDI ) Но немогу найти примеры исходников где подобное было бы сделано. Нашёл такой отрывок
Цитата
Для Windows до Vista задача сводиться к написанию TDI-клиента. Порядок действий примерно такой:
1. ZwOpenFile ( \Device\Tcp или \Device\Udp ) - локальный адрес
2. ZwOpenFile ( \Device\Tcp или \Device\Udp ) - удалённый узел
3. ObReferenceObjectByHandle - на удалённый узел

4. TdiBuildAssociateAddress, IoCallDriver
5. TdiBuildSetEventHandler ( TDI_EVENT_RECEIVE ), IoCallDriver
6. TdiBuildConnect, IoCallDriver
7. TdiBuildSend, IoCallDriver

8. Ждём данные. Будет вызвана наша функция, зарегистрированная на шаге 5.

9. TdiBuildDisconnect, IoCallDriver
10. TdiBuildDisassociateAddress, IoCallDriver
11. TdiBuildSetEventHandler ( TDI_EVENT_RECEIVE == NULL ), IoCallDriver

12. ObDereferenceObject - на удалённый узел
13. ZwClose - удалённый узел
14. ZwClose - локальный адрес
Но несовсем понимаю как это сделать. На сайте rootkits.com Нашёл библиотеку "Kernel mode sockets library for the masses" но и в ней нет точного порядка действий + не все типы определены (некомпилируется).
Может кто-нибудь выложить какой нить полный образей который передаёт данные по Tcp из ядра.
Заранее спасибо
Записан
Ochkarik
Модератор

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

« Ответ #1 : 24-05-2009 07:34 » 

в сети валялась библиотека сокетов для режима ядра. ага. она самая...
она на самом деле не с rootkits а другого автора... и на его странице было десяток комментов, что там пропущено... не могу тот сайт найти....
сейчас выложу с учетом внесенных комментов. помоему компилилась. но это библиотека - ее еще использовать надо) и в сети полно разговоров о ее использовании.

посмотрите ее повнимательней) помоему вполне рабочий пример.
Код:
//************************************************************************
//                                                                      
// sockets.c
// (c) valerino/xOANINO 2003/2004/2005
//
// this module implements a generic kernel sockets library.
// ** Beware that this is optimized for single thread use if REUSE_SOCKETSIRP is defined.**
//*****************************************************************************
если не получится эту скомпилить - пишите, разберемся что там еще не так...
PS порядок там прозрачный - так же как под виндой должно быть. посмотрите функции работы с сокетами под винду - аналогично должно быть.
Код:
BOOL                    KSocketInitialize();
BOOLEAN                 KSocketCleanup();

NTSTATUS                KSocketCreate(OUT PKSOCKET* Socket);
VOID                    KSocketClose(PKSOCKET Socket);

PVOID                   KSocketAllocatePool();
void                    KSocketFreePool(PVOID pBuffer);

NTSTATUS                KSocketConnect(PKSOCKET pSocket, ULONG Address, USHORT Port);
NTSTATUS                KSocketDisconnect(PKSOCKET pSocket);

NTSTATUS                KSocketSend(PKSOCKET pSocket, PVOID  Buffer, SIZE_T Size, PSIZE_T BytesSent);
NTSTATUS                KSocketReceive(PKSOCKET pSocket, PVOID Buffer, SIZE_T Size, PSIZE_T BytesReceived,   BOOLEAN ReceivePeek);
NTSTATUS                KSocketComplete(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Context);

NTSTATUS                KSocketReadLine(PKSOCKET pSocket, PCHAR buf, SIZE_T maxlen, PSIZE_T  ReceivedBytes);
NTSTATUS                KSocketWriteLine(PKSOCKET pSocket, const char* format, ...);

* KernelSock.rar (6.94 Кб - загружено 1124 раз.)
« Последнее редактирование: 25-05-2009 13:43 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
mrkasper
Гость
« Ответ #2 : 24-05-2009 12:52 » 

Ochkarik , Биг спсасибо.
Я тут за сутки ещё несколько отрывков собрал и в твоём варианте есть образец использования библиотеки.
Думаю теперь у мну всё получится
Записан
supermaxus
Участник

ru
Offline Offline

« Ответ #3 : 06-11-2010 03:11 » new

Статья-пояснение, как использовать tdi-запросы для доступа к
tcp драйверу из kernel-mode (фактически, пояснение к примеру DDK toaster). МожЕТ, кому потребуется.

h**p://www.wd-3.com/archive/remotetoaster.htm
« Последнее редактирование: 06-11-2010 18:26 от Sel » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines