NdisMIndicateStatus 函数 (ndis.h)

注意 NDIS 5。 x 已弃用,由 NDIS 6 取代。 x。 有关新的 NDIS 驱动程序开发,请参阅 从 Windows Vista 开始的网络驱动程序。 有关移植 NDIS 5 的信息。 NDIS 6 的 x 驱动程序。 x,请参阅 将 NDIS 5.x 驱动程序移植到 NDIS 6.0

NdisMIndicateStatus 指示 NIC 的状态更改为更高级别的 NDIS 驱动程序。

语法

void NdisMIndicateStatus(
  [in] NDIS_HANDLE MiniportHandle,
  [in] NDIS_STATUS GeneralStatus,
  [in] PVOID       StatusBuffer,
  [in] UINT        StatusBufferSize
);

参数

[in] MiniportHandle

指定最初输入 MiniportInitialize 的句柄。

[in] GeneralStatus

指定NDIS_STATUS_ XXX 值,该值指示 NIC 状态的一般更改。

[in] StatusBuffer

指向调用方分配的缓冲区的指针,该缓冲区包含特定于中等且依赖于 GeneralStatus 值的数据。 它指示有关状态更改的详细信息。

[in] StatusBufferSize

指定 StatusBuffer 中缓冲区的大小(以字节为单位)。

返回值

备注

当微型端口驱动程序调用 NdisMIndicateStatus 时,NDIS 将调用每个绑定协议的 ProtocolStatus 函数。 这允许绑定的协议驱动程序或配置管理器记录基础 NIC 状态的更改或采取纠正措施。 例如,协议可能会调用 NdisReset,具体取决于指示NDIS_STATUS_ XXX

当微型端口驱动程序调用 NdisMIndicateStatus 来报告 NIC 状态的更改时,NDIS 可以调用 MiniportReset 函数来尝试将 NIC 还原到工作条件。 在这些情况下,NDIS 只能使用 NDIS_STATUS_RESET_START 和更高版本的 NDIS_STATUS_RESET_END 调用绑定协议,而不是使用微型端口驱动程序指示的 GeneralStatus

NdisMIndicateStatus 提供两条信息:

  • 一个总体状态值,指示状态的一般更改。
  • 常规更改的具体原因,可能是特定于网络的原因。 例如,环插入故障特定于令牌环 (802.5) 网络,但与以太网 (802.3) NIC 及其驱动程序无关。

微型端口驱动程序还可以调用 NdisMIndicateStatus 来指示问题,例如电缆被意外移除,然后重新插入,或者环形暂时出现故障。 例如,假设同时出现以下两种情况:

  • 微型端口驱动程序使用 NDIS_STATUS_RING_STATUS 调用 NdisMIndicateStatus

  • StatusBuffer 包含以下状态值之一:

    • NDIS_RING_LOBE_WIRE_FAULT
    • NDIS_RING_HARD_ERROR NDIS_RING_SIGNAL_LOSS

状态的此类更改通过指示发出信号后,任何关联的阈值或统计信息计数器将保持不变。

微型端口驱动程序不能在其 MiniportISRMiniportHaltMiniportShutdown 函数的上下文中调用 NdisMIndicateStatus。 只有反序列化的微型端口驱动程序才能在其 MiniportInitialize 函数的上下文中调用 NdisMIndicateStatus

微型端口驱动程序必须在调用 NdisMIndicateStatus 之前释放它持有的任何旋转锁。

NdisMIndicateStatus 的序列化调用方必须在 IRQL = DISPATCH_LEVEL运行。 NdisMIndicateStatus 的反序列化调用方必须在 IRQL <= DISPATCH_LEVEL 运行。

指示网络连接丢失和还原

当微型端口驱动程序感觉到网络连接已丢失时,它应使用 NDIS_STATUS_MEDIA_DISCONNECT 调用 NdisMIndicateStatus 。 还原连接后,微型端口驱动程序应使用 NDIS_STATUS_MEDIA_CONNECT 调用 NdisMIndicateStatus

