CoNDIS 协议驱动程序 OID 请求

CoNDIS 协议驱动程序(客户端或调用管理器)可以查询或设置微型端口驱动程序和其他协议驱动程序的作参数。 CoNDIS 协议驱动程序还可以在微型端口调用管理器(MCM)中查询或设置信息。 有关 OID 请求和 MCM 的详细信息,请参阅 CoNDIS MCM OID 请求

为了向基础驱动程序发起 OID 请求,协议驱动程序调用 NdisCoOidRequest 函数,并在 NdisAfHandle 参数中将地址系列(AF)句柄设置为 NULL。 为了向另一个 CoNDIS 协议驱动程序发起 OID 请求,协议驱动程序需要调用 NdisCoOidRequest 并提供一个有效的 AF 句柄。

协议驱动程序调用 NdisCoOidRequest 函数后,NDIS 将调用其他驱动程序的 OID 请求函数(基础驱动程序或其他 CoNDIS 协议驱动程序)。 对于微型端口驱动程序,NDIS 调用 MiniportCoOidRequest 函数。 对于协议驱动程序,NDIS 调用 ProtocolCoOidRequest 函数。

下图演示了定向到微型端口驱动程序的 OID 请求。

示意图,说明定向到微型端口驱动程序的 OID 请求。

下图演示了定向到协议驱动程序的 OID 请求。

示意图,说明定向到协议驱动程序的 OID 请求。

若要同步完成,NdisCoOidRequest 将返回 NDIS_STATUS_SUCCESS 或错误状态。 为了异步完成,NdisCoOidRequest 将返回 NDIS_STATUS_PENDING。

如果 NdisCoOidRequest 返回 NDIS_STATUS_PENDING,则在其他驱动程序完成 OID 请求并调用 NdisMCoOidRequestComplete 函数或 NdisCoOidRequestComplete 函数后,NDIS 将调用 ProtocolCoOidRequestComplete 函数。 在这种情况下,NDIS 将请求的结果传递到 ProtocolCoOidRequestCompleteOidRequest 参数。 NDIS 在 ProtocolCoOidRequestCompleteStatus 参数中传递请求的最终状态。

如果 NdisCoOidRequest 返回NDIS_STATUS_SUCCESS,则会在 OidRequest 参数点的 NDIS_OID_REQUEST 结构中返回查询请求的结果。 在这种情况下,NDIS 不调用 ProtocolCoOidRequestComplete 函数。

如果基础驱动程序需要将 OID 请求与后续状态指示关联起来,则协议驱动程序应在 NDIS_OID_REQUEST 结构中设置 RequestIdRequestHandle 成员。 如果基础驱动程序发出状态指示,驱动程序会将 NDIS_STATUS_INDICATION 结构中的 RequestId 成员设置为 NDIS_OID_REQUEST 结构的 RequestId 成员中的值,并将 NDIS_STATUS_INDICATION 结构中的 DestinationHandle 成员设置为 NDIS_OID_REQUEST structure 结构的 RequestHandle 成员中的值。

当绑定处于 RestartingRunningPausingPaused 状态时,驱动程序可以调用 NdisCoOidRequest