NdisMNetPnPEvent 函数 (ndis.h)

注册为微型端口驱动程序的 NDIS 微型端口驱动程序 (和中间驱动程序,) 调用 NdisMNetPnPEvent 函数来发起网络即插即用事件、NDIS PnP 事件或电源管理事件,或将其传播到过分的驱动程序。

语法

NDIS_STATUS NdisMNetPnPEvent(
  [in] NDIS_HANDLE                 MiniportAdapterHandle,
       PNET_PNP_EVENT_NOTIFICATION NetPnPEventNotification
);

参数

[in] MiniportAdapterHandle

NDIS 句柄,NDIS 在 MiniportInitializeEx 函数的 MiniportAdapterHandle 参数中提供。 此句柄标识受 事件影响的微型端口适配器。 如果调用方是中间驱动程序,则这是虚拟微型端口的句柄。

NetPnPEventNotification

指向 NET_PNP_EVENT_NOTIFICATION结构,描述网络即插即用事件、NDIS PnP 事件或电源管理事件。

重要

如果将 NetPnpEventNotificationVPortId 字段设置为与 NDIS_DEFAULT_VPORT_ID 不同的值,则必须将 Flags 成员设置为 NET_EVENT_FLAGS_VPORT_ID_VALID才能使 VPortId 生效。

返回值

NdisMNetPnPEvent 可以返回以下内容:

返回代码 说明
NDIS_STATUS_SUCCESS
过大驱动程序已成功处理即插即用或电源管理事件。
NDIS_STATUS_RESOURCES
超载驱动程序无法获取必要的系统资源来满足指定的即插即用或电源管理事件。
NDIS_STATUS_INVALID_PARAMETER
由于某些输入参数无效,NDIS 调用失败。
NDIS_STATUS_NOT_SUPPORTED
NDIS 6.0 及更高版本的协议驱动程序不得返回此状态。 NDIS 5。不支持即插即用的 x 协议驱动程序可以返回此状态以响应 NetEventSetPower,以指示 NDIS 应将其与基础适配器取消绑定。
NDIS_STATUS_INVALID_PORT
NDIS 使请求失败,因为在 NetEventPortActivation 或 NetEventPortDeactivation PnP 事件中指定了无效的 NDIS 端口。
NDIS_STATUS_INVALID_PORT_STATE
NDIS 使请求失败,因为 NDIS 端口处于无效端口状态。 端口在 NetEventPortActivationNetEventPortDeactivation PnP 事件中指定。
NDIS_STATUS_FAILURE
驱动程序尝试处理传播的即插即用或电源管理事件失败。
 

仅当传播的事件是 NetEventQueryPowerNetEventQueryRemoveDevice 事件时,返回值才有效。 对于所有其他传播事件,返回值始终NDIS_STATUS_SUCCESS。

如果事件为 NetEventPortActivation 且调用失败,则调用方不应在接收指示或状态指示中使用关联的端口。

注解

任何微型端口驱动程序都可以调用 NdisMNetPnPEvent 来生成 NetEventPortActivationNetEventPortDeactivation 事件。 只有中间驱动程序可以发出其他事件通知。

注意 若要防止死锁,NDIS 驱动程序必须执行以下操作:
 
若要将网络即插即用事件、NDIS PnP 事件或电源管理事件的通知传播到过度覆盖的驱动程序,NDIS 中间驱动程序在驱动程序的 ProtocolNetPnPEvent 函数的上下文中调用 NdisMNetPnPEvent。

如果传播的事件是 NetEventQueryPowerNetEventQueryRemoveDevice,则中间驱动程序必须检查 NdisMNetPnPEvent 返回的NDIS_STATUS值。 如果返回的状态为NDIS_STATUS_SUCCESS,中间驱动程序应处理事件,然后从其 ProtocolNetPnPEvent 函数返回NDIS_STATUS_SUCCESS。 如果返回的状态未NDIS_STATUS_SUCCESS,中间驱动程序应从其 ProtocolNetPnPEvent 函数返回报告的状态,而无需进一步处理。

中间驱动程序如何处理由其 ProtocolNetPnPEvent 函数接收的 NetEventSetPower 取决于指定的设备电源状态。 如果指定的设备电源状态为 NdisDeviceStateD0,则中间驱动程序应处理事件,然后调用 NdisMNetPnPEvent。 对于任何其他指定的设备电源状态,中间驱动程序应首先调用 NdisMNetPnPEvent ,然后处理事件。

仅当非 NULLProtocolBindingContext 上指示 NetEventReconfigureNetEventBindList 时,中间驱动程序才应调用 NdisMNetPnPEvent 以传播 NetEventReconfigureNetEventBindList 如果在 NULLProtocolBindingContext 上指示 NetEventReconfigureNetEventBindList,中间驱动程序不应调用 NdisMNetPnPEvent 来传播事件。

如果中间驱动程序处理 NetEventReconfigureNetEventBindList,则应验证与事件关联的任何数据。

中间驱动程序不应通过调用 NdisMNetPnPEvent 传播 NetEventBindsCompleteNetEventPauseNetEventRestartNetEventPortActivationNetEventPortDeactivation 事件。

NDIS 中间驱动程序可以根据在 ProtocolNetPnPEvent 函数上接收的 NetEventPortActivationNetEventPortDeactivation 事件,为虚拟微型端口生成自己的 NDIS 端口事件。

对于所有其他传播事件,中间驱动程序的 ProtocolNetPnPEvent 函数应传播 NdisMNetPnPEvent 返回的状态值。

要求

要求
最低受支持的客户端 在 NDIS 6.0 及更高版本中受支持。
目标平台 通用
标头 ndis.h (包括 Ndis.h)
Library Ndis.lib
IRQL PASSIVE_LEVEL
DDI 符合性规则 Irql_Protocol_Driver_Function (ndis) NdisMNetPnPEventInOIDRequest (ndis)

另请参阅

MiniportInitializeEx

MiniportOidRequest

NET_PNP_EVENT_NOTIFICATION

ProtocolNetPnPEvent