Compartir a través de


Envío de estructuras de NET_BUFFER desde controladores coNDIS

En la ilustración siguiente se muestra una operación básica de envío de CoNDIS, que implica un controlador de protocolo, NDIS y un controlador de minipuerto.

Diagrama que ilustra una operación básica de envío de CoNDIS que implica un controlador de protocolo, NDIS y un controlador de minipuerto.

Como se muestra en la ilustración anterior, los controladores de protocolo llaman a la función NdisCoSendNetBufferLists para enviar estructuras NET_BUFFER_LIST en una conexión virtual (VC). NDIS llama a la función MiniportCoSendNetBufferLists del controlador de miniporte para reenviar las estructuras de NET_BUFFER_LIST a un controlador de minipuerto subyacente.

Todas las operaciones de envío basadas en NET_BUFFER son asincrónicas. Por lo tanto, el controlador de minipuerto siempre llama a la función NdisMCoSendNetBufferListsComplete y proporciona un código de estado adecuado cuando se realiza el envío de los datos. El controlador de minipuerto puede completar la operación de envío para cada estructura NET_BUFFER_LIST independiente de otras estructuras de NET_BUFFER_LIST. NDIS llama a la función ProtocolCoSendNetBufferListsComplete del controlador de protocolo cada vez que el controlador de miniporta llama a NdisMCoSendNetBufferListsComplete.

Los controladores de protocolo pueden reclamar la propiedad de las estructuras de NET_BUFFER_LIST y todas las estructuras y datos asociados en cuanto NDIS llama a la función ProtocolCoSendNetBufferListsComplete del controlador de protocolo.

El controlador de minipuerto o NDIS puede devolver las estructuras de NET_BUFFER_LIST en cualquier orden. Sin embargo, se garantiza que no se ha modificado la lista de estructuras de NET_BUFFER adjuntas a cada estructura de NET_BUFFER_LIST.

Los controladores de protocolos establecen el miembro SourceHandle en la estructura NET_BUFFER_LIST en el mismo valor que el parámetro NdisVcHandle de NdisCoSendNetBufferLists. 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 NET_BUFFER_LIST en el valor NdisVcHandle . Si un controlador intermedio reenvía una solicitud de envío, el controlador debe guardar el valor SourceHandle que proporcionó el controlador de sobreaprovisionamiento 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ó.

Los controladores de protocolo pueden cancelar las solicitudes de envío mediante los mismos mecanismos que los controladores sin conexión. Para obtener más información sobre cómo cancelar solicitudes de envío, vea Cancelar una operación de envío.