Estructura NET_ROOT

Una estructura raíz de red, NET_ROOT, contiene información para cada servidor de red específico\conexión compartida mantenida por un minidirector de red.

Un NET_ROOT es lo que RDBSS y un controlador de minidirector de red quieren tratar, no con un servidor. En consecuencia, RDBSS normalmente crea y abre una estructura de NET_ROOT y llama al controlador de minidirector de red responsable de abrir el servidor. Se espera que el controlador minidirector de red rellene los campos adecuados en la estructura de NET_ROOT pasada.

RDBSS mantiene una lista de las estructuras de NET_ROOT para cada SRV_CALL. Cada estructura de NET_ROOT tiene algunos elementos comunes con otras estructuras RDBSS, junto con elementos únicos de una estructura de NET_ROOT. Las rutinas de RDBSS que administran estructuras de NET_ROOT solo modifican los siguientes elementos:

  • Recuento de firmas y referencias

  • Un nombre e información de tabla asociada

  • Puntero hacia atrás a la estructura de SRV_CALL asociada

  • Información de tamaño de las distintas subestructuras

  • Tabla de búsqueda de estructuras FCB asociadas

  • Cualquier almacenamiento adicional que solicite el minidirector de red (o el creador de la estructura de datos de NET_ROOT)

Una estructura de NET_ROOT también contiene una lista de estructuras de RX_CONTEXT que esperan que se complete la transición NET_ROOT antes de reanudar el procesamiento de IRP. Esto suele ocurrir cuando las solicitudes simultáneas se dirigen a un servidor. Una de estas solicitudes se inicia mientras se ponen en cola las demás solicitudes. El espacio adicional reservado para su uso por el minidirector de red comienza al final de la estructura de datos de NET_ROOT conocida para que un minidirector de red pueda simplemente hacer referencia a este espacio adicional mediante campos de contexto de un archivo de inclusión.

La finalización de una estructura de NET_ROOT consta de dos partes:

  1. Destruir la asociación con todos los V_NET_ROOTS

  2. Liberar la memoria

Puede haber un retraso entre estas dos acciones y un campo de la estructura NET_ROOT impide que se duplique el primer paso.