"Гром. Как писать драйвера (fb2) " - читать интересную книгу автораГруппа протокол.Протокольные функции несколько отличаются от функций минипорта, но имеют схожую функциональную нагрузку, обратную функциям минипорта по направлению передачи пакетов. PtOpenAdapterComplete PtCloseAdapterComplete PtBindAdapter PtUnbindAdapter Функции работы с адаптером – в нашем случае адаптером является драйвер модема или сетевой карты. Адаптер соответственно при запуске надо открыть и при окончании работы – закрыть. При обращении к нему привязать (bind) адаптер, захватить ресурс. В конце работы – освободить. PtResetComplete Абсолютно пустая функция – она должна быть но мы сюда не приходим. PtRequestComplete Функция вызываемая из PtPnPNetEventSetPower. PtStatus Функция отвечающая за проверку статуса нижестоящего адаптера, вернее статуса взаимодействия с ним нашего уровня. PtStatusComplete Завершение в случае невозможности быстрого ответа, примерно как и в случае MPSend. PtSendComplete Описана в секции минипорт PtTransferDataComplete PtReceive PtReceiveComplete PtReceivePacket Функции работы с данными – аналогичны функциям минипорта. Одну из функций мы уже разбирали. Функции остальных – чуть позже. PtUnload Функция заведующая выгрузкой драйвера при выходе. PtPNPHandler PtPnPNetEventReconfigure PtPnPNetEventSetPower Работа с PnP. Вновь обратим внимание на симметричную функцию PtReceive.
Контекст адаптера
Статус
Забираем указатель на пакет в NDIS. Если пакета нет то мы выходим иначе продолжаем как и в случае с отправкой.
Резервируем пакет для себя.
Копируем данные, как служебные, так и сами данные передаваемые наверх.
В этом случае мы не посылаем пакет как при отправке, а просто указываем NDIS что MyPacket готов к передаче наверх.
Освобождение пакета при нормальной передаче.
Выбор типа адаптера внизу дает возможность применить для индикации готовности к передаче в случае ошибки стандартного сообщения NDIS. Это происходит в случае специфичных сетей и обрабатывается функциями связанными с этими типами.
Это в случае если тип сети неизвестен.
Выход с статусом завершения. Некоторое пояснение. Когда тип адаптера и сети специфичен и отличается от стандарта LAN, нам нужно сообщить о пакете и его отправке соответствующей части сервиса NDIS. Именно в связи с этим и появляется выбор типа адаптера. При получении возможно наличие одновременного запроса на прием пакета с разных адаптеров. В случае с операцией Send этого не происходит, так как NDIS сама по контексту определяет к какому адаптеру предназначен пакет. Оставшиеся функции аналогичны по назначению с группой функций минипорта. |
|
|