NET_PNP_EVENT 结构 (netpnp.h)

NET_PNP_EVENT结构描述网络即插即用 (PnP) 事件、NDIS PnP 事件或电源管理事件。

语法

typedef struct _NET_PNP_EVENT {
  NET_PNP_EVENT_CODE NetEvent;
  PVOID              Buffer;
  ULONG              BufferLength;
  ULONG_PTR          NdisReserved[4];
  ULONG_PTR          TransportReserved[4];
  ULONG_PTR          TdiReserved[4];
  ULONG_PTR          TdiClientReserved[4];
} NET_PNP_EVENT, *PNET_PNP_EVENT;

成员

NetEvent

将事件描述为下列事件之一的事件代码:

NetEventSetPower

指示电源管理器已发送设置电源请求,该请求指定转换到系统电源状态。 NDIS 将此状态转换为设备的相应设备电源状态。

有关详细信息,请参见“备注”部分。

NetEventQueryPower

指示电源管理器已发送查询电源请求,请求转换到系统电源状态。 NDIS 将此状态转换为设备的相应设备电源状态。

有关详细信息,请参见“备注”部分。

NetEventQueryRemoveDevice

指示 PnP 管理器已发送查询删除设备请求。 PnP 管理器发送此请求来查询是否可以在不中断操作的情况下删除设备。

NetEventCancelRemoveDevice

指示 PnP 管理器已发送取消删除设备请求。 在 PnP 管理器发送“删除设备查询”请求后,PnP 管理器发送此请求以取消删除设备。

NetEventReconfigure

指示网络组件的配置已更改。 例如,如果用户通过“网络”和“拨号Connections”文件夹更改 TCP/IP 的 IP 地址,则 NDIS 会将 NetEventReconfigure 事件指示为 TCP/IP 协议。 此外,中间驱动程序通常使用此事件作为触发器来调用 NdisIMInitializeDeviceInstanceEx 函数并启动其虚拟微型端口。 有关 NetEventReconfigure 的详细信息,请参阅 NetEventIMReEnableDevice。

NetEventBindList

向协议驱动程序指示其绑定列表处理顺序已重新配置。 此列表指示在处理时应用于绑定的相对顺序,例如,用户请求可能路由到多个绑定之一。 随此事件一起传递的缓冲区包含格式化为以 null 结尾的 Unicode 字符串的设备名称列表。 每个设备名称的格式与传递给 ProtocolBindAdapterEx 函数调用的 AdapterName 成员相同。

NetEventBindsComplete

指示协议驱动程序已绑定到它可以绑定到的所有 NIC。 除非将 PnP NIC 插入系统,否则 NDIS 不会向协议指示任何其他 NIC。

NetEventPnPCapabilities

指示用户启用或禁用基础适配器的唤醒功能。 (绑定由传递给 ProtocolNetPnPEvent 函数的 ProtocolBindingContext 参数指定 )

NetEventPause

指示指定的协议绑定应进入暂停状态。 在 NDIS 完成绑定的所有未完成发送请求后,绑定将进入“已暂停”状态。

NetEventRestart

指示指定的协议绑定已进入“正在重启”状态。 协议驱动程序准备好恢复绑定的发送和接收操作后,绑定将进入“正在运行”状态。

NetEventPortActivation

指示激活与指定绑定关联的端口列表。

NetEventPortDeactivation

指示停用与指定绑定关联的端口列表。

NetEventIMReEnableDevice

指示已更改 NDIS 6.0 或更高版本中间驱动程序的虚拟微型端口的配置。 NetEventIMReEnableDevice 类似于 NetEventReconfigure 事件,只是中间驱动程序接收单个虚拟微型端口的此事件, NetEventReconfigure 事件适用于所有中间驱动程序的虚拟微型端口。 例如,当用户禁用并从设备管理器或其他源启用单个虚拟微型端口时,中间驱动程序会收到 NetEventIMReEnableDevice 事件。 有关中间驱动程序电源管理的示例,请参阅 GitHub 上的 Windows 驱动程序示例存储库中提供的 NDIS MUX 中间驱动程序和通知对象驱动程序示例

NetEventNDKEnable

指示当前已启用网络直接内核 (NDK) 。

NetEventNDKDisable

指示当前已禁用 NDK。

NetEventFilterPreDetach

