Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Драйвер NDIS может создать переупорядоченную NET_BUFFER_LIST структуру из существующей NET_BUFFER_LIST структуры. Восстановленная структура ссылается на исходные данные из нескольких NET_BUFFER структур. Драйверы могут использовать этот тип структуры для эффективного объединения нескольких небольших буферов в один большой буфер.
На следующем рисунке показана связь между родительской NET_BUFFER_LIST структурой и повторной сборкой дочерней структуры:
На предыдущей схеме содержится родительская структура NET_BUFFER_LIST и дочерняя структура, производная от этой родительской структуры. Родительская структура содержит одну структуру NET_BUFFER_LIST_CONTEXT и три структуры NET_BUFFER с присоединёнными MDL. Родительский указатель родительской структуры NULL, указывающий, что она не является производной структурой.
У дочерней структуры NET_BUFFER_LIST есть одна структура NET_BUFFER с прикрепленными MDL. У дочерней NET_BUFFER_LIST структуры есть указатель на родительскую структуру. NULL, где должен быть указатель структуры NET_BUFFER_LIST_CONTEXT, указывает, что дочерний элемент не имеет структуры NET_BUFFER_LIST_CONTEXT.
Драйверы NDIS вызывают функцию NdisAllocateReassembledNetBufferList для сборки заново фрагментированной структуры NET_BUFFER_LIST. NDIS выделяет новую структуру NET_BUFFER и MDL со структурой NET_BUFFER_LIST после повторной сборки. NDIS не выделяет структуру NET_BUFFER_LIST_CONTEXT для повторной сборки. Воссозданная структура NET_BUFFER и списки дескрипторов памяти (MDL) описывают те же данные, что и родительская структура. Данные не копируются.
Чтобы создать структуру NET_BUFFER_LIST после повторной сборки, NdisAllocateReassembledNetBufferList пропускает количество байтов, указанное в параметре StartOffset в каждой из родительских структур NET_BUFFER. NdisAllocateReassembledNetBufferList объединяет оставшиеся данные в каждой родительской структуры NET_BUFFER в составе цепочки MDL одной повторно собранной структуры NET_BUFFER. NdisAllocateReassembledNetBufferList уменьшает (увеличивает используемое пространство данных в) восстановленной структуре NET_BUFFER на величину, указанную в DataOffsetDelta.
Драйверы NDIS вызывают функцию NdisFreeReassembledNetBufferList для освобождения собранной заново структуры NET_BUFFER_LIST и связанной с ней структуры NET_BUFFER и цепочки MDL.