Compartir a través de


Estructuras de NET_BUFFER_LIST fragmentadas

Un controlador NDIS puede crear una estructura de NET_BUFFER_LIST fragmentada a partir de una estructura de NET_BUFFER_LIST existente. La estructura fragmentada hace referencia a un conjunto de estructuras de NET_BUFFER que hacen referencia a los datos originales; sin embargo, los datos se dividen en unidades que no superan un tamaño máximo. Los controladores pueden usar este tipo de estructura para dividir eficazmente los búferes grandes en búferes más pequeños.

En la ilustración siguiente se muestra la relación entre una estructura NET_BUFFER_LIST primaria y un elemento secundario fragmentado.

Diagrama que muestra la relación entre una estructura de NET_BUFFER_LIST primaria y su estructura secundaria fragmentada.

La ilustración anterior contiene una estructura de NET_BUFFER_LIST primaria y una estructura secundaria derivada de ese elemento primario. La estructura primaria tiene una estructura NET_BUFFER_LIST_CONTEXT y una estructura NET_BUFFER con MDL adjuntas. El puntero primario de la estructura primaria es NULL que indica que no es una estructura derivada.

La estructura NET_BUFFER_LIST secundaria tiene tres estructuras NET_BUFFER con MDL adjuntas. La estructura NET_BUFFER_LIST secundaria tiene un puntero a la estructura primaria. El NULL donde un puntero de estructura de NET_BUFFER_LIST_CONTEXT sería indicar que el elemento secundario no tiene ninguna estructura NET_BUFFER_LIST_CONTEXT.

Los controladores NDIS llaman a la función NdisAllocateFragmentNetBufferList para crear una nueva estructura de NET_BUFFER_LIST fragmentada basada en los datos de una estructura de NET_BUFFER_LIST existente. NDIS asigna nuevas estructuras de NET_BUFFER y MDL para la estructura de NET_BUFFER_LIST fragmentada. NDIS no asigna una estructura NET_BUFFER_LIST_CONTEXT para la estructura fragmentada. El fragmento NET_BUFFER estructuras y MDL describen los mismos datos que la estructura primaria. Los datos no se copian.

NdisAllocateFragmentNetBufferList crea los fragmentos, empezando desde el principio del espacio de datos usado en cada estructura de NET_BUFFER primaria y desplazamiento por el valor especificado en el parámetro StartOffset.

NdisAllocateFragmentNetBufferList divide el espacio de datos usado en cada estructura NET_BUFFER de origen en fragmentos. La longitud del espacio de datos usado de cada fragmento es menor o igual que el valor especificado en el parámetro maximumLength . El espacio de datos usado del último fragmento puede ser menor que MaximumLength . El desplazamiento de datos de las nuevas estructuras de NET_BUFFER se retira mediante el número de bytes especificados en el parámetro DataOffsetDelta.

Si hay varias estructuras de NET_BUFFER en la estructura principal NET_BUFFER_LIST (no se muestra en la ilustración), el proceso de fragmentación de cada estructura NET_BUFFER es el mismo que para una sola estructura. Por ejemplo, si el último fragmento de datos de cualquier estructura primaria NET_BUFFER es menor que el tamaño máximo, NDIS no combina dichos datos con los datos al principio de la siguiente estructura de NET_BUFFER.

Los controladores NDIS llaman a la funciónNdisFreeFragmentNetBufferList para liberar una estructura de NET_BUFFER_LIST y todas las estructuras de NET_BUFFER asociadas y cadenas MDL asignadas anteriormente mediante una llamada a NdisAllocateFragmentNetBufferList.

Estructuras NET_BUFFER_LIST obtenidas