MINIPORT_RESET回调函数 (ndis.h)

警告

所有 NDIS 6.83 及更高版本的驱动程序都不建议使用 MiniportResetExMiniportCheckForHangEx 回调函数。 有关详细信息,请参阅 NDIS 6.83 及更高版本中的 Check-for-Hang 和 Reset作

NDIS 调用 NDIS 微型端口驱动程序的 MiniportResetEx 函数来启动网络接口卡(NIC)重置。 有关详细信息,请参阅 微型端口适配器检查和重置作微型端口驱动程序硬件重置

注意 NDIS 微型端口驱动程序可以使用 MINIPORT_RESET 类型声明此函数。
 

语法

MINIPORT_RESET MiniportReset;

NDIS_STATUS MiniportReset(
  [in]  NDIS_HANDLE MiniportAdapterContext,
  [out] PBOOLEAN AddressingReset
)
{...}

参数

[in] MiniportAdapterContext

微型端口驱动程序在其 MiniportInitializeEx 函数中分配的上下文区域的句柄。 微型端口驱动程序使用此上下文区域来维护微型端口适配器的状态信息。

[out] AddressingReset

指向布尔变量的指针。 如果 NDIS 应调用 MiniportOidRequest 函数来将寻址和其他配置设置还原到当前值,则微型端口驱动程序将此变量设置为 TRUE。 有关详细信息,请参阅 硬件重置

返回值

MiniportResetEx 可以返回以下状态值之一:

返回代码 描述
NDIS_STATUS_SUCCESS

MiniportResetEx 成功将微型端口适配器重置为作状态。

NDIS_STATUS_PENDING
驱动程序将通过在作完成后调用 NdisMResetComplete 函数异步完成重置作。
NDIS_STATUS_RESET_IN_PROGRESS

MiniportResetEx 确定当前正在重置微型端口适配器,因此此调用是多余的。

NDIS_STATUS_SOFT_ERRORS
MiniportResetEx 成功重置微型端口适配器,但在作过程中发生了可恢复的错误。 MiniportResetEx 应调用 NdisWriteErrorLogEntry 函数,其中包含有关错误的详细信息。
NDIS_STATUS_HARD_ERRORS
MiniportResetEx 尝试重置微型端口适配器,但在作过程中发生了不可恢复的错误。 MiniportResetEx 应调用 NdisWriteErrorLogEntry,并提供有关错误的详细信息。

言论

驱动程序在调用 时指定 MiniportResetEx 入口点 NdisMRegisterMiniportDriver 函数。

中间驱动程序不需要 MiniportResetEx

MiniportResetEx 可以重置微型端口适配器的参数。 如果重置导致微型端口适配器的工作站地址发生更改,微型端口驱动程序会在重置完成后自动还原工作站地址的先前值。 硬件重置的任何多播或功能寻址掩码都不必在此函数中重置。

如果重置作更改了其他信息(如多播或功能寻址信息),MiniportResetEx 必须在 AddressingReset 将变量设置为在返回前 TRUE。 这会导致 NDIS 调用 MiniportOidRequest 函数来还原信息。 NDIS 还通过调用 OID_PNP_ADD_WAKE_UP_PATTERN来还原 LAN 上的唤醒模式列表。 驱动程序应从其适配器上下文中释放 WoL 模式列表,因为硬件列表已重置。

NDIS 不会中止任何挂起的 OID 请求或发送请求。 如果驱动程序可以在重置后安全地完成挂起的 OID 或发送请求,驱动程序可以保留挂起的 OID 或发送请求,直到重置作完成。 否则,驱动程序应通过调用 NdisMOidRequestComplete 或发送挂起的 OID 或发送请求在 MiniportResetEx 返回之前,分别 NdisMSendNetBufferListsComplete 函数。

注意 从 NDIS 6.30 开始,微型端口驱动程序在重置作完成之前不得保留挂起的 OID 或发送请求。 相反,驱动程序必须通过调用 NdisMOidRequestCompleteNdisMSendNetBufferListsComplete 函数来完成这些挂起的请求,然后再完成重置作。 如果驱动程序异步完成重置作,则必须在驱动程序调用 NdisMResetComplete之前完成挂起的 OID 并发送请求。
 
