As Figure A.1.1 illustrates, NDIS 3.0 NIC and transport drivers use the NDIS interface library to access each other, as well as operating system functions. At the beginning of network communications, the NIC driver must register itself with the network. Each transport driver concerned with the supported network interface card then opens that card to create a binding. After this, the bound transport drivers can submit requests to the network interface card by calling NIC driver functions through related wrapper functions/macros, specifying the handle of the network interface card. For Windows NT, this handle is a pointer to an operating system-maintained object.
To start communicating with its remote node peer, a local node transport driver repackages messages from upper network layers into data packets, either TSDUs or equivalent packets. It then sends these packets to the NIC driver using calls to the NDIS interface library. The NIC driver uses its upper-edge functions to reassemble the information for transmission and inform associated network interface cards when data is ready for transmission over the network.
When return data is available from the remote node, the network interface card captures the data and signals the local node NIC driver. In turn, this driver (through the NDIS library and transport driver lower-edge functions) notifies bound transport drivers of incoming packets and subsequently transfers these packets.
NDIS 3.0 Driver Architecture