В ДДК описаны следующие необходимые обработчики: ProtocolOpenAdapterComplete ProtocolCloseAdapterComplete ProtocolSendComplete ProtocolTransferDataComplete ProtocolResetComplete ProtocolRequestComplete ProtocolReceive ProtocolReceiveComplete ProtocolStatus ProtocolStatusComplete ProtocolBindAdapter ProtocolUnbindAdapter ProtocolReceivePacket Также описаны ситуации при которых получает упрапвление каждый из них. Но не совсем понятно какие минимальные необходимые действия они должны выполнять? Допустим, мне нужен драйвер с минимальной функциональностью. Ну, например, вывод содержимого всех пакетов в отладочное окно. Достаточно ли для этой цели написать код DbgPrint в обработчики: ProtocolTransferDataComplete, ProtocolSendComplete, ProtocolReceivePacket, а остальные обработчики оставить пустыми? Я дизассемблировал ZxSniffer и смотрел примеры из ДДК: например, ProtocolBindAdapter в сниффере вообще пустой, а в ДДК там куча кода. Вообще конечной целью является написание снифера, а пока хотелось бы знать с чего начинать.
Для начала поиск по форуму, тут давались ссылки на книги, на исходники, на примеры, глять сайт TarasCo. А по поводу снифинга пакетов - обрабатывай PChars.TransferDataCompleteHandler. В этой функции достаточно получить буфер готового пакета (второй параметр), и размер переданных данных (третий параметр). При чем эту функцию надо вызвать вручную из обработчика PChars.ReceiveHandler А так в обработчиках можешь делать что душа пожелает. Тока возвращай нужные значения (ну например NDIS_STATUS_SUCCESS)
Ага. пасиб. Меня ещё вот что смущает. В ДДК написано что PnPEventHandler является обязательным обработчиком. тем не менее в ZxSniffer его нет: Код (Text): .text:0001031C lea ecx, [ebp+ProtocolCharacteristics] .text:00010322 push ecx ; void * .text:00010323 call memset .text:00010328 add esp, 0Ch .text:0001032B mov [ebp+ProtocolCharacteristics.MajorNdisVersion], 5 .text:00010332 mov [ebp+ProtocolCharacteristics.MinorNdisVersion], 0 .text:00010339 mov [ebp+ProtocolCharacteristics.Reserved], 0 .text:00010343 mov [ebp+ProtocolCharacteristics.OpenAdapterCompleteHandler], offset ProtocolOpenAdapterComplete .text:0001034D mov [ebp+ProtocolCharacteristics.CloseAdapterCompleteHandler], offset ProtocolCloseAdapterComplete .text:00010357 mov [ebp+ProtocolCharacteristics.SendCompleteHandler], offset ProtocolSendComplete .text:00010361 mov [ebp+ProtocolCharacteristics.TransferDataCompleteHandler], offset ProtocolTransferDataComplete .text:0001036B mov [ebp+ProtocolCharacteristics.ResetCompleteHandler], offset ProtocolResetComplete .text:00010375 mov [ebp+ProtocolCharacteristics.RequestCompleteHandler], offset ProtocolRequestComplete .text:0001037F mov [ebp+ProtocolCharacteristics.ReceiveHandler], offset ProtocolReceive .text:00010389 mov [ebp+ProtocolCharacteristics.ReceiveCompleteHandler], offset ProtocolReceiveComplete .text:00010393 mov [ebp+ProtocolCharacteristics.StatusHandler], offset ProtocolStatus .text:0001039A mov [ebp+ProtocolCharacteristics.StatusCompleteHandler], offset ProtocolReceiveComplete .text:000103A1 mov [ebp+ProtocolCharacteristics.BindAdapterHandler], offset ProtocolBindAdapter .text:000103A8 mov [ebp+ProtocolCharacteristics.UnbindAdapterHandler], offset ProtocolUnbindAdapter .text:000103AF mov dword ptr [ebp-70h], 0 .text:000103B6 mov edx, [ebp-38h] .text:000103B9 mov [ebp-78h], edx .text:000103BC mov eax, [ebp-34h] .text:000103BF mov [ebp-74h], eax .text:000103C2 push 6Ch .text:000103C4 lea ecx, [ebp-0A8h] .text:000103CA push ecx .text:000103CB lea edx, [ebp-28h] .text:000103CE push edx .text:000103CF lea eax, [ebp-1Ch] .text:000103D2 push eax .text:000103D3 call ds:NdisRegisterProtocol