Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En la ilustración siguiente se muestra una operación de envío de controladores de protocolo, que implica un controlador de protocolo, NDIS y controladores subyacentes en una pila de controladores.
Los controladores de protocolo invocan la función NdisSendNetBufferLists para enviar los datos de red que se definen en una lista de estructuras de NET_BUFFER_LIST.
Un controlador de protocolo debe establecer el miembro SourceHandle de cada estructura de NET_BUFFER_LIST en el mismo valor que pasa al parámetro NdisBindingHandle. El identificador de enlace proporciona la información que NDIS requiere para devolver la estructura de NET_BUFFER_LIST al controlador de protocolo después de que el controlador de miniport subyacente llame a NdisMSendNetBufferListsComplete.
Antes de llamar a NdisSendNetBufferLists, un controlador de protocolo puede establecer información que acompaña a la solicitud de envío con la macro NET_BUFFER_LIST_INFO. Los controladores subyacentes pueden recuperar esta información con la macro NET_BUFFER_LIST_INFO.
Tan pronto como un controlador de protocolo llama a NdisSendNetBufferLists, renuncia a la propiedad de las estructuras NET_BUFFER_LIST y todos los recursos asociados. NDIS llama a la función ProtocolSendNetBufferListsComplete para devolver las estructuras y los datos al controlador de protocolo. NDIS puede recopilar las estructuras y los datos de varias solicitudes de envío en una sola lista enlazada de estructuras de NET_BUFFER_LIST antes de pasar la lista a ProtocolSendNetBufferListsComplete.
Hasta que NDIS llame a ProtocolSendNetBufferListsComplete, el estado actual de un envío iniciado por un controlador de protocolo es desconocido. Un controlador de protocolo libera temporalmente la propiedad de todos los recursos que asignó para una solicitud de envío cuando llama a NdisSendNetBufferLists. Un controlador de protocolo nunca debe intentar examinar las estructuras de NET_BUFFER_LIST o los datos asociados antes de que NDIS devuelva las estructuras a ProtocolSendNetBufferListsComplete.
ProtocolSendNetBufferListsComplete realiza cualquier postprocesamiento necesario para completar una operación de envío. Por ejemplo, el controlador de protocolo puede notificar a los clientes, que solicitaron al controlador de protocolo que envíe los datos de red, que la operación de envío está completa.
Cuando NDIS llama a ProtocolSendNetBufferListsComplete, el controlador de protocolo recupera la propiedad de todos los recursos asociados a las estructuras de NET_BUFFER_LIST especificadas por el parámetro NetBufferLists. ProtocolSendNetBufferListsComplete puede liberar estos recursos (por ejemplo, llamando a NdisFreeNetBuffer y NdisFreeNetBufferList) o prepararlos para su reutilización en una llamada posterior a NdisSendNetBufferLists.
Aunque NDIS siempre envía datos de red proporcionados por el protocolo al controlador de miniport subyacente en el orden determinado por el protocolo tal como se pasa a NdisSendNetBufferLists, el controlador subyacente puede completar las solicitudes de envío en orden aleatorio. Es decir, cada controlador de protocolo enlazado puede depender de NDIS para enviar los datos de red que el controlador de protocolo pasa a NdisSendNetBufferLists en un orden FIFO al controlador subyacente. Sin embargo, ningún controlador de protocolo puede depender del controlador subyacente para llamar a NdisMSendNetBufferListsComplete en el mismo orden.