Envío de datos de red
En la ilustración siguiente se muestra una operación de envío básica, que implica un controlador de protocolo, NDIS y un controlador de minipuerto.
Los controladores de protocolo llaman a la función NdisSendNetBufferLists para enviar estructuras NET_BUFFER_LIST en un enlace. NDIS llama a la función MiniportSendNetBufferLists del controlador de miniporte para reenviar las estructuras de NET_BUFFER_LIST a un controlador de miniporte subyacente.
Todas las operaciones de envío basadas en NET_BUFFER son asincrónicas. El controlador de minipuerto llama a la función NdisMSendNetBufferListsComplete con un código de estado adecuado cuando se realiza. El envío de cada estructura de NET_BUFFER_LIST se puede completar individualmente. NDIS llama a la función ProtocolSendNetBufferListsComplete del controlador de protocolo cada vez que el controlador de miniporte llama a NdisMSendNetBufferListsComplete.
Los controladores de protocolo pueden reclamar la propiedad de las estructuras de NET_BUFFER_LIST y todas las estructuras y datos asociados en cuanto el NDIS llama a la función ProtocolSendNetBufferListsComplete del controlador de protocolo.
El controlador de miniporte o NDIS puede devolver las estructuras de NET_BUFFER_LIST en cualquier orden. Se garantiza que no se ha modificado la lista de estructuras de NET_BUFFER asociadas a cada estructura de NET_BUFFER_LIST.
Cualquier controlador NDIS puede separar las estructuras de NET_BUFFER en una estructura de NET_BUFFER_LIST. Cualquier controlador NDIS también puede separar las MDL en una estructura de NET_BUFFER. Sin embargo, el controlador siempre debe devolver las estructuras de NET_BUFFER_LIST con las estructuras de NET_BUFFER y MDL en el formato original. Por ejemplo, un controlador intermedio podría separar un NET_BUFFER_LIST en dos nuevas estructuras de NET_BUFFER_LIST y pasar parte de los datos originales al controlador siguiente. Sin embargo, cuando el controlador intermedio completa el procesamiento del NET_BUFFER_LIST original, debe devolver el NET_BUFFER_LIST completo con las estructuras de NET_BUFFER originales y MDL.
Los controladores de protocolo establecen el miembro SourceHandle en la estructura de NET_BUFFER_LIST en la función NdisBindingHandle que NDIS proporcionó en una llamada a la función NdisOpenAdapterEx . NDIS usa el miembro SourceHandle para devolver las estructuras de NET_BUFFER_LIST al controlador de protocolo que envió las estructuras de NET_BUFFER_LIST.
Los controladores intermedios también establecen el miembro SourceHandle en la estructura de NET_BUFFER_LIST en el valor NdisBindingHandle que NDIS proporcionó en una llamada a NdisOpenAdapterEx. Si un controlador intermedio reenvía una solicitud de envío, el controlador debe guardar el valor sourceHandle que el controlador de sobrescritura proporcionó antes de escribir en el miembro SourceHandle . Cuando NDIS devuelve una estructura de NET_BUFFER_LIST reenviada al controlador intermedio, el controlador intermedio debe restaurar el sourceHandle que guardó.