Управление буфером драйвера miniport

Драйверы miniport обычно вызывают NdisAllocateNetBufferListPool из MiniportInitializeEx для создания пула NET_BUFFER_LIST структур. Драйверы мини-портов используют эти структуры для указания полученных данных.

Как правило, драйвер мини-порта, который выделяет NET_BUFFER_LIST структуру, выделяет и помещает в очередь одну NET_BUFFER структуру в этой NET_BUFFER_LIST структуре. При выделении пула NET_BUFFER_LIST структур эффективнее предварительно выделять NET_BUFFER структуры, чем отдельно выделять NET_BUFFER_LIST структуры и NET_BUFFER структуры.

Драйверы miniport могут вызывать NdisAllocateNetBufferListPool и устанавливать для параметра AllocateNetBufferзначение TRUE , чтобы указать, что NET_BUFFER структуры предварительно выделены. В этом случае предварительно выделяется структура NET_BUFFER с каждой структурой NET_BUFFER_LIST, которую драйвер выделяет из пула. Такие драйверы должны вызывать NdisAllocateNetBufferAndNetBufferList , чтобы выделить структуры из этого пула.

Как правило, драйвер мини-порта вызывает NdisAllocateNetBufferAndNetBufferList из MiniportInitializeEx , чтобы выделить столько буферов, сколько потребуется для последующих операций получения. В этом случае драйвер управляет внутренним списком свободных буферов.

Функция MiniportReturnNetBufferLists может подготовить возвращаемую структуру NET_BUFFER_LIST для повторного использования в последующем указании получения. Хотя MiniportReturnNetBufferLists может возвращать NET_BUFFER_LIST структуры в пул (например, он может вызывать NdisFreeNetBufferList), может быть более эффективным повторно использовать структуры, не возвращая их в пул.

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