Поделиться через


Поддержка разделения Header-Data в драйверах протоколов и фильтров

Драйверы протоколов NDIS 6.0 и более поздних версий, а также драйверы фильтров, должны поддерживать приёмные индикаторы, где заголовок и данные находятся в неконтигуозных буферах.

Не следует предположить, что в структуре NET_BUFFER существует только один MDL. Драйверы протокола и драйверы фильтров не обязаны выполнять какие-либо конкретные действия для поддержки регистрации разделения заголовка и данных. Но драйвер получает код обработки должен обрабатывать несколько MDL в цепочке MDL и должен использовать следующие макросы MDL NDIS для доступа к цепочке MDL:

При разделенных буферах длина данных, связанная со структурой NET_BUFFER (в элементе DataLength в структуре NET_BUFFER_DATA), распределена между несколькими MDL. Например, если драйвер протокола пытался получить доступ ко всему буферу данных в первом MDL, драйвер может получить доступ к недопустимым данным.

Примечание После того, как вызов функции индикации получения возвращается в драйвер минипорта, драйвер минипорта может восстановить списки дескрипторов памяти заголовка (MDLs). Драйверы более высокого уровня или их клиенты не должны получать доступ к MDLs заголовка после возврата вызова индикации получения минипорт-драйверу. Это ограничение также применяется даже, если драйвер минипорта не указывает полученные данные с состоянием NDIS_RECEIVE_FLAGS_RESOURCES.