Необходимые обработчики ndis драйвера промежуточного уровня

Тема в разделе "WASM.NT.KERNEL", создана пользователем Quark, 9 апр 2008.

  1. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    В ДДК описаны следующие необходимые обработчики:

    ProtocolOpenAdapterComplete
    ProtocolCloseAdapterComplete
    ProtocolSendComplete
    ProtocolTransferDataComplete
    ProtocolResetComplete
    ProtocolRequestComplete
    ProtocolReceive
    ProtocolReceiveComplete
    ProtocolStatus
    ProtocolStatusComplete
    ProtocolBindAdapter
    ProtocolUnbindAdapter
    ProtocolReceivePacket

    Также описаны ситуации при которых получает упрапвление каждый из них. Но не совсем понятно какие минимальные необходимые действия они должны выполнять? Допустим, мне нужен драйвер с минимальной функциональностью. Ну, например, вывод содержимого всех пакетов в отладочное окно. Достаточно ли для этой цели написать код DbgPrint в обработчики: ProtocolTransferDataComplete, ProtocolSendComplete, ProtocolReceivePacket, а остальные обработчики оставить пустыми? Я дизассемблировал ZxSniffer и смотрел примеры из ДДК: например, ProtocolBindAdapter в сниффере вообще пустой, а в ДДК там куча кода. Вообще конечной целью является написание снифера, а пока хотелось бы знать с чего начинать.
     
  2. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Для начала поиск по форуму, тут давались ссылки на книги, на исходники, на примеры, глять сайт TarasCo.

    А по поводу снифинга пакетов - обрабатывай PChars.TransferDataCompleteHandler.

    В этой функции достаточно получить буфер готового пакета (второй параметр), и размер переданных данных (третий параметр).

    При чем эту функцию надо вызвать вручную из обработчика PChars.ReceiveHandler

    А так в обработчиках можешь делать что душа пожелает. Тока возвращай нужные значения (ну например NDIS_STATUS_SUCCESS)
     
  3. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    Ага. пасиб. Меня ещё вот что смущает. В ДДК написано что PnPEventHandler является обязательным обработчиком. тем не менее в ZxSniffer его нет:

    Код (Text):
    1. .text:0001031C                 lea     ecx, [ebp+ProtocolCharacteristics]
    2. .text:00010322                 push    ecx             ; void *
    3. .text:00010323                 call    memset
    4. .text:00010328                 add     esp, 0Ch
    5. .text:0001032B                 mov     [ebp+ProtocolCharacteristics.MajorNdisVersion], 5
    6. .text:00010332                 mov     [ebp+ProtocolCharacteristics.MinorNdisVersion], 0
    7. .text:00010339                 mov     [ebp+ProtocolCharacteristics.Reserved], 0
    8. .text:00010343                 mov     [ebp+ProtocolCharacteristics.OpenAdapterCompleteHandler], offset ProtocolOpenAdapterComplete
    9. .text:0001034D                 mov     [ebp+ProtocolCharacteristics.CloseAdapterCompleteHandler], offset ProtocolCloseAdapterComplete
    10. .text:00010357                 mov     [ebp+ProtocolCharacteristics.SendCompleteHandler], offset ProtocolSendComplete
    11. .text:00010361                 mov     [ebp+ProtocolCharacteristics.TransferDataCompleteHandler], offset ProtocolTransferDataComplete
    12. .text:0001036B                 mov     [ebp+ProtocolCharacteristics.ResetCompleteHandler], offset ProtocolResetComplete
    13. .text:00010375                 mov     [ebp+ProtocolCharacteristics.RequestCompleteHandler], offset ProtocolRequestComplete
    14. .text:0001037F                 mov     [ebp+ProtocolCharacteristics.ReceiveHandler], offset ProtocolReceive
    15. .text:00010389                 mov     [ebp+ProtocolCharacteristics.ReceiveCompleteHandler], offset ProtocolReceiveComplete
    16. .text:00010393                 mov     [ebp+ProtocolCharacteristics.StatusHandler], offset ProtocolStatus
    17. .text:0001039A                 mov     [ebp+ProtocolCharacteristics.StatusCompleteHandler], offset ProtocolReceiveComplete
    18. .text:000103A1                 mov     [ebp+ProtocolCharacteristics.BindAdapterHandler], offset ProtocolBindAdapter
    19. .text:000103A8                 mov     [ebp+ProtocolCharacteristics.UnbindAdapterHandler], offset ProtocolUnbindAdapter
    20. .text:000103AF                 mov     dword ptr [ebp-70h], 0
    21. .text:000103B6                 mov     edx, [ebp-38h]
    22. .text:000103B9                 mov     [ebp-78h], edx
    23. .text:000103BC                 mov     eax, [ebp-34h]
    24. .text:000103BF                 mov     [ebp-74h], eax
    25. .text:000103C2                 push    6Ch
    26. .text:000103C4                 lea     ecx, [ebp-0A8h]
    27. .text:000103CA                 push    ecx
    28. .text:000103CB                 lea     edx, [ebp-28h]
    29. .text:000103CE                 push    edx
    30. .text:000103CF                 lea     eax, [ebp-1Ch]
    31. .text:000103D2                 push    eax
    32. .text:000103D3                 call    ds:NdisRegisterProtocol