Форум программистов «Весельчак У»
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
Начало
Наши сайты
Галерея
Весельчак У
Наша Вики
Хранилище
Проекты
Правила
Правила форума
Правила русского языка
Помощь
Поиск
Календарь
Почта
Войти
Регистрация
Форум программистов «Весельчак У»
>
Направления программирования
>
Drivers
(Модераторы:
Ochkarik
,
aks68
) > Тема:
Обработка пакета
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Обработка пакета (Прочитано 5532 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ppp
Гость
Обработка пакета
«
:
30-11-2005 19:24 »
Как после перехвата NdisRegisterProtocol и подмены ReceiveHandler получить весь пакет в новом обработчике newReceiveHandler?
Записан
Kife
Помогающий
Offline
Re: Обработка пакета
«
Ответ #1 :
01-12-2005 08:43 »
так ты его и получишь целиком в своей функции PPRecieve (ProtocolRecieve или как ты там ее еще обозвал) в виде:
INT PPReceivePacket
(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_PACKET Packet
)
так вот параметр "IN PNDIS_PACKET Packet" -- это и есть пакет!
Записан
_______
Да поможет нам F1, и да сохранит нас F2 ...
ppp
Гость
Re: Обработка пакета
«
Ответ #2 :
01-12-2005 11:24 »
Нет, в перехваченном NdisRegisterProtocol подменяется protocolCharacteristics->ReceiveHandler, этот ReceiveHandler получает параметры:
NDIS_HANDLE protocolBindingContext,
NDIS_HANDLE macReceiveContext,
PVOID pHeader,
UINT headerSize,
PVOID lookAheadBuffer,
UINT lookAheadBufferSize,
UINT packetSize.
Но этот ReceiveHandler может получить пакет не полностью (если lookAheadBufferSize > packetSize), вот тогда и надо как-то достать весь этот пакет. А как, я не знаю.
Записан
Kife
Помогающий
Offline
Re: Обработка пакета
«
Ответ #3 :
01-12-2005 13:04 »
АА, все, понял. смотри как я делаю:
NDIS_STATUS PPReceive
(
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_HANDLE MacReceiveContext,
IN PVOID HeaderBuffer,
IN UINT HeaderBufferSize,
IN PVOID LookAheadBuffer,
IN UINT LookAheadBufferSize,
IN UINT PacketSize
)
{
PADAPT pAdapt = (PADAPT)ProtocolBindingContext;
PNDIS_PACKET MyPacket, Packet;
NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
BOOLEAN bDecision;
/* Новые переменные */
BOOLEAN Remaining;
ULONG MACAddrComp;
ULONG EncPayloadl;
ULONG UnEncPayloadl;
#define szPayloadCopy ETH_MAX_PACKET_SIZE
char PayloadCopy[szPayloadCopy];
pEthHdr pETH;
PUCHAR pUnencPayload = NULL;
PUCHAR pNewIPPayload = NULL;
/* Новый код*/
#ifdef DBG
DbgPrint("TCR-VPN: >>>>>PPReceive \n");
#endif
if ((!pAdapt->MiniportHandle) || (pAdapt->MiniportDeviceState > NdisDeviceStateD0))
{
Status = NDIS_STATUS_FAILURE;
}
else do
{
// Получим пакет
Packet = NdisGetReceivedPacket(pAdapt->BindingHandle, MacReceiveContext);
if (Packet != NULL)
{
// РРР, ВОТ ТУТ ВСЕГДА (ИМХО) ЦЕЛЫЙ ПАКЕТ!!! (ПО КРАЙНЕЙ МЕРЕ У МЕНЯ ВСЕ РАБОТАЕТ)
//Приняли пакет. Получим данные:
GetPktPayload(Packet,PayloadCopy,szPayloadCopy,&EncPayloadl);
pETH = (pEthHdr)PayloadCopy; // Point to ethernet header.
ETH_COMPARE_NETWORK_ADDRESSES_EQ(pETH->SrcMAC, pAdapt->MACAddress, &MACAddrComp);
И Т.Д.
Записан
_______
Да поможет нам F1, и да сохранит нас F2 ...
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Форум программистов «Весельчак У»
>
Направления программирования
>
Drivers
(Модераторы:
Ochkarik
,
aks68
) > Тема:
Обработка пакета
Загружается...