NdisReset

VOID
   NdisReset(
       OUT PNDIS_STATUS
Status,
       IN NDIS_HANDLE NdisBindingHandle
       );

NdisReset forwards a reset request to an underlying driver.

Parameters

Status

Points to a caller-supplied variable that is set on return from this function. The underlying driver determines which NDIS_STATUS_XXX is returned, but it is usually one of the following values:

NDIS_STATUS_SUCCESS

The underlying driver reset its NIC (or virtual NIC) to its initial state.

NDIS_STATUS_PENDING

The request is being handled asynchronously, and the caller’s ProtocolResetComplete function will be called when it is completed.

NDIS_STATUS_RESET_IN_PROGRESS

The underlying driver is currently resetting its NIC so this request is superfluous. Moreover, the caller’s ProtocolStatus function was or will be called with NDIS_STATUS_RESET_START to indicate that a reset is in progress.

NDIS_STATUS_NOT_RESETTABLE

The underlying NIC cannot be reset by software commands.

NDIS_STATUS_ADAPTER_REMOVED or NDIS_STATUS_FAILURE

The caller’s binding is already closed so no reset will be attempted for this caller.

NDIS_STATUS_CLOSING

The caller’s binding is currently being closed so no reset will be attempted for this caller.

NDIS_STATUS_SOFT_ERRORS

The underlying NIC driver reset the netcard but one or more recoverable hardware errors occurred during this operation. The NIC driver has logged the error(s).

NDIS_STATUS_HARD_ERRORS

The underlying NIC driver attempted to reset the netcard but one or more unrecoverable hardware errors occurred during this operation. The NIC driver has logged the error(s).

NDIS_STATUS_NOT_ACCEPTED

This value usually is a nonspecific default, returned when none of the more specific NDIS_STATUS_XXX caused NDIS or the underlying NIC driver to fail the request.

NdisBindingHandle

Specifies the handle returned by NdisOpenAdapter that identifies the target NIC or the virtual adapter of the next-lower driver to which the caller is bound.

Comments

When a protocol calls NdisReset, the NDIS library does not call the MiniportReset function of the underlying NIC driver until NDIS has completed any internally queued send requests back to the initiating protocol(s). Only after NDIS has cleared its send queue for the underlying driver does it call that driver’s MiniportReset function.

If the underlying driver queues send packets internally, it also completes any send packets it is currently holding in its queue before attempting to reset its NIC.

Consequently, all protocol drivers bound above the same NIC should hold on to their outstanding send packets during a reset operation. At the start of a reset, NDIS calls the ProtocolStatus function of each bound protocol with NDIS_STATUS_RESET_START and, then, the corresponding ProtocolStatusComplete function. When the reset operation is done, NDIS calls the ProtocolStatus function of each bound protocol again with NDIS_STATUS_RESET_END and, then, the corresponding ProtocolStatusComplete function.

Like any other driver bound above the same NIC, the ProtocolStatus and ProtocolStatusComplete functions of the driver that called NdisReset receive these notifications. However, if NdisReset returns STATUS_PENDING, only the ProtocolResetComplete function of the original caller is notified when the reset operation is done.

A protocol bound to NDISWAN should never call NdisReset.

Callers of NdisReset run at IRQL <= DISPATCH_LEVEL.

See Also

MiniportReset, MiniportSend, ProtocolResetComplete, ProtocolSendComplete, ProtocolStatus, ProtocolStatusComplete