指示筛选器即将分离,以便筛选器可以执行 FilterDetach 处理程序 (中无法执行的任何必要清理,因为此时 OID 和指示路径) 关闭。

NetEventBindFailed

指示发生了绑定事件失败。

NetEventSwitchActivate

指示 Hyper-V 可扩展交换机已完成激活,交换机扩展现在可以安全地查询进一步的交换机配置。 该指示仅在扩展微型端口发出的 Hyper-V 可扩展交换机堆栈中使用。 有关更多详细信息 ,请参阅查询 Hyper-V 可扩展交换机配置NDIS_SWITCH_PARAMETERS

NetEventInhibitBindsAbove

阻止其他筛选器和协议绑定到微型端口适配器的同步事件。 之前绑定的任何筛选器或协议都将在事件完成之前取消绑定。 使用规则如下。

  • 避免使微型端口适配器处于抑制状态,超过 1000 毫秒。
  • 此事件只能在 MiniportInitializeEx 开始后发出,不得在 MiniportHaltEx 返回后发出。
  • 仅当微型端口适配器处于 D0 状态时,才能发出此事件。
  • 由于此事件处于阻塞状态,因此不应由任何会导致死锁的上下文发出。
  • 发出此事件时,不得持有锁。
  • 必须在PASSIVE_LEVEL发出此事件。
此事件从 NDIS 版本 6.50 开始可用,必须与 V2 或更高版本的 NET_PNP_EVENT 一起使用。 可以选择性地由微型端口驱动程序发出此事件。 协议和筛选器无法接收或发出此事件。

NetEventAllowBindsAbove

反转 NetEventInhibitBindsAbove 效果的异步事件。 使用规则如下。

  • 此事件只能在 MiniportInitializeEx 开始后发出,不得在 MiniportHaltEx 返回后发出。
  • 仅当微型端口适配器处于 D0 状态时,才能发出此事件。
  • 发出此事件时,不得持有锁。
  • 必须在PASSIVE_LEVEL发出此事件。
此事件从 NDIS 版本 6.50 开始可用,必须与 V2 或更高版本的 NET_PNP_EVENT 一起使用。 可以选择性地由微型端口驱动程序发出此事件。 协议和筛选器无法接收或发出此事件。

NetEventRequirePause

指示协议和筛选器(包括微型端口适配器)必须暂停的同步事件。 当 NdisMNetPnPEvent 例程返回时,保证会暂停协议和筛选器以及微型端口适配器。 使用规则如下。

  • 避免在 NetEventAllowStart 和 NetEventRequirePause 事件之间延迟超过 1000 毫秒,以防止用户应用程序出现延迟。
  • 此事件只能在 MiniportInitializeEx 开始后发出,不得在 MiniportHaltEx 返回后发出。
  • 无法保证 NDIS 会在发出此事件后调用 MiniportPause 。 特别是,如果微型端口适配器已暂停,NDIS 不会引入额外的启动-暂停循环。 这意味着 MiniportPause 调用的次数不大于、小于或等于此事件的发出量。
  • 由于此事件处于阻塞状态,因此不应由任何会导致死锁的上下文发出。
  • 发出此事件时不得持有锁。
此事件从 NDIS 版本 6.50 开始可用,必须与 V2 或更高版本 的 NET_PNP_EVENT 一起使用。 可以选择由微型端口驱动程序发出此事件。 协议和筛选器无法接收或发出此事件。

NetEventAllowStart

指示协议和筛选器(包括微型端口适配器)的异步事件不需要暂停。 使用规则如下所示。 在 NdisMNetPnPEvent 例程返回后,无法保证协议和筛选器中的任何驱动程序处于暂停状态。

  • 此事件只能在 MiniportInitializeEx 开始后发出,不得在 MiniportHaltEx 返回后发出。
  • 由于此事件是阻塞事件,因此不应由任何会导致死锁的上下文发出。
  • 发出此事件时不得持有锁。
此事件从 NDIS 版本 6.50 开始可用,必须与 V2 或更高版本 的 NET_PNP_EVENT 一起使用。 可以选择由微型端口驱动程序发出此事件。 协议和筛选器无法接收或发出此事件。

Buffer

缓冲区的地址,该缓冲区包含特定于 NetEvent 成员中指示的事件的信息。 对于每种类型的事件,缓冲区包含以下信息:

NetEventSetPower

