Issuing Set and Query Requests from an Intermediate Driver (NDIS 5.1)
Note NDIS 5. x has been deprecated and is superseded by NDIS 6. x. For new NDIS driver development, see Network Drivers Starting with Windows Vista. For information about porting NDIS 5. x drivers to NDIS 6. x, see Porting NDIS 5.x Drivers to NDIS 6.0.
The protocol edge of an intermediate driver must issue set and query information requests to the underlying miniport driver. The most common intermediate driver requests are documented in this topic. The virtual miniport edge of an intermediate driver can use the information obtained from the underlying driver to determine how to respond to set and query requests. For more information about responding to set and query requests, see Responding to Sets and Queries in an Intermediate Driver.
An intermediate driver with a connectionless lower edge typically issues an OID_GEN_MAXIMUM_FRAME_SIZErequest to query the maximum frame size, in bytes, that is supported by an underlying miniport driver. The size returned does not include the header.
An intermediate driver with a connectionless lower edge can query a binding with OID_GEN_MAXIMUM_TOTAL_SIZEto determine the largest packet an underlying miniport driver can accommodate on the NIC that it manages. The intermediate driver must always set up send packets that conform to this size. It is an error for an overlying driver to submit a packet that is larger than an underlying miniport driver can support.
An intermediate driver with a connectionless lower edge can query the size of the lookahead data buffer. The OID used is OID_GEN_CURRENT_LOOKAHEAD. If the intermediate driver issues this as a query, NDIS returns the current lookahead buffer size for the given binding to the underlying miniport driver. If the intermediate driver makes a set request, it indicates its preferred lookahead buffer size but the intermediate driver is not assured that the underlying miniport driver will conform to this.
An intermediate driver with a connectionless lower edge queries the underlying miniport driver for its link speed with OID_GEN_LINK_SPEEDand uses the response to set any internal time-out values that it maintains. An intermediate driver with a connection-oriented lower edge queries the underlying miniport driver for its link speed with OID_GEN_CO_LINK_SPEEDand can also set the link speed of the underlying miniport driver with OID_GEN_CO_LINK_SPEED.
If an intermediate driver is bound to an NDIS WAN miniport driver, it cannot determine the link speed until it receives a line-up indication, indicating that a connection has been established between the local node and a remote node. For a description of the line-up indication, see Indicating NDIS WAN Miniport Driver Status.
An intermediate driver must also determine the set of operating characteristics of the underlying miniport driver. An intermediate driver with a connectionless lower edge accomplishes this by issuing an OID_GEN_MAC_OPTIONS. An intermediate driver with a connection-oriented lower edge accomplishes this by issuing an OID_GEN_CO_MAC_OPTIONS.
An intermediate driver with a connectionless lower edge usually issues an OID_GEN_MAXIMUM_SEND_PACKETSquery, particularly if the intermediate driver exports a MiniportSendPacketsfunction. Such an intermediate driver can propagate the returned value when it, in turn, responds to an OID_GEN_MAXIMUM_SEND_PACKETS query from a higher-level driver.
An intermediate driver also can query the medium-dependent current address with a medium-specific OID. For example, an intermediate driver with a connectionless lower edge might issue an OID_WAN_CURRENT_ADDRESS, OID_802_3_CURRENT_ADDRESS, OID_802_5_CURRENT_ADDRESS, or OID_FDDI_LONG_CURRENT_ADDR. An intermediate driver with a connection-oriented lower edge might issue an OID_ATM_HW_CURRENT_ADDRESS.
If needed, the intermediate driver issues a set request to inform NDIS of its operating characteristics. An intermediate driver with a connectionless lower edge accomplishes this by passing OID_GEN_PROTOCOL_OPTIONSto NdisRequest. An intermediate driver with a connection-oriented lower edge accomplishes this by passing OID_GEN_CO_PROTOCOL_OPTIONSto NdisCoRequest.
For more information about issuing set and query requests, see Protocol Driver Query and Set Operations.