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
状态的此类更改通过指示发出信号后,任何关联的阈值或统计信息计数器将保持不变。
微型端口驱动程序不能在其 MiniportISR、MiniportHalt 或 MiniportShutdown 函数的上下文中调用 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 的 GeneralStatus 值。StatusBuffer 中的缓冲区的格式设置为NDIS_TAPI_EVENT结构。
- 目标平台: 通用
- 版本:Windows Vista 中的 NDIS 6.0 驱动程序不支持。 请改用 NdisMIndicateStatusEx。 支持 Windows Vista 和 Windows XP 中的 NDIS 5.1 驱动程序。
要求
要求 | 值 |
---|---|
Header | ndis.h (包括 Ndis.h) |
Library | Ndis.lib |