NdisDirectOidRequest 函数 (ndis.h)

NdisDirectOidRequest 函数将直接 OID 请求转发到基础驱动程序,以查询适配器的功能或状态或设置适配器的状态。

语法

NDIS_STATUS NdisDirectOidRequest(
  [in] NDIS_HANDLE       NdisBindingHandle,
  [in] PNDIS_OID_REQUEST OidRequest
);

参数

[in] NdisBindingHandle

NdisOpenAdapterEx 函数返回的句柄,用于标识绑定上的目标微型端口适配器。

[in] OidRequest

指向 NDIS_OID_REQUEST 结构的指针,该结构指定使用给定的 OID_Xxx 代码请求的操作,以查询适配器的状态或设置适配器的状态。

返回值

基础驱动程序确定 NdisDirectOidRequest 返回的NDIS_STATUS_XXX 代码,但它通常是以下值之一:

返回代码 说明
NDIS_STATUS_SUCCESS
请求操作已成功完成。
NDIS_STATUS_PENDING
正在异步处理请求,NDIS 将调用调用方请求完成时的 ProtocolDirectOidRequestComplete 函数。
NDIS_STATUS_INVALID_OID
OidRequest的 NDIS_OID_REQUEST 结构化缓冲区的 Oid 成员中指定的 OID_Xxx 代码无效或不受基础驱动程序支持。
NDIS_STATUS_INVALID_LENGTH或NDIS_STATUS_BUFFER_TOO_SHORT
在 OidRequest 的NDIS_OID_REQUEST结构化缓冲区的 InformationBufferLength 成员中指定的值与给定OID_Xxx 代码的要求不匹配。 如果信息缓冲区太小,则 BytesNeeded 成员在从 NdisDirectOidRequest 返回时包含 InformationBufferLength 的正确值。
NDIS_STATUS_INVALID_DATA
在给定NDIS_OID_REQUEST结构中的 InformationBuffer 中提供的数据对于给定的 OID_Xxx 代码无效。
NDIS_STATUS_NOT_SUPPORTED或NDIS_STATUS_NOT_RECOGNIZED
基础驱动程序不支持请求的操作。 对于 NdisDirectOidRequest,如果调用驱动程序尚未注册 ,NDIS 也可以返回此状态 ProtocolDirectOidRequestComplete 函数。
NDIS_STATUS_RESOURCES
由于资源短缺,无法满足请求。 通常,此返回值表示尝试分配内存失败,但不一定指示稍后提交的同一请求将因相同原因而失败。
NDIS_STATUS_NOT_ACCEPTED
基础驱动程序尝试了请求的操作(通常是 NIC 上的一个集),但失败了。 例如,尝试设置过多的多播地址可能会导致返回此值。
NDIS_STATUS_CLOSING或NDIS_STATUS_CLOSING_INDICATING
基础驱动程序使请求的操作失败,因为关闭操作正在进行中。
NDIS_STATUS_RESET_IN_PROGRESS
基础微型端口驱动程序目前无法满足请求,因为它当前正在重置受影响的 NIC。 调用方 ProtocolStatusEx 函数已调用或将结合NDIS_STATUS_RESET_START调用,以指示重置正在进行。 此返回值不一定指示稍后提交的同一请求将因相同原因而失败。
NDIS_STATUS_FAILURE
此值通常是非特定默认值,当没有更具体的 NDIS_STATUS_Xxx 值导致基础驱动程序请求失败时返回。

注解

NdisDirectOidRequest 函数不能用于常规 OID 请求。 对于常规 OID 请求,请改用 NdisOidRequest 函数。 NdisDirectOidRequest 只能用于 NDIS 支持用于直接 OID 接口的 OID。 例如,可以使用以下 OID:

OID_TCP_TASK_IPSEC_OFFLOAD_V2_ADD_SA OID_TCP_TASK_IPSEC_OFFLOAD_V2_DELETE_SA OID_TCP_TASK_IPSEC_OFFLOAD_V2_UPDATE_SA

协议驱动程序必须分配足够的内存来保存与指定 OID 关联的信息缓冲区。 在调用 NdisDirectOidRequest 之前,驱动程序还必须在 OidRequest 参数处分配和设置缓冲区。 这两个缓冲区都必须从非分页池中分配,因为基础驱动程序在处理请求时以引发的 IRQL 运行。

NdisDirectOidRequest 将请求转发到基础驱动程序或处理请求本身。 如果下一个较低的驱动程序是 NDIS 中间驱动程序,则中间驱动程序可以在完成更高级别驱动程序最初提交的请求之前,使用自己的 OID 特定请求调用 NdisDirectOidRequest

调用 NdisDirectOidRequest 的 驱动程序必须注册 ProtocolDirectOidRequestComplete 函数。

直接 OID 请求接口类似于常规 OID 请求接口。 有关发出常规请求的详细信息,请参阅 NdisOidRequest

注意 尽管直接 OID 请求通常不会序列化,但 NDIS 本身仍可能NDIS_STATUS_PENDING请求,并将请求排队等待以后完成。 例如,NDIS 可能会将发送到当前处于低功耗状态的选择性挂起微型端口的直接 OID 请求加入队列。 即使基础微型端口同步完成请求,协议和筛选器也必须准备好处理NDIS_STATUS_PENDING代码。
 

要求

要求
最低受支持的客户端 在 NDIS 6.1 及更高版本中受支持。
目标平台 桌面
标头 ndis.h (包括 Ndis.h)
Library Ndis.lib
IRQL <= DISPATCH_LEVEL

另请参阅

NDIS_OID_REQUEST

NdisOidRequest

NdisOpenAdapterEx

OID_TCP_TASK_IPSEC_OFFLOAD_V2_ADD_SA OID_TCP_TASK_IPSEC_OFFLOAD_V2_DELETE_SA OID_TCP_TASK_IPSEC_OFFLOAD_V2_UPDATE_SA ProtocolDirectOidRequestComplete

ProtocolStatusEx