处理 OID_PNP_Xxx 查询和设置请求
中间驱动程序的虚拟微型端口必须导出 MiniportOidRequest 函数。 当绑定到中间驱动程序虚拟微型端口的上层驱动程序调用 NdisOidRequest 以查询或设置信息对象 (OID_Xxx) 时,NDIS 会调用中间驱动程序的 MiniportOidRequest 函数。 NDIS 还可以代表自己调用 MiniportOidRequest。 有关微型端口驱动程序处理集合和查询信息对象的详细信息,请参阅获取和设置 WMI 的微型端口驱动程序信息与 NDIS 支持。
中间驱动程序应保留其在 ProtocolBindAdapterEx 函数中接收到的有关底层微型端口适配器功能的信息。 如果微型端口适配器不支持电源管理,NDIS 会将 NDIS_BIND_PARAMETERS 中的 PowerManagementCapabilities 成员设置为 NULL。
中间驱动程序可以查询或设置由底层微型端口驱动程序维护的 OID_Xxx。 使用 NdisOidRequest(如果中间驱动程序具有无连接的下边缘)或 NdisCoOidRequest(如果中间驱动程序具有面向连接的下边缘)可以做到这一点。
中间驱动程序应按以下方式处理查询和设置:
-
为响应此 OID 查询,中间驱动程序必须报告基础物理微型端口适配器的 PnP 功能。 请注意,物理设备的微型端口适配器不会收到此 OID 查询。
中间驱动程序在绑定参数中接收基础微型端口适配器的 PnP 功能。 它应根据中间驱动程序的预期用途,将这些信息传递给上层驱动程序。 中间驱动程序和微型端口驱动程序在微型端口适配器属性中报告 PnP 功能。 中间驱动程序不会向基础微型端口驱动程序发出 OID_PNP_CAPABILITIES 请求。 如果基础微型端口适配器具有电源管理意识,那么在虚拟微型端口属性的 NDIS_PM_WAKE_UP_CAPABILITIES 结构中,中间驱动程序必须为每个唤醒功能指定 NdisDeviceStateUnspecified 的设备电源状态:
- MinMagicPacketWakeUp
- MinPatternWakeUp
- MinLinkChangeWakeUp
此类设置表示中间驱动程序具有电源管理意识,但无法唤醒系统。
OID_PNP_QUERY_POWER 和 OID_PNP_SET_POWER
中间驱动程序必须始终向 OID_PNP_QUERY_POWER 查询或 OID_PNP_SET_POWER 设置返回 NDIS_STATUS_SUCCESS。 中间驱动程序决不能将这些 OID 请求传播给基础微型端口驱动程序。
“唤醒 OID”
如果基础 NIC 具有电源管理意识,则中间驱动程序必须通过调用 NdisOidRequest or NdisCoOidRequest 将下列与唤醒事件相关的 OID_PNP_Xxx 传递给基础微型端口驱动程序:
中间驱动程序还必须将基础微型端口驱动程序对这些 OID 的响应传播给上层协议驱动程序。
如果基础微型端口适配器不支持电源管理,则微型端口驱动程序会将 NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES 中的 PowerManagementCapabilities 成员设置为 NULL,而 NDIS 会将 NDIS_BIND_PARAMETERS 中的 PowerManagementCapabilities 成员设置为 NULL。
如果基础微型端口适配器没有电源管理意识,则中间驱动程序应在响应这些 OID 的查询或集合时返回 NDIS_STATUS_NOT_SUPPORTED。