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 代码请求的作,以查询适配器的状态或设置适配器的状态。

返回值

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

返回代码 描述
NDIS_STATUS_SUCCESS
请求作已成功完成。
NDIS_STATUS_PENDING
正在异步处理请求,NDIS 将调用调用方完成请求时, ProtocolDirectOidRequestComplete 函数。
NDIS_STATUS_INVALID_OID
OidRequestOidNDIS_OID_REQUEST成员中指定的 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 关联的信息缓冲区。 驱动程序还必须在 OidRequest 参数上分配和设置缓冲区,然后才能调用 NdisDirectOidRequest。 必须从非分页池分配这两个缓冲区,因为基础驱动程序在处理请求时在引发 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)
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