The NET_ROOT Structure
A net root structure, NET_ROOT, contains information for each specific network server\share connection maintained by a network mini-redirector.
A NET_ROOT is what the RDBSS and a network mini-redirector driver want to deal with, not a server. Accordingly, RDBSS normally creates and opens a NET_ROOT structure and calls the network mini-redirector driver responsible for opening the server. The network mini-redirector driver is expected to populate the appropriate fields in the passed in NET_ROOT structure.
A list of the NET_ROOT structures is maintained by RDBSS for each SRV_CALL. Each NET_ROOT structure has a few elements common with other RDBSS structures, along with elements that are unique to a NET_ROOT structure. The RDBSS routines that manage NET_ROOT structures only modify the following elements:
Signature and reference count
A name and associated table information
A back pointer to the associated SRV_CALL structure
Size information for the various substructures
A lookup table of associated FCB structures
Whatever additional storage is request by the network mini-redirector (or the creator of the NET_ROOT data structure)
A NET_ROOT structure also contains a list of RX_CONTEXT structures that are waiting for the NET_ROOT transitioning to be completed before resumption of IRP processing. This typically happens when concurrent requests are directed at a server. One of these requests is initiated while the other requests are queued. Extra space reserved for use by the network mini-redirector begins at the end of the known NET_ROOT data structure so that a network mini-redirector can simply refer to this extra space using context fields from an include file.
The finalization of a NET_ROOT structure consists of two parts:
Destroying the association with all V_NET_ROOTS
Freeing the memory
There can be a delay between these two actions, and a field in the NET_ROOT structure prevents the first step from being duplicated.