Topic

TDI FILTER driver

Viewing 15 posts - 16 through 30 (of 62 total)
  • Author
    Posts
  • #6291
    Vadim Smirnov
    Keymaster

    SerpentFly, помоги пожалуйста.. Все что я смог сделать я отобразил это в коде.. Я реально зашел в тупик.. Помоги пожалуйста..

    ClientEventReceive это не единственный event handler, который нужно перехватить, есть еще ClientEventReceiveExpedited, ClientEventChainedReceive.

    И подскажите пожалуйста как вытащить принятые пакеты и от куда их вообще нужно вытаскивать, из Tsdu?

    Да, вообще повнимательней читай DDK, там все написано в комментариях к event handler’ам.

    #6292
    Dmitry_177
    Participant

    Я понимаю что несколько Event-ов нужно перехватывать.. Но у меня этот код почему-то постоянно синий экран выдает… никак не могу понять почему..=(

    #6293
    Vadim Smirnov
    Keymaster

    Но у меня этот код почему-то постоянно синий экран выдает… никак не могу понять почему.

    А отладчик на что?

    #6294
    Dmitry_177
    Participant

    Soft-ICE у меня не запускается почему-то.. Что я только не делал.. И разные версии ставил и саму DriverStudio полную.. И на всяких форумах искал ответа и в гугле, не работает почему-то он у меня и все.. 🙁 Может из за того что у меня ноут..

    А для WinDBG нужен второй комп.. И еще, везде пишут что он входит в состав DDK, у меня его почему-то нету.. Еще искал файл windbg.exe(точно не помню сейчас его название, но на каком-то форуме видел его правильное название) ничего не нашлось.. 🙁

    Других отладчиков под ring0 я не знаю..

    А сдавать мне уже совсем скоро.. Скорей всего у меня перехват как-то неправильно устанавливается.. SerpentFly, помоги пожалуйста, очень надо..

    #6295
    Vadim Smirnov
    Keymaster

    WinDBG:

    http://www.microsoft.com/whdc/devtools/debugging/default.mspx

    Конфигурирование для работы с VMWare (вместо второй машины используем виртуальную):

    http://silverstr.ufies.org/lotr0/windbg-vmware.html

    Для SoftIce нужно скачать последний osinfo.dat, хотя если он перестал обновляться то может и не заработает.

    #6296
    Dmitry_177
    Participant

    Я как понимаю нужно VMWare скачать для создания виртуальной машины.. Зашел на сайт http://www.vmware.com/products/ и суда http://www.vmware.com/download/home.html а там много разных программ.. а какая мне нужна?

    #6297
    Vadim Smirnov
    Keymaster

    Лучше использовать VMWare Workstation, 30 дневная триал лицензия к ней прилагается.

    #6298
    Dmitry_177
    Participant

    Установил, VMware Workstation, создал там виртуальный комп, установил там ось.. Потом установил VMWare Tools, расшарил полностью диск С, так мне проще.. А вот как отлаживать драйвер? На ВМ нужно установить WinDBG и что дальше?

    Из той статьи не понятно где искать этот “Configuration Editor” написано что Settings->Configuration Editor, но что-то нигде в настройках не найду его что-то..

    #6299
    Dmitry_177
    Participant

    нашел..=) оказывается это при выключенной винде на ВМ есть..

    #6300
    Dmitry_177
    Participant

    Разобрался я немного с отладчиком… Из него я как понял драйвер валится на этом:
    return OldClientEventReceive(pBlockFromPagedLookasideList->EventContext,

    ConnectionContext,

    ReceiveFlags,

    BytesIndicated,

    BytesAvailable,

    *BytesTaken,

    Tsdu,

    *IoRequestPacket);`

    из функции HookedClientEventReceive, а она вот так выглядит:

    NTSTATUS HookedClientEventReceive(IN PVOID  TdiEventContext,
    
    IN CONNECTION_CONTEXT  ConnectionContext,
    
    IN ULONG  ReceiveFlags,
    
    IN ULONG  BytesIndicated,
    
    IN ULONG  BytesAvailable,
    
    OUT ULONG  *BytesTaken,
    
    IN PVOID  Tsdu,
    
    OUT PIRP  *IoRequestPacket)
    
    {
    
    UCHAR	*sduBuffer;
    
    PCLIENTEVENTRECEIVECONTEXT	pBlockFromPagedLookasideList;
    
    OLDCLIENTEVENTRECEIVE		OldClientEventReceive;
    
    _asm  // ýòî ÿ äåëàë äëÿ ïðåðûâàíèÿ, äëÿ îòëàäêè..
    
    {
    
    int    3
    
    }
    
    pBlockFromPagedLookasideList = TdiEventContext;
    
    OldClientEventReceive = pBlockFromPagedLookasideList->EventHandler;
    
    _asm
    
    {
    
    int    3
    
    }
    
    sduBuffer = Tsdu;
    
    DbgPrint("tdi_sniffer TDI_RECEIVE:n");
    
    DbgPrint(sduBuffer);
    
    _asm
    
    {
    
    int    3
    
    }
    
    // âîò òà ýòîì OldClientEventReceive âàëèòñÿ..
    
    return OldClientEventReceive(pBlockFromPagedLookasideList->EventContext,
    
    ConnectionContext,
    
    ReceiveFlags,
    
    BytesIndicated,
    
    BytesAvailable,
    
    *BytesTaken,
    
    Tsdu,
    
    *IoRequestPacket);
    
    }

    Вобщем все прерывания срабатывают.. DbgPrint пишет принятый первый пакет только.. А потом драйвет сваливается.. Я как понял на этой строке, но что в ней не так никак не пойму… По идее я присваиваю OldClientEventReceive оригинальный адрес из EventHandler-а а в pBlockFromPagedLookasideList->EventContext по идее содержится оригинальный контекст.. и почему BSOD не понимаю…

    #6301
    Vadim Smirnov
    Keymaster

    Первым делом, я бы проверил валидность сохраненных обработчика и контекста, а вообще смотреть нужно почему оригинап выпетает.

    Не вижу всего кода, но если pBlockFromPagedLookasideList действительно аппокирован из paged pool, то падает вполне закономерно, так как ClientEventReceive вызывается на IRQL_DISPATCH_LEVEL.

    #6302
    Dmitry_177
    Participant

    Я выкладывал код в своем посте: Posted:Wed Jun 27, 2007 12:02 am. Он практически так и не изменился, добавились только прерывания..

    Не вижу всего кода, но если pBlockFromPagedLookasideList действительно аппокирован из paged pool, то падает вполне закономерно, так как ClientEventReceive вызывается на IRQL_DISPATCH_LEVEL.

    У меня pBlockFromPagedLookasideList находится в НЕСТРАНИЧНОЙ ПАМЯТИ(NonPagedPool)! Вот:

    g_pPagedLookasideList = ExAllocatePool(NonPagedPool, sizeof(PAGED_LOOKASIDE_LIST));
    
    ExInitializePagedLookasideList(g_pPagedLookasideList, NULL, NULL, 0, sizeof(CLIENTEVENTRECEIVECONTEXT), 'tdis', 0);
    
    InitializeListHead(&g_ClientEventReceiveListHead);
    
    .........
    
    .....
    
    ......
    
    .....
    
    pBlockFromPagedLookasideList = ExAllocateFromPagedLookasideList(g_pPagedLookasideList);
    
    memset(pBlockFromPagedLookasideList, 0, sizeof(CLIENTEVENTRECEIVECONTEXT));
    
    InsertHeadList(&g_ClientEventReceiveListHead, &pBlockFromPagedLookasideList->ListEntry);
    
    // ñîõðàíÿåì îðèãèíàë ôóíêöèè â ñòðóêòóðå
    
    pBlockFromPagedLookasideList->EventHandler = ((PTDI_REQUEST_KERNEL_SET_EVENT)&irpStack->Parameters)->EventHandler;
    
    // ñîõðàíÿåì îðèãèíàë êîíòåêñòà â ñòðóêòóðå
    
    pBlockFromPagedLookasideList->EventContext = ((PTDI_REQUEST_KERNEL_SET_EVENT)&irpStack->Parameters)->EventContext;
    
    ((PTDI_REQUEST_KERNEL_SET_EVENT)&irpStack->Parameters)->EventHandler = HookedClientEventReceive;
    
    ((PTDI_REQUEST_KERNEL_SET_EVENT)&irpStack->Parameters)->EventContext = pBlockFromPagedLookasideList;
    #6303
    Vadim Smirnov
    Keymaster

    Ну если так, то я сдаюсь и ошибка все-таки в ДНК 😆

    Структура g_pPagedLookasideList аллокирована в NonPagedPool, но сам lookaside list при этом paged (ExInitializePagedLookasideList), другими словами все элеиенты в нем allocated from PagedPool. И использовать их на IRQL_DISPATCH_LEVEL низзя 😈

    #6304
    Dmitry_177
    Participant

    И использовать их на IRQL_DISPATCH_LEVEL низзя

    Ведь при компиляции в DDK при неверном IRQL на сколько я знаю он должен выдавать ошибку..

    Вообще если есть желание, то я могу куда-нибудь залить свой этот драйвер с исходниками.. Просто я не понимаю почему он не работает.. 👿

    #6305
    Vadim Smirnov
    Keymaster

    Ведь при компиляции в DDK при неверном IRQL на сколько я знаю он должен выдавать ошибку..

    С чего бы это? Если бы компилятор вдавался в такие тонкости – цены бы ему не было.

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

    Я вроде явную ошибку указал, если BSOD был с кодом IRQL_NOT_LESS_OR_EQUAL то это тебе второе подтверждение. Поменяй paged lookaside list на non paged lookaside list и будет тебе счастье.

    А вообще, неплохо было бы книжек почитать прежде чем драйвера писать…

Viewing 15 posts - 16 through 30 (of 62 total)
  • You must be logged in to reply to this topic.