The NET_ROOT Structure

Une structure racine net, NET_ROOT, contient des informations pour chaque connexion serveur réseau/partage spécifique gérée par un mini-redirecteur réseau.

Un NET_ROOT est ce que le RDBSS et un pilote de mini-redirecteur réseau veulent traiter, pas un serveur. En conséquence, RDBSS crée et ouvre normalement une structure de NET_ROOT et appelle le pilote de mini-redirecteur réseau responsable de l’ouverture du serveur. Le pilote de mini-redirecteur réseau est censé remplir les champs appropriés dans la structure de NET_ROOT passée.

Une liste des structures NET_ROOT est gérée par RDBSS pour chaque SRV_CALL. Chaque structure NET_ROOT a quelques éléments communs avec d’autres structures RDBSS, ainsi que des éléments propres à une structure NET_ROOT. Les routines RDBSS qui gèrent les structures NET_ROOT modifient uniquement les éléments suivants :

  • Nombre de signatures et de références

  • Nom et informations de table associées

  • Pointeur arrière vers la structure SRV_CALL associée

  • Informations de taille pour les différentes sous-structures

  • Table de recherche des structures FCB associées

  • Quel que soit le stockage supplémentaire demandé par le mini-redirecteur réseau (ou le créateur de la structure de données NET_ROOT)

Une structure de NET_ROOT contient également une liste de structures RX_CONTEXT qui attendent que la transition NET_ROOT soit terminée avant la reprise du traitement IRP. Cela se produit généralement lorsque des demandes simultanées sont dirigées vers un serveur. L’une de ces demandes est lancée tandis que les autres demandes sont mises en file d’attente. L’espace supplémentaire réservé à l’utilisation par le mini-redirecteur réseau commence à la fin de la structure de données connue NET_ROOT afin qu’un mini-redirecteur réseau puisse simplement faire référence à cet espace supplémentaire à l’aide de champs de contexte d’un fichier include.

La finalisation d’une structure NET_ROOT se compose de deux parties :

  1. Destruction de l’association avec tous les V_NET_ROOTS

  2. Libération de la mémoire

Il peut y avoir un délai entre ces deux actions, et un champ dans la structure NET_ROOT empêche la première étape d’être dupliquée.