缓冲区包含设备要转换到的设备电源状态。

当 NDIS 调用协议驱动程序的 ProtocolNetPnPEvent 函数时,设备状态NDIS_DEVICE_POWER_STATE,可以是以下值之一:

NdisDeviceStateUnspecified

网络设备不支持电源管理。

NdisDeviceStateD0

完全供电状态,设备提供完整的功能和性能。

NdisDeviceStateD1

低功耗状态,设备不接受来自主机的传输请求,设备接收的数据不会传输到主机内存,并且不会发生中断。 某些设备上下文可能会丢失。 根据 NIC 及其微型端口驱动程序的功能,设备可能能够生成唤醒信号。

NdisDeviceStateD2

类似于 NdisDeviceStateD1 的低功率状态,只不过通常节省更多功率和更少的上下文,并且转换到完全供电状态需要更多时间。

NdisDeviceStateD3

关闭状态,其中已从设备中完全移除电源。

对于协议驱动程序, NdisDeviceStateD0 表示 NIC 已完全供电,可用于正常操作。 任何其他设备状态意味着设备未完全供电,无法发送和接收网络数据。

NetEventQueryPower

缓冲区包含为设备请求的设备电源状态。 设备状态NDIS_DEVICE_POWER_STATE (NetEventSetPower 值说明) 中所述。

NetEventQueryRemoveDevice

缓冲区内容为 NULL

NetEventCancelRemoveDevice

缓冲区内容为 NULL

NetEventReconfigure

缓冲区可以包含特定于协议的数据。 协议驱动程序负责验证此数据。

NetEventBindList

缓冲区包含已修改的网络组件的绑定列表, 结构传递给NET_PNP_EVENT_NOTIFICATION。 绑定列表是一系列以 null 结尾的 Unicode 字符串,具有REG_MULTI_SZ格式。 每个字符串都是适配器名称。 绑定到协议的 TDI 客户端使用此绑定列表对其绑定重新排序。 协议驱动程序负责验证此列表。

NetEventBindsComplete

缓冲区内容为 NULL

NetEventPnPCapabilities

缓冲区是包含位掩码的 ULONG。 在位掩码中设置NDIS_DEVICE_WAKE_UP_ENABLE标志时,将启用 NIC 的唤醒功能。 否则,将禁用 NIC 的唤醒功能。 (绑定由传递给 ProtocolNetPnPEvent.) 的 ProtocolBindingContext 参数指定当设置为零时,此标志指示禁用 NIC 的唤醒功能。

NetEventPause

缓冲区包含 NDIS_PROTOCOL_PAUSE_PARAMETERS 结构。

NetEventRestart

缓冲区可能包含 NULL 或 NDIS_PROTOCOL_RESTART_PARAMETERS 结构。 NDIS 提供指向 NDIS_PROTOCOL_RESTART_PARAMETERS 结构的 RestartAttributes 成员中的 NDIS_RESTART_ATTRIBUTES 结构的指针。

注意 如果缓冲区为 NULL,则重启属性自上次重启以来未发生更改。
 

NetEventPortActivation

缓冲区包含标识 NDIS 将激活的端口的 NDIS_PORT 结构列表中的第一个条目。 可以使用 NDIS_PORT 结构的 Next 成员获取列表中的下一个结构。

NetEventPortDeactivation

缓冲区包含一个端口号数组,这些端口号的类型NDIS_PORT_NUMBER (定义为 ULONG) ,用于标识 NDIS 将停用的 NDIS 端口。 若要计算数组中的元素数,请将 BufferLength 成员的值除以 NET_PNP_EVENT_NOTIFICATION的NetPnPEvent 成员中指定的 NET_PNP_EVENT结构中,按大小 (NDIS_PORT_NUMBER) 。

NetEventIMReEnableDevice

缓冲区包含指向 NDIS_STRING 类型的变量的指针,该变量包含以 null 结尾的 Unicode 字符串,该字符串为启用的设备命名虚拟微型端口的设备对象。 字符串是一个完整路径名称,例如\Device\DeviceName

NetEventNDKEnable

Buffer 成员为 NULL

NetEventNDKDisable

Buffer 成员为 NULL

NetEventFilterPreDetach

Buffer 成员为 NULL

NetEventBindFailed

缓冲区包含 NDIS_BIND_FAILED_NOTIFICATION 结构。

