NdisOidRequest 函数 (ndis.h)
NdisOidRequest 函数将请求转发给基础驱动程序,以查询适配器的功能或状态或设置适配器的状态。
语法
NDIS_STATUS NdisOidRequest(
[in] NDIS_HANDLE NdisBindingHandle,
[in] PNDIS_OID_REQUEST OidRequest
);
参数
[in] NdisBindingHandle
标识绑定上目标适配器的 NdisOpenAdapterEx 函数返回的句柄。
[in] OidRequest
指向 NDIS_OID_REQUEST 结构的指针,该结构指定使用给定的 OID_XXX 代码请求的操作,以查询适配器的状态或设置适配器的状态。
返回值
基础驱动程序确定 NdisOidRequest 返回的NDIS_STATUS_XXX 代码,但它通常是以下值之一:
返回代码 | 说明 |
---|---|
|
请求操作已成功完成。 |
|
请求正在异步处理,NDIS 将调用调用方请求完成后的 ProtocolOidRequestComplete 函数。 |
|
在 OidRequest 上NDIS_OID_REQUEST结构化缓冲区的 Oid 成员中指定的 OID_XXX 代码无效或不受基础驱动程序支持。 |
|
在 OidRequest NDIS_OID_REQUEST 结构化缓冲区的 InformationBufferLength 成员中指定的值与给定OID_XXX 代码的要求不匹配。 如果信息缓冲区太小,则 BytesNeeded 成员在从 NdisOidRequest 返回时包含 InformationBufferLength 的正确值。 |
|
给定NDIS_OID_REQUEST结构中 InformationBuffer 中提供的数据对于给定的 OID_XXX 代码无效。 |
|
基础驱动程序不支持请求的操作。 |
|
由于资源短缺,请求无法满足。 通常,此返回值表示分配内存的尝试失败,但不一定指示以后提交的同一请求将因相同原因而失败。 |
|
基础驱动程序尝试了请求的操作(通常是 NIC 上的一个集),但失败。 例如,尝试设置过多的多播地址可能会导致返回此值。 |
|
基础驱动程序失败了请求的操作,因为关闭操作正在进行中。 |
|
基础微型端口驱动程序目前无法满足请求,因为它当前正在重置受影响的 NIC。 调用方的 ProtocolStatusEx 函数已或将要使用 NDIS_STATUS_RESET_START 调用,以指示正在重置。 此返回值不一定指示稍后提交的同一请求将因相同原因而失败。 |
|
此值通常是非特定默认值,当没有更具体的NDIS_STATUS_XXX 导致基础驱动程序请求失败时返回此值。 |
注解
协议驱动程序必须分配足够的内存来保存与指定 OID 关联的信息缓冲区。 驱动程序还必须在 OidRequest 中分配和设置缓冲区,然后才能调用 NdisOidRequest。 这两个缓冲区都必须从非分页池中分配,因为基础驱动程序在处理请求时以引发的 IRQL 运行。
NdisOidRequest 将请求转发到基础驱动程序或处理请求本身。 如果下一个较低的驱动程序是 NDIS 中间驱动程序,则它可以在完成最初由更高级别驱动程序提交的请求之前,使用自己的 OID 特定请求调用 NdisOidRequest 。
返回的某些错误是可恢复的,包括:
也就是说,驱动程序可以适当地修改 OidRequest 处的数据包,以更正 InformationBuffer OID_XXX 代码或缓冲区的大小或内容,并将请求数据包重新提交到 NdisOidRequest。 如果原始调用指示正在重置,或者资源短缺(可能是暂时性的)阻止执行该请求,则重新提交到 NdisOidRequest 时,可能会满足相同的数据包。
NDIS 库维护基础微型端口驱动程序的绑定。 如果给定的 OID 与系统为其提供筛选器库的系统定义的媒体类型相关联,则 NDIS 可以返回特定于绑定的查询的信息。
有关常规和媒体特定 OID 及其各自的相关信息缓冲区的详细信息,请参阅 NDIS OID。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 在 NDIS 6.0 及更高版本中受支持。 |
目标平台 | 桌面 |
标头 | ndis.h (包括 Ndis.h) |
Library | Ndis.lib |
IRQL | <= DISPATCH_LEVEL |
DDI 符合性规则 | Irql_OID_Function (ndis) |