为了向基础驱动程序发出 OID 请求,协议调用 NdisOidRequest 函数。
下图演示了协议驱动程序发起的 OID 请求。
在协议驱动程序调用 NdisOidRequest 函数后,NDIS 将调用下一个基础驱动程序的请求函数。 有关微型端口驱动程序如何处理 OID 请求的详细信息,请参阅 适配器的 OID 请求。 有关筛选器驱动程序如何处理 OID 请求的详细信息,请参阅 筛选模块 OID 请求。
若要同步完成, NdisOidRequest 将返回NDIS_STATUS_SUCCESS或错误状态。 为了异步完成, NdisOidRequest 返回NDIS_STATUS_PENDING。
如果 NdisOidRequest 返回NDIS_STATUS_PENDING,则 NDIS 在基础驱动程序完成 OID 请求后调用 ProtocolOidRequestComplete 函数。 在这种情况下,NDIS 在 ProtocolOidRequestComplete 的 OidRequest 参数中传递请求的结果。 NDIS 在 ProtocolOidRequestComplete 的 Status 参数中传递请求的最终状态。
如果 NdisOidRequest 返回NDIS_STATUS_SUCCESS,它将在 OidRequest 参数的 NDIS_OID_REQUEST 结构中返回查询请求的结果。 在这种情况下,NDIS 不调用 ProtocolOidRequestComplete 函数。
若要确定基础驱动程序成功处理了哪些信息,发出 OID 请求的协议驱动程序必须在 OID 请求返回后检查NDIS_OID_REQUEST结构中的 SupportedRevision 成员中的值。 有关 NDIS 版本信息的详细信息,请参阅 指定 NDIS 版本信息。
如果基础驱动程序应将 OID 请求与后续状态指示相关联,则协议驱动程序应在NDIS_OID_REQUEST结构中设置 RequestId 成员。 当基础驱动程序发出状态指示时,它会将 NDIS_STATUS_INDICATION 结构中的 RequestId 成员设置为 OID 请求中提供的值。
当绑定处于“正在重启”、“正在运行”、“暂停”或“已暂停”状态时,驱动程序可以调用 NdisOidRequest。