NetEventSwitchActivate

缓冲区内容为 NULL。

NetEventAllowBindsAbove

缓冲区内容为 NULL。

NetEventInhibitBindsAbove

缓冲区内容为 NULL。

NetEventAllowStart

缓冲区内容为 NULL。

NetEventRequirePause

缓冲区内容为 NULL。

BufferLength

Buffer 中特定于事件的信息的字节数。

NdisReserved[4]

保留供 NDIS 使用的区域。

TransportReserved[4]

为传输驱动程序保留的区域。

TdiReserved[4]

保留供 TDI 使用的区域。

TdiClientReserved[4]

保留供 TDI 客户端使用的区域。

注解

在 NDIS 6.0 及更高版本中,当操作系统向表示微型端口适配器的目标设备对象发出系统 PnP 事件或电源管理事件时,NDIS 会将事件转换为 NET_PNP_EVENT_NOTIFICATION 结构。 NET_PNP_EVENT_NOTIFICATION 结构的 NetPnPEvent 成员是NET_PNP_EVENT结构。

NDIS 通过调用协议驱动程序的 ProtocolNetPnPEvent 函数,将指向NET_PNP_EVENT 结构的指针传递给绑定到微型端口适配器的每个协议驱动程序。 协议驱动程序应保存此指针,因为指针是 指向 NdisCompleteNetPnPEvent 函数的 输入参数,驱动程序调用该函数以异步方式完成对 ProtocolNetPnPEvent 的调用。

NDIS 通过调用筛选器驱动程序的 FilterNetPnPEvent 函数,将指向NET_PNP_EVENT 结构的指针传递给绑定到微型端口适配器的每个筛选器驱动程序。 筛选器驱动程序不必保存此指针,因为驱动程序必须同步完成对 FilterNetPnPEvent 的调用。

从 NDIS 6.30 开始,当 NDIS 调用 ProtocolNetPnPEventFilterNetPnPEvent 函数时,协议或筛选器驱动程序必须遵循以下准则:

  • 如果 NET_PNP_EVENT 结构的 NetEvent 成员设置为 NetEventSetPower,则驱动程序必须停止生成新的 I/O 请求。 此外,驱动程序不得等待任何挂起的 I/O 请求完成。

    协议或筛选器驱动程序从 ProtocolNetPnPEventFilterNetPnPEvent 返回后,如果满足以下条件,NDIS 将不会在电源状态转换期间暂停和重启这些驱动程序:

    • 基础微型端口驱动程序在 NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES 结构中设置 NDIS_MINIPORT_ATTRIBUTES_NO_PAUSE_ON_SUSPEND 标志。 驱动程序在调用 NdisMSetMiniportAttributes 函数时传递指向此结构的指针。
    • 附加到微型端口驱动程序的所有筛选器驱动程序都支持 NDIS 6.30 或更高版本的 NDIS。
    • 绑定到微型端口驱动程序的所有协议驱动程序都支持 NDIS 6.30 或更高版本的 NDIS。
  • 如果 NET_PNP_EVENT 结构的 NetEvent 成员设置为 NetEventSetPowerNetEventQueryPower,则驱动程序不得等待任何挂起的 I/O 请求完成。
NET_PNP_EVENT 结构中的 NetEvent 成员标识即插即用或电源管理事件的类型。 Buffer 包含特定于事件类型的信息。

要求

要求
最低受支持的客户端 在 NDIS 5.1 和 NDIS 6.0 及更高版本中受支持。 有关此结构的 NDIS 5.1 版本的详细信息,请参阅 NET_PNP_EVENT (NDIS 5.1) 。
标头 netpnp.h (包括 Ndis.h、Netpnp.h)

另请参阅

FilterNetPnPEvent

NDIS_BIND_FAILED_NOTIFICATION

NDIS_PORT

NDIS_PROTOCOL_PAUSE_PARAMETERS NDIS_PROTOCOL_RESTART_PARAMETERS

NDIS_RESTART_ATTRIBUTES

NDIS_SWITCH_PARAMETERS

NET_PNP_EVENT_NOTIFICATION

NdisCompleteNetPnPEvent

NdisIMInitializeDeviceInstanceEx

ProtocolBindAdapterEx

ProtocolNetPnPEvent

查询 Hyper-V 可扩展交换机配置