微型端口驱动程序不应调用 NdisMIndicateStatusEx 函数来指示每个重置作的开始和完成。 NDIS 在重置开始和结束时通知绑定协议驱动程序。

如果 MiniportResetEx 必须在重置作期间等待微型端口适配器的状态更改,则可以调用 NdisStallExecution 函数。 但是,a
MiniportResetEx 函数不得调用 NdisStallExecution,时间间隔大于 50 微秒。 如果驱动程序必须等待超过 50 微秒(或者轮询),则应改为设置计时器并返回NDIS_STATUS_PENDING。

如果 MiniportResetEx 返回NDIS_STATUS_PENDING,驱动程序必须通过调用 NdisMResetComplete 函数来完成重置。

如果微型端口适配器处于 MediaConnectStateConnected 状态,并且由于重置而发生状态更改,包括对 MediaConnectStateUnknown 状态的更改,则微型端口驱动程序必须报告状态更改,并提供 NDIS_STATUS_LINK_STATE 状态指示。 微型端口驱动程序还必须指示重置后链接重新建立时 MediaConnectStateConnected 状态指示。

MiniportResetEx 可能会被中断抢占。

NDIS 定期调用 MiniportCheckForHangEx 函数,以确定它是否应调用 MiniportResetEx。 调用 MiniportCheckForHangEx 的默认超时时间为 2 秒。 如果此默认值太短,则微型端口驱动程序可以在调用 时设置更大的 CheckForHangTimeInSeconds
初始化期间 NdisMSetMiniportAttributes 函数。 有关详细信息,请参阅 微型端口适配器检查和重置作

NDIS 无法确定 NIC 是否已停止响应接收作。 若要处理此类故障,MiniportCheckForHangEx 函数可以监视接收作,并在必要时返回 TRUE 强制重置。 微型端口还可以通过调用 NdisMResetMiniport来请求重置。

NDIS 在 IRQL = DISPATCH_LEVEL 调用 <。

示例

若要定义 MiniportResetEx 函数,必须先提供一个函数声明来标识要定义的函数类型。 Windows 为驱动程序提供了一组函数类型。 使用函数类型声明函数有助于 驱动程序代码分析静态驱动程序验证程序(SDV)和其他验证工具查找错误,这是为 Windows作系统编写驱动程序的要求。

例如,若要定义名为“MyResetEx”的 MiniportResetEx 函数,请使用 MINIPORT_RESET 类型,如以下代码示例所示:

MINIPORT_RESET MyResetEx;

然后,按如下所示实现函数:

_Use_decl_annotations_
NDIS_STATUS
 MyResetEx(
    NDIS_HANDLE  MiniportAdapterContext,
    PBOOLEAN  AddressingReset
    )
  {...}

MINIPORT_RESET 函数类型在 Ndis.h 头文件中定义。 若要在运行代码分析工具时更准确地识别错误,请务必将 Use_decl_annotations 注释添加到函数定义。 Use_decl_annotations 批注可确保使用应用于头文件中 MINIPORT_RESET 函数类型的批注。 有关函数声明要求的详细信息,请参阅 使用 NDIS 驱动程序的函数角色类型声明函数。

有关 Use_decl_annotations的信息,请参阅 批注函数行为

要求

要求 价值
最低支持的客户端 NDIS 6.0 及更高版本中受支持。
目标平台 窗户
标头 ndis.h (包括 Ndis.h)
IRQL <= DISPATCH_LEVEL

另请参阅

微型端口适配器检查挂起和重置作

微型端口驱动程序硬件重置

MiniportCheckForHangEx

MiniportInitializeEx

MiniportOidRequest

NDIS_STATUS_LINK_STATE

NdisMIndicateStatusEx

NdisMOidRequestComplete

NdisMRegisterMiniportDriver

NdisMResetComplete

NdisMResetMiniport

NdisMSendNetBufferListsComplete

NdisMSetMiniportAttributes

NdisStallExecution

NdisWriteErrorLogEntry