注意 802.11 微型端口驱动程序在生成网络连接指示时必须遵循无线 LAN 的媒体状态准则。 有关这些准则的详细信息,请参阅 802.11 网络的媒体状态指示

802.11 无线 LAN 微型端口驱动程序对 NdisMIndicateStatus 的调用

802.11 无线 LAN (WLAN) 微型端口驱动程序可以发出特定于 WLAN 媒体的各种指示。 例如,发生以下情况时,微型端口驱动程序可以发出特定于 WLAN 的指示:

  • 驱动程序检测到其当前 BSS 关联的接收信号强度已更改。
  • 驱动程序在收到的数据包上检测到 TKIP MIC 故障。

具有 NdisMIndicateStatus 的 802.11 微型端口驱动程序可以发出以下类型的特定于 WLAN 的指示:

有关这些媒体特定指示的详细信息,请参阅 802.11 Media-Specific 状态指示

WAN 微型端口驱动程序对 NdisMIndicateStatus 的调用

大多数 WAN NIC 驱动程序使用一些特殊状态代码和缓冲区内容来指示状态。 这些状态指示由 WAN NIC 驱动程序生成,绑定到此类微型端口驱动程序的 NDIS 协议驱动程序可以忽略这些指示。 但是,正确处理这些指示通常会提高协议和 WAN NIC 驱动程序的性能。

可以使用 NdisMIndicateStatus 将以下四种类型的特定于 WAN 的指示发送到绑定协议驱动程序:

  • 向上移动一行
  • 向下移动一行
  • Fragment
  • TAPI 行事件

NDIS_STATUS_WAN_LINE_UP

每当新链接变为活动状态时,WAN 微型端口驱动程序就会发出排队指示。 在出现这种情况之前,NIC 将接受帧并让它们成功或失败,但任何远程节点都不太可能实际接收它们。 在发生这种情况之前,协议应减少其计时器和重试计数,以快速使任何传出连接尝试失败。

WAN 微型端口驱动程序在从OID_TAPI_GET_ID请求返回之前,使用 NdisMIndicateStatus 发出此指示。

行指示的状态代码为NDIS_STATUS_WAN_LINE_UP。 StatusBuffer 中的缓冲区格式化为NDIS_MAC_LINE_UP结构。

NDIS_STATUS_WAN_LINE_DOWN

每当链接关闭时,WAN 微型端口驱动程序都会发出向下行指示。 发生这种情况时,绑定协议应减少其计时器和重试计数,直到下一个排队指示。

行向下指示的状态代码NDIS_STATUS_WAN_LINE_DOWN。 StatusBuffer 中的缓冲区格式化为NDIS_MAC_LINE_DOWN结构。

NDIS_STATUS_WAN_FRAGMENT

WAN 微型端口驱动程序在从远程节点接收部分数据包时发出片段指示。 发生这种情况时,绑定协议应将帧发送到远程节点,以通知它出现这种情况,而不是等待超时发生。

片段指示的状态代码NDIS_STATUS_WAN_FRAGMENT。 StatusBuffer 中的缓冲区格式化为NDIS_MAC_FRAGMENT结构。

NDISWAN 通过计算每个链路上的片段指示数来监视丢弃的数据包。

NDIS_TAPI_EVENT

WAN 微型端口驱动程序必须为 TAPI 状态指示使用 NDIS_STATUS_TAPI_INDICATION 的 GeneralStatusStatusBuffer 中的缓冲区的格式设置为NDIS_TAPI_EVENT结构。

  • 目标平台: 通用
  • 版本:Windows Vista 中的 NDIS 6.0 驱动程序不支持。 请改用 NdisMIndicateStatusEx。 支持 Windows Vista 和 Windows XP 中的 NDIS 5.1 驱动程序。

要求

要求
Header ndis.h (包括 Ndis.h)
Library Ndis.lib

另请参阅