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 事件或电源管理事件。
重要
如果将 NetPnpEventNotification 的 VPortId 字段设置为与 NDIS_DEFAULT_VPORT_ID 不同的值,则必须将 Flags 成员设置为 NET_EVENT_FLAGS_VPORT_ID_VALID才能使 VPortId 生效。
返回值
NdisMNetPnPEvent 可以返回以下内容:
返回代码 | 说明 |
---|---|
|
过大驱动程序已成功处理即插即用或电源管理事件。 |
|
超载驱动程序无法获取必要的系统资源来满足指定的即插即用或电源管理事件。 |
|
由于某些输入参数无效,NDIS 调用失败。 |
|
NDIS 6.0 及更高版本的协议驱动程序不得返回此状态。 NDIS 5。不支持即插即用的 x 协议驱动程序可以返回此状态以响应 NetEventSetPower,以指示 NDIS 应将其与基础适配器取消绑定。 |
|
NDIS 使请求失败,因为在 NetEventPortActivation 或 NetEventPortDeactivation PnP 事件中指定了无效的 NDIS 端口。 |
|
NDIS 使请求失败,因为 NDIS 端口处于无效端口状态。 端口在 NetEventPortActivation 或 NetEventPortDeactivation PnP 事件中指定。 |
|
驱动程序尝试处理传播的即插即用或电源管理事件失败。 |
仅当传播的事件是 NetEventQueryPower 或 NetEventQueryRemoveDevice 事件时,返回值才有效。 对于所有其他传播事件,返回值始终NDIS_STATUS_SUCCESS。
如果事件为 NetEventPortActivation 且调用失败,则调用方不应在接收指示或状态指示中使用关联的端口。
注解
任何微型端口驱动程序都可以调用 NdisMNetPnPEvent 来生成 NetEventPortActivation 和 NetEventPortDeactivation 事件。 只有中间驱动程序可以发出其他事件通知。
- 其 MiniportOidRequest 函数不得调用 NdisMNetPnPEvent。
- 如果 MiniportOidRequest 函数返回 OID 请求的NDIS_STATUS_PENDING,则 NDIS 驱动程序在通过调用 NdisMOidRequestComplete 完成 OID 请求之前,不得调用 NdisMNetPnPEvent。
如果传播的事件是 NetEventQueryPower 或 NetEventQueryRemoveDevice,则中间驱动程序必须检查 NdisMNetPnPEvent 返回的NDIS_STATUS值。 如果返回的状态为NDIS_STATUS_SUCCESS,中间驱动程序应处理事件,然后从其 ProtocolNetPnPEvent 函数返回NDIS_STATUS_SUCCESS。 如果返回的状态未NDIS_STATUS_SUCCESS,中间驱动程序应从其 ProtocolNetPnPEvent 函数返回报告的状态,而无需进一步处理。
中间驱动程序如何处理由其 ProtocolNetPnPEvent 函数接收的 NetEventSetPower 取决于指定的设备电源状态。 如果指定的设备电源状态为 NdisDeviceStateD0,则中间驱动程序应处理事件,然后调用 NdisMNetPnPEvent。 对于任何其他指定的设备电源状态,中间驱动程序应首先调用 NdisMNetPnPEvent ,然后处理事件。
仅当非 NULLProtocolBindingContext 上指示 NetEventReconfigure 或 NetEventBindList 时,中间驱动程序才应调用 NdisMNetPnPEvent 以传播 NetEventReconfigure 或 NetEventBindList。 如果在 NULLProtocolBindingContext 上指示 NetEventReconfigure 或 NetEventBindList,中间驱动程序不应调用 NdisMNetPnPEvent 来传播事件。
如果中间驱动程序处理 NetEventReconfigure 或 NetEventBindList,则应验证与事件关联的任何数据。
中间驱动程序不应通过调用 NdisMNetPnPEvent 传播 NetEventBindsComplete、NetEventPause、NetEventRestart、NetEventPortActivation 或 NetEventPortDeactivation 事件。
NDIS 中间驱动程序可以根据在 ProtocolNetPnPEvent 函数上接收的 NetEventPortActivation 或 NetEventPortDeactivation 事件,为虚拟微型端口生成自己的 NDIS 端口事件。
对于所有其他传播事件,中间驱动程序的 ProtocolNetPnPEvent 函数应传播 NdisMNetPnPEvent 返回的状态值。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 在 NDIS 6.0 及更高版本中受支持。 |
目标平台 | 通用 |
标头 | ndis.h (包括 Ndis.h) |
Library | Ndis.lib |
IRQL | PASSIVE_LEVEL |
DDI 符合性规则 | Irql_Protocol_Driver_Function (ndis) , NdisMNetPnPEventInOIDRequest (ndis) |