Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Драйверы фильтров создают буферы для копирования сетевых данных, полученных из других драйверов, или для запуска операций отправки или получения.
Если драйвер фильтра не создает буферы, драйвер не управляет пулами буферов. Такой драйвер просто передает буферы, которые он получает от других драйверов.
Драйвер фильтра, создающий буферы для поддержки операций отправки или получения, должен управлять пулами структур NET_BUFFER_LIST и пулами структур NET_BUFFER .
Чтобы создать эти пулы, драйверы вызывают следующие функции:
Драйверы фильтров могут использовать следующие функции для выделения структур из пулов:
NdisAllocateNetBufferAndNetBufferList
Вызов NdisAllocateNetBufferAndNetBufferList является более эффективным, чем вызов NdisAllocateNetBufferList , за которым следует NdisAllocateNetBuffer. Однако NdisAllocateNetBufferAndNetBufferList создает только одну структуру NET_BUFFER на структуре NET_BUFFER_LIST. Чтобы использовать NdisAllocateNetBufferAndNetBufferList, драйвер должен задать для параметра AllocateNetBufferзначение TRUE при вызове NdisAllocateNetBufferListPool.
Драйверы фильтров, инициирующие отправку запросов, должны определять контекст и требования к пространству для обратной записи базовых драйверов. Драйверы фильтров используют атрибуты перезапуска для определения требований к обратной записи базовых драйверов. Драйвер фильтра должен определить требования к дозаполнению и контексту в состоянии Перезапуска. Драйвер должен выделить достаточный резервный объем и пространство для контекста всего стека. При необходимости драйвер фильтра может освободить пулы и перераспределить их в состоянии перезапуска .
Драйверы фильтров используют следующие функции для освобождения пулов:
Драйверы фильтров используют следующие функции для освобождения структур, выделенных из пулов:
Драйверы должны освобождать структуры NET_BUFFER, выделенные с помощью NdisAllocateNetBuffer, прежде чем освобождать связанную структуру NET_BUFFER_LIST. NET_BUFFER структуры, выделенные с использованием NdisAllocateNetBufferAndNetBufferList, освобождаются, когда драйвер вызывает NdisFreeNetBufferList для связанных структур NET_BUFFER_LIST.