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.
Los desarrolladores de controladores deben comprender y mantener la relación entre las estructuras primaria (originales) NET_BUFFER_LIST y las estructuras secundarias (derivadas) que resultan de las operaciones de clonar, fragmentar y volver a ensamblar.
El llamador de una función clone/fragment/reassemble (clonar, fragmentar y volver a ensamblar) mantiene la relación primario/secundario, incluido el puntero primario en la estructura secundaria NET_BUFFER_LIST y un recuento de secundarios. El recuento de niños garantiza que el que llama libere al padre después de liberar a todos los niños. Se aplican las reglas siguientes:
Después de que un controlador cree estructuras secundarias a partir de una estructura de NET_BUFFER_LIST, debe conservar la propiedad de la estructura primaria y debe pasar las estructuras secundarias a otros controladores. El controlador nunca debe pasar la estructura NET_BUFFER_LIST primaria a otro controlador.
Un controlador solo debe actualizar el recuento de elementos secundarios en la estructura NET_BUFFER_LIST primaria. Dado que la estructura primaria nunca se pasa a otro controlador, no existe ningún riesgo de que se pueda sobrescribir el valor del conteo de secundarias. El controlador debe establecer el puntero primario en las estructuras secundarias para que apunten a la estructura primaria.
Cuando un controlador recibe un NET_BUFFER_LIST de otro controlador, el controlador no debe sobrescribir el puntero primario. Si la estructura NET_BUFFER_LIST recibida es un elemento secundario, ya debe establecerse su puntero primario. El controlador puede usar el NET_BUFFER_LIST recibido de otro controlador como estructura primaria.
NDIS no aplica las reglas anteriores. El propietario actual de una estructura de NET_BUFFER_LIST debe administrar el recuento de elementos secundarios y el puntero primario. Por ejemplo, si el propietario actual clonará y fragmentará una estructura NET_BUFFER_LIST, debe administrar el puntero primario y el contador secundario.
NDIS establece el conteo de secundarios en cero y el puntero primario en NULL cuando asigna una estructura de NET_BUFFER_LIST. NDIS no cambia estos campos cada vez que un controlador pasa una estructura NET_BUFFER_LIST a otro controlador.