The typical miniport driver uses a small number of functions to communicate through NDIS with the upper layers and hardware. Not all of these functions are required. For more information about which functions are optional, which are required, and why, see Initializing a Miniport Driver.
NDIS miniport drivers and upper-layer drivers use the NDIS Library (Ndis.sys) to communicate with each other through calls to Ndis*Xxx* functions.
Many miniport driver functions can operate either synchronously or asynchronously. The asynchronous functions have NdisXxxComplete functions that must be called when an operation is finished. For example, if a protocol driver calls NdisOidRequest to query miniport driver information, the miniport driver's MiniportOidRequest function can pend the reset operation by returning NDIS_STATUS_PENDING. Eventually, the miniport driver must call NdisMOidRequestComplete to indicate the final status of the query request.