NdisCoOidRequest 函数 (ndis.h)
NdisCoOidRequest 函数将请求转发给目标 CoNDIS 驱动程序,以查询或设置目标驱动程序的 OID 指定信息。
语法
NDIS_STATUS NdisCoOidRequest(
[in] NDIS_HANDLE NdisBindingHandle,
[in, optional] NDIS_HANDLE NdisAfHandle,
[in, optional] NDIS_HANDLE NdisVcHandle,
[in, optional] NDIS_HANDLE NdisPartyHandle,
[in, out] PNDIS_OID_REQUEST OidRequest
);
参数
[in] NdisBindingHandle
NdisOpenAdapterEx 函数返回的句柄,用于标识绑定的目标适配器。
[in, optional] NdisAfHandle
标识在客户端、呼叫管理器和 NDIS 之间共享的地址系列(AF)的句柄。 此句柄的获取方式如下:
- 如果调用方是向调用管理器发出请求的客户端,则客户端最初从成功调用获取此句柄 NdisClOpenAddressFamilyEx 函数。
- 如果调用方是向客户端发出请求的独立呼叫管理器或微型端口调用管理器(MCM),则调用管理器或 MCM 最初获取此句柄作为其 ProtocolCmOpenAf 函数的输入参数。
[in, optional] NdisVcHandle
标识调用方请求或设置信息的虚拟连接的句柄(如果请求特定于 VC)。 否则,如果此参数 NULL,则请求不特定于 VC。 对于任何特定于 VC 的请求,调用方最初在使用 NdisCoCreateVc 函数创建 VC 时,或者作为其 ProtocolCoCreateVc 函数的输入参数获取此句柄。 对于定向到基础微型端口驱动程序的特定于 VC 的请求,此句柄标识 VC,而 NdisAfHandle 和 NdisPartyHandleNULL。
[in, optional] NdisPartyHandle
一个句柄,用于标识调用方在多点 VC 上请求或设置信息(如果请求是特定于群的)。 否则,如果此参数 NULL,则请求不是特定于群的。 对于任何特定于方的请求,客户端最初从成功调用 NdisClAddParty 函数或 NdisClMakeCall 函数或调用管理器获取此句柄作为其 ProtocolCmAddParty 函数的输入参数获取此句柄。 如果 NdisAfHandleNULL,则 NdisPartyHandle 也 NULL。
[in, out] OidRequest
指向 NDIS_OID_REQUEST 结构的指针,该结构指定使用给定OID_XXX 代码请求的作来查询或设置信息。
返回值
目标驱动程序确定 XXX代码 NdisCoOidRequest 返回哪些NDIS_STATUS_,通常是以下值之一:
返回代码 | 描述 |
---|---|
|
请求作已成功完成。 |
|
正在异步处理请求,NDIS 将调用调用方完成请求后, ProtocolCoOidRequestComplete 函数。 |
|
在 OidRequestNDIS_OID_REQUEST 参数的 Oid 成员中指定的 OID_XXX 代码无效或不受基础驱动程序支持。 |
|
在 OidRequest 的 NDIS_OID_REQUEST 结构化缓冲区的 InformationBufferLength 成员中指定的值与给定的 OID_XXX 代码的要求不匹配。 如果信息缓冲区太小,则NDIS_OID_REQUEST的 BytesNeeded 成员包含 InformationBufferLength的正确值,NdisCoOidRequest 返回时。 |
|
给定 NDIS_OID_REQUEST 结构中 InformationBuffer 提供的数据对于给定的 OID_XXX 代码无效。 |
|
基础驱动程序不支持请求的作。 |
|
由于资源短缺,无法满足请求。 通常,此返回值指示尝试分配内存失败,但不一定指示相同的请求(如果稍后提交)将失败。 |
|
基础驱动程序尝试了请求的作,通常是一个设置的请求,但作失败。 例如,尝试设置过多的多播地址可能会导致 NdisCoOidRequest 返回此值。 |
|
基础驱动程序由于正在执行关闭作而失败请求的作。 |
|
基础微型端口驱动程序目前无法满足请求,因为它当前正在重置受影响的 NIC。 调用方 ProtocolStatusEx 函数或将使用NDIS_STATUS_RESET_START调用,以指示重置正在进行。 此返回值不一定指示相同的请求(如果稍后提交)将失败,原因相同。 |
|
此值通常是一个非特定默认值,当没有更具体的NDIS_STATUS_XXX 导致基础驱动程序失败请求时返回该值。 |
|
微型端口驱动程序停止处理请求。 例如,NDIS 称为基础微型端口驱动程序的 MiniportResetEx 或 MiniportCancelOidRequest 函数。 |
言论
CoNDIS 客户端和独立调用管理器可以调用 NdisCoOidRequest 函数,以在目标驱动程序中查询或设置 OID 指定的信息。 目标驱动程序可以是另一个 CoNDIS 协议驱动程序或基础驱动程序。
NdisCoOidRequest 的调用方必须分配足够的内存来保存与指定 OID 关联的信息缓冲区。 调用方还必须在 OidRequest 分配和设置缓冲区,然后才能调用 NdisCoOidRequest。 必须从非分页池分配这两个缓冲区,因为目标驱动程序可以在处理请求时在引发 IRQL 时运行。
NdisCoOidRequest 返回的一些错误是可恢复的,包括:
- NDIS_STATUS_INVALID_OID
- NDIS_STATUS_INVALID_LENGTH
- NDIS_STATUS_BUFFER_TOO_SHORT
- NDIS_STATUS_INVALID_DATA
- NDIS_STATUS_RESOURCES
- NDIS_STATUS_RESET_IN_PROGRESS
根据 NdisAfHandle 参数的值,客户端和独立调用管理器 NdisCoOidRequest 相互通信,或与基础连接导向微型端口驱动程序进行通信。
如果驱动程序为 NdisVcHandle传递 NULL,则请求本质上是全局性的,无论请求是定向到客户端、调用管理器还是微型端口驱动程序。 例如,如果调用方为 NdisVcHandle提供非NULL 值,则对基础连接型微型端口驱动程序的 OID_GEN_CO_RCV_CRC_ERROR OID 请求将返回特定 VC 遇到的循环冗余检查 (CRC) 错误数。 对于 NdisVcHandleNULL 的相同请求,基础微型端口驱动程序返回所有 VM 遇到的 CRC 错误总数。
客户端和独立调用管理器应为所有不面向连接的 OID 调用 NdisOidRequest 函数,例如在 OID_GEN_SUPPORTED_LIST 查询中返回的 OID(在协议驱动程序绑定到基础 NIC 驱动程序之后,通常会在初始化期间发出)。
如果 NdisCoOidRequest 返回NDIS_STATUS_PENDING,则异步处理请求,NDIS 将调用驱动程序的完成请求后, ProtocolCoOidRequestComplete 函数。 如果 NdisCoOidRequest 返回任何其他状态,则当 NdisCoOidRequest 返回时,请求将完成,NDIS 不会调用 ProtocolCoOidRequestComplete。
有关定义为与 NdisCoOidRequest 和 NdisOidRequest一起使用的 OID 集的详细信息,请参阅 NDIS OID。
只有客户端和独立调用管理器(即协议驱动程序)才能调用 NdisCoOidRequest。 MCM 调用 NdisMCmOidRequest 函数来与其客户端通信。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | NDIS 6.0 及更高版本中受支持。 |
目标平台 | 桌面 |
标头 | ndis.h (包括 Ndis.h) |
库 | Ndis.lib |
IRQL | <= DISPATCH_LEVEL |
DDI 符合性规则 | Irql_Connection_Function(ndis) |