Клонированные структуры NET_BUFFER_LIST
Драйвер NDIS создает клонированную структуру 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.