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


Клонированные структуры NET_BUFFER_LIST

Драйвер NDIS создает клонированную структуру NET_BUFFER_LIST из существующей структуры NET_BUFFER_LIST. Клонированная структура ссылается на исходные данные структур. Драйверы могут использовать структуру этого типа для эффективной передачи одних и те же данных по нескольким путям.

На следующем рисунке показана связь между родительской NET_BUFFER_LIST структурой и клонированной дочерней структурой.

Схема, показывающая связь между родительской NET_BUFFER_LIST структурой и ее клонированной дочерней структурой.

Предыдущий рисунок содержит родительскую NET_BUFFER_LIST структуру и дочернюю структуру, производную от этого родительского элемента. Родительская структура имеет одну NET_BUFFER_LIST_CONTEXT структуру и одну NET_BUFFER структуру с присоединенными многомерными списками. Родительский указатель родительской структуры имеет значение NULL , что указывает на то, что она не является производной структурой.

Дочерняя структура NET_BUFFER_LIST имеет одну NET_BUFFER структуру с присоединенными многомерными списками. Дочерний NET_BUFFER_LIST имеет указатель на родительскую структуру. Значение NULL, в котором будет указан указатель структуры NET_BUFFER_LIST_CONTEXT, указывает, что дочерний элемент не имеет NET_BUFFER_LIST_CONTEXT структуры.

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

Драйверы вызывают функцию NdisFreeCloneNetBufferList , чтобы освободить структуру NET_BUFFER_LIST и все связанные структуры NET_BUFFER и цепочки MDL, которые ранее были выделены путем вызова NdisAllocateCloneNetBufferList.

Производные структуры NET_BUFFER_LIST