处理 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_CAPABILITIES

    为响应此 OID 查询,中间驱动程序必须报告基础物理微型端口适配器的 PnP 功能。 请注意,物理设备的微型端口适配器不会收到此 OID 查询。

    中间驱动程序在绑定参数中接收基础微型端口适配器的 PnP 功能。 它应根据中间驱动程序的预期用途,将这些信息传递给上层驱动程序。 中间驱动程序和微型端口驱动程序在微型端口适配器属性中报告 PnP 功能。 中间驱动程序不会向基础微型端口驱动程序发出 OID_PNP_CAPABILITIES 请求。 如果基础微型端口适配器具有电源管理意识,那么在虚拟微型端口属性的 NDIS_PM_WAKE_UP_CAPABILITIES 结构中,中间驱动程序必须为每个唤醒功能指定 NdisDeviceStateUnspecified 的设备电源状态:

    • MinMagicPacketWakeUp
    • MinPatternWakeUp
    • MinLinkChangeWakeUp

    此类设置表示中间驱动程序具有电源管理意识,但无法唤醒系统。

  • OID_PNP_QUERY_POWEROID_PNP_SET_POWER

    中间驱动程序必须始终向 OID_PNP_QUERY_POWER 查询或 OID_PNP_SET_POWER 设置返回 NDIS_STATUS_SUCCESS。 中间驱动程序决不能将这些 OID 请求传播给基础微型端口驱动程序。

  • “唤醒 OID”

    如果基础 NIC 具有电源管理意识,则中间驱动程序必须通过调用 NdisOidRequest or NdisCoOidRequest 将下列与唤醒事件相关的 OID_PNP_Xxx 传递给基础微型端口驱动程序:

    OID_PNP_ENABLE_WAKE_UP

    OID_PNP_ADD_WAKE_UP_PATTERN

    OID_PNP_REMOVE_WAKE_UP_PATTERN

    OID_PNP_WAKE_UP_PATTERN_LIST

    OID_PNP_WAKE_UP_ERROR

    OID_PNP_WAKE_UP_OK

中间驱动程序还必须将基础微型端口驱动程序对这些 OID 的响应传播给上层协议驱动程序。

如果基础微型端口适配器不支持电源管理,则微型端口驱动程序会将 NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES 中的 PowerManagementCapabilities 成员设置为 NULL,而 NDIS 会将 NDIS_BIND_PARAMETERS 中的 PowerManagementCapabilities 成员设置为 NULL

如果基础微型端口适配器没有电源管理意识,则中间驱动程序应在响应这些 OID 的查询或集合时返回 NDIS_STATUS_NOT_SUPPORTED。