Pausing an Adapter
NDIS calls a miniport driver's MiniportPause function to initiate a pause operation. The adapter remains in the Pausing state until the pause operation is complete.
In the Pausing state, the miniport driver must complete outstanding receive operations. The driver must also complete any outstanding send operations and it should reject any new send requests.
To complete receive operations, the driver waits for all calls to the NdisMIndicateReceiveNetBufferLists function to return and NDIS must return all outstanding NET_BUFFER_LIST structures to the miniport driver's MiniportReturnNetBufferLists function.
To complete outstanding send operations, the miniport driver should call the NdisMSendNetBufferListsComplete function for all of the outstanding NET_BUFFER_LIST structures. The driver should reject any new send requests made to its MiniportSendNetBufferLists function immediately.
After a miniport driver completes all outstanding send and receive operations, the driver must complete the pause request either synchronously or asynchronously. If the pause operation is completed asynchronously, the driver calls NdisMPauseComplete to complete the pause request. After completing the pause request, the miniport driver is in the Paused state.
NDIS does not initiate other Plug and Play operations, such as halt, initialize, power change, or restart operations, while the miniport driver is in the Pausing state. NDIS can initiate these Plug and Play operations after a miniport driver is in the Paused state.