Estructuras de NET_BUFFER_LIST clonadas
Un controlador NDIS crea una estructura de NET_BUFFER_LIST clonada a partir de una estructura de NET_BUFFER_LIST existente. La estructura clonada hace referencia a los datos de estructuras originales. Los controladores pueden usar este tipo de estructura para transferir eficazmente los mismos datos a varias rutas de acceso.
En la ilustración siguiente se muestra la relación entre una estructura de NET_BUFFER_LIST primaria y una estructura secundaria clonada.
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 una estructura de NET_BUFFER con MDL adjuntas. El NET_BUFFER_LIST secundario tiene un puntero a la estructura primaria. El valor NULL donde un puntero de estructura NET_BUFFER_LIST_CONTEXT indicaría que el elemento secundario no tiene ninguna estructura NET_BUFFER_LIST_CONTEXT.
Los controladores llaman a la función NdisAllocateCloneNetBufferList para crear una estructura de NET_BUFFER_LIST clonada. NDIS asigna nuevas estructuras de NET_BUFFER y MDL con la estructura de NET_BUFFER_LIST clonada. NDIS no asigna una estructura de NET_BUFFER_LIST_CONTEXT para la estructura clonada. Las nuevas estructuras de NET_BUFFER y MDL describen los mismos datos que en la estructura primaria. Los datos no se copian.
Los controladores llaman a la función NdisFreeCloneNetBufferList para liberar una estructura de NET_BUFFER_LIST y todas las estructuras de NET_BUFFER asociadas y las cadenas MDL asignadas anteriormente mediante una llamada a NdisAllocateCloneNetBufferList.