Compartir a través de


Recepción de datos en controladores de protocolo

En la ilustración siguiente se muestra una operación de recepción básica, que implica un controlador de protocolo, NDIS y controladores subyacentes en una pila de controladores.

Diagrama que ilustra una operación de recepción básica que implica un controlador de protocolo, NDIS y controladores subyacentes en una pila de controladores.

NDIS llama a la función ProtocolReceiveNetBufferLists de un controlador de protocolo para procesar las indicaciones que proceden de controladores subyacentes. NDIS llama a ProtocolReceiveNetBufferLists después de que un controlador subyacente llame a una función de indicación de recepción (por ejemplo, NdisMIndicateReceiveNetBufferLists) para indicar los datos de red recibidos o los datos de bucle invertido.

Si no se establece la marca NDIS_RECEIVE_FLAGS_RESOURCES en el parámetro ReceiveFlags de ProtocolReceiveNetBufferLists , el controlador de protocolo conserva la propiedad de las estructuras de NET_BUFFER_LIST hasta que llama a la función NdisReturnNetBufferLists . Si NDIS establece la marca NDIS_RECEIVE_FLAGS_RESOURCES , el controlador de protocolo no puede conservar la estructura de NET_BUFFER_LIST y los recursos asociados. El conjunto NDIS_RECEIVE_FLAGS_RESOURCES marca indica que un controlador subyacente se está ejecutando poco en los recursos de recepción. En este caso, la función ProtocolReceiveNetBufferLists debe copiar los datos recibidos en el almacenamiento asignado por protocolo y devolver lo más rápido posible.

Nota NDIS puede cambiar las marcas que indica un controlador subyacente. Por ejemplo, si un controlador de minipuerto establece la marca NDIS_RECEIVE_FLAGS_RESOURCES en el parámetro ReceiveFlags de la función NdisMIndicateReceiveNetBufferLists , NDIS puede copiar los datos indicados y pasar la copia a ProtocolReceiveNetBufferLists con la marca NDIS_RECEIVE_FLAGS_RESOURCES desactivada.

Nota Si se establece la marca NDIS_RECEIVE_FLAGS_RESOURCES , el controlador de protocolo debe conservar el conjunto original de estructuras de NET_BUFFER_LIST en la lista vinculada. Por ejemplo, cuando se establece esta marca, el controlador podría procesar las estructuras e indicarles la pila de uno en uno, pero antes de que la función devuelva, debe restaurar la lista vinculada original.

Los controladores de protocolo llaman a la función NdisReturnNetBufferLists para liberar la propiedad de una lista de estructuras de NET_BUFFER_LIST , junto con las estructuras de NET_BUFFER asociadas y los datos de red.