Группа протокол.
Группа протокол.
Протокольные функции несколько отличаются от функций минипорта, но имеют схожую функциональную нагрузку, обратную функциям минипорта по направлению передачи пакетов.
PtOpenAdapterComplete
PtCloseAdapterComplete
PtBindAdapter
PtUnbindAdapter
Функции работы с адаптером – в нашем случае адаптером является драйвер модема или сетевой карты. Адаптер соответственно при запуске надо открыть и при окончании работы – закрыть. При обращении к нему привязать (bind) адаптер, захватить ресурс. В конце работы – освободить.
PtResetComplete
Абсолютно пустая функция – она должна быть но мы сюда не приходим.
PtRequestComplete
Функция вызываемая из PtPnPNetEventSetPower.
PtStatus
Функция отвечающая за проверку статуса нижестоящего адаптера, вернее статуса взаимодействия с ним нашего уровня.
PtStatusComplete
Завершение в случае невозможности быстрого ответа, примерно как и в случае MPSend.
PtSendComplete
Описана в секции минипорт
PtTransferDataComplete
PtReceive
PtReceiveComplete
PtReceivePacket
Функции работы с данными – аналогичны функциям минипорта. Одну из функций мы уже разбирали. Функции остальных – чуть позже.
PtUnload
Функция заведующая выгрузкой драйвера при выходе.
PtPNPHandler
PtPnPNetEventReconfigure
PtPnPNetEventSetPower
Работа с PnP.
Вновь обратим внимание на симметричную функцию PtReceive.
PADAPT pAdapt =(PADAPT)ProtocolBindingContext;
Контекст адаптера
PNDIS_PACKET MyPacket, Packet; Пакеты.
NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
Статус
if (!pAdapt->MiniportHandle) {
Status = NDIS_STATUS_FAILURE;
} else do {
Эта часть работает при наличии второго адаптера :)
if (pAdapt->isSecondary) {
DBGPRINT("PASSTHRU GETTING RECIEVES ON SECONDARY ");
ASSERT(0);
}
Забираем указатель на пакет в NDIS.
Packet = NdisGetReceivedPacket(pAdapt->BindingHandle, MacReceiveContext);
Если пакета нет то мы выходим иначе продолжаем как и в случае с отправкой.
if (Packet != NULL) {
Резервируем пакет для себя.
NdisDprAllocatePacket(&Status, &MyPacket, pAdapt->RecvPacketPoolHandle);
if (Status == NDIS_STATUS_SUCCESS) {
Копируем данные, как служебные, так и сами данные передаваемые наверх.
MyPacket->Private.Head = Packet->Private.Head;
MyPacket->Private.Tail = Packet->Private.Tail;
NDIS_SET_ORIGINAL_PACKET(MyPacket, NDIS_GET_ORIGINAL_PACKET(Packet));
NDIS_SET_PACKET_HEADER_SIZE(MyPacket, HeaderBufferSize);
NdisGetPacketFlags(MyPacket) = NdisGetPacketFlags(Packet);
NDIS_SET_PACKET_STATUS(MyPacket, NDIS_STATUS_RESOURCES);
В этом случае мы не посылаем пакет как при отправке, а просто указываем NDIS что MyPacket готов к передаче наверх.
NdisMIndicateReceivePacket(pAdapt->MiniportHandle, &MyPacket, 1);
ASSERT(NDIS_GET_PACKET_STATUS(MyPacket) == NDIS_STATUS_RESOURCES);
Освобождение пакета при нормальной передаче.
NdisDprFreePacket(MyPacket);
break;
}
}
Выбор типа адаптера внизу дает возможность применить для индикации готовности к передаче в случае ошибки стандартного сообщения NDIS. Это происходит в случае специфичных сетей и обрабатывается функциями связанными с этими типами.
pAdapt->IndicateRcvComplete = TRUE;
switch (pAdapt->Medium) {
case NdisMedium802_3:
NdisMEthIndicateReceive(pAdapt->MiniportHandle, MacReceiveContext, HeaderBuffer, HeaderBufferSize, LookAheadBuffer, LookAheadBufferSize, PacketSize);
break;
case NdisMedium802_5:
NdisMTrIndicateReceive(pAdapt->MiniportHandle, MacReceiveContext, HeaderBuffer, HeaderBufferSize, LookAheadBuffer, LookAheadBufferSize, PacketSize);
break;
case NdisMediumFddi:
NdisMFddiIndicateReceive(pAdapt->MiniportHandle, MacReceiveContext, HeaderBuffer, HeaderBufferSize, LookAheadBuffer, LookAheadBufferSize, PacketSize);
break;
default:
Это в случае если тип сети неизвестен.
ASSERT(0);
break;
}
} while(FALSE);
return Status;
Выход с статусом завершения.
Некоторое пояснение.
Когда тип адаптера и сети специфичен и отличается от стандарта LAN, нам нужно сообщить о пакете и его отправке соответствующей части сервиса NDIS. Именно в связи с этим и появляется выбор типа адаптера. При получении возможно наличие одновременного запроса на прием пакета с разных адаптеров.
В случае с операцией Send этого не происходит, так как NDIS сама по контексту определяет к какому адаптеру предназначен пакет.
Оставшиеся функции аналогичны по назначению с группой функций минипорта.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Группа
Группа Группу также нельзя отнести к "настоящим" элементам управления. Она объединяет несколько элементов управления, имеющих сходное назначение. Визуально группа представляет собой рамку, окружающую элементы управления и, возможно, имеющую заголовок, расположенный
«Притертая» группа
«Притертая» группа Группы формируются не сразу. Между участниками постепенно налаживаются отношения. Они учатся работать друг с другом, узнают странности, сильные и слабые стороны своих коллег. Со временем участники «притираются» друг к другу.В «притертой» группе есть
Что сначала – группа или проект?
Что сначала – группа или проект? Банки и страховые компании пытались формировать группы на базе проектов. Такой подход неверен в принципе: группы просто не могут «притереться». Участники работают над проектом в течение короткого времени, притом посвящая ему лишь часть
Группа активизации ILE
Группа активизации ILE Группа активизации содержит целиком или только ссылки на некоторые компоненты со странными, на первый взгляд, именами и аббревиатурами. Давайте сначала разберемся, что это за компоненты.Блок управления активизацией программы PACB (Program Activation Control Block)
Группа
Группа Группу также нельзя отнести к "настоящим" элементам управления. Она объединяет несколько элементов управления, имеющих сходное назначение. Визуально группа представляет собой рамку, окружающую элементы управления и, возможно, имеющую заголовок, расположенный
Домашняя группа
Домашняя группа Новый механизм, появившийся в Windows 7, с помощью которого вы можете легко создать домашнюю группу и управлять подключением новых пользователей к данной группе. Это позволяет создать сеть между всеми подключенными к группе компьютерами и организовать
Домашняя группа
Домашняя группа Домашняя группа – это новый механизм, реализованный в системе Windows 7. Смысл его состоит в том, чтобы предоставить общий доступ к файлам и папкам, а также устройствам всем пользователям, включенным в домашнюю группу. Например, можно объединить в домашнюю
1-я ценовая группа
1-я ценовая группа Около 5 % в каждой категории товаров (самое ходовое) нужно сделать очень дешевыми (с низкой маржой) или выделить несколько высококонкурентных товаров с минимальной наценкой. За счет этих товаров-локомотивов вы привлечете дополнительных клиентов,
2-я ценовая группа
2-я ценовая группа Вторая группа товаров в каждой категории должна иметь среднюю маржу, чуть выше, чем у конкурентов, – на 5-10 %. Таких товаров должно быть около 85–90 % от общего
3-я ценовая группа
3-я ценовая группа Наконец, третья ценовая группа, не очень большая, предназначена для премиум-сегмента. Туда входят товары с очень большой маржой, цена на которые должна быть значительно выше других аналогичных товаров в вашем интернет-магазине.Не продавая дорогие
Группа
Группа Представляет собой совокупность отделов, менеджеров и сотрудников, которые несут ответственность за набор задач или операций. Состав группы может варьироваться от одного или нескольких совместителей из различных отделов до нескольких сотрудников, занятых этой
Группа разработки ПО
Группа разработки ПО Представляет собой коллектив сотрудников (руководителей и технических специалистов), которые несут ответственность за проектные операции по разработке и сопровождению ПО (т. е. анализ требований, проектирование, кодирование и тестирование).В
Группа системного проектирования
Группа системного проектирования Является коллективом сотрудников (руководителей и технических специалистов), которые несут ответственность за определение системных требований; отнесение этих требований к оборудованию, ПО и другим компонентам; определение
Группа обучения
Группа обучения Состоит из сотрудников (руководителей и технических специалистов), отвечающих за координацию и проведение учебных мероприятий организации. Эта группа обычно готовит и проводит большинство учебных курсов и координирует использование других средств
Группа минипорт.
Группа минипорт. Функции этой группы занимаются обработкой потока данных и событий, происходящих в верхнем уровне драйвера, и вызываемых обращением к NDIS TCP/IP стека.Если посмотреть на схемы из второй части, то видно, что в нижней части находятся функции протокола, а в
Группа Шрифт ленты
Группа Шрифт ленты На вкладке Главная ленты расположена группа Шрифт, которая содержит инструменты форматирования для изменения шрифта и его атрибутов. Кроме того, в этой группе находится кнопка для выбора цвета заливки ячейки и кнопка выбора границ ячейки.