Restarting a Binding

To restart a binding that is paused, NDIS sends the protocol driver a network Plug and Play (PnP) restart event notification. After the protocol driver receives the restart notification, the affected binding enters the Restarting state.

To send a restart notification, NDIS calls a protocol driver's ProtocolNetPnPEvent function. The NET_PNP_EVENT_NOTIFICATION structure that NDIS passes to ProtocolNetPnPEvent specifies NetEventRestart in the NetEvent member and the Buffer member contains a pointer to the NDIS_PROTOCOL_RESTART_PARAMETERS structure. NDIS provides a pointer to an NDIS_RESTART_ATTRIBUTES structure in the RestartAttributes member of the NDIS_PROTOCOL_RESTART_PARAMETERS structure.

Note  While the binding was paused, NDIS could have reconfigured the driver stack. The new stack configuration can support a different set of capabilities for the underlying adapter. These new capabilities can affect how the protocol driver communicates on a binding.

The protocol driver should use the information in the NDIS_PROTOCOL_RESTART_PARAMETERS structure to avoid unnecessary OID requests.

In the Restarting state, the protocol driver can:

  • Use OID requests to query the driver stack. For example, the driver can find out about support for receive side scaling by using OID_GEN_RECEIVE_SCALE_CAPABILITIES.

  • Reallocate NET_BUFFER and NET_BUFFER_LIST pools, if necessary.

  • Enumerate the list of the underlying filter modules.

  • Use OID requests to reveal new adapter capabilities.

After the driver is ready to resume send and receive operations for the binding, the binding enters